:root{--bg:#0b0e11;--side:#101418;--surface:#14191e;--surface2:#191f25;--line:#283039;--text:#f2f5f4;--muted:#8e9aa4;--accent:#35d6a0;--accent2:#1aa77a;--warn:#f1a24a;--danger:#f45d68;--radius:7px;--shadow:0 18px 55px rgba(0,0,0,.35);font-family:Inter,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--text);background:var(--bg);font-size:14px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}button,input,select{font:inherit;letter-spacing:0}.hidden{display:none!important}.app-shell{min-height:100vh;display:grid;grid-template-columns:224px minmax(0,1fr)}
.sidebar{position:sticky;top:0;height:100vh;background:var(--side);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:24px 14px 16px;z-index:20}.brand{display:flex;align-items:center;gap:11px;padding:0 8px 28px}.brand strong{display:block;font-size:15px}.brand span{display:block;color:var(--muted);font-size:11px;margin-top:3px}.brand-mark{width:44px;height:44px;border-radius:7px;background:var(--accent);color:#07130f;display:grid;place-items:center;font-size:22px;font-weight:900;box-shadow:0 0 0 4px rgba(53,214,160,.09)}.brand-mark.small{width:32px;height:32px;font-size:16px}
nav{display:grid;gap:4px}.nav-item{border:0;background:transparent;color:var(--muted);height:42px;border-radius:6px;padding:0 12px;display:flex;align-items:center;gap:12px;cursor:pointer;text-align:left}.nav-item:hover{background:var(--surface);color:var(--text)}.nav-item.active{background:#17221f;color:var(--accent);box-shadow:inset 2px 0 var(--accent)}.nav-icon{width:18px;text-align:center;font-size:17px}.sidebar-foot{margin-top:auto;border-top:1px solid var(--line);padding:16px 7px 0;display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12px}.sidebar-foot .icon-btn{margin-left:auto}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px rgba(53,214,160,.6);display:inline-block}.status-dot.error{background:var(--danger);box-shadow:none}
main{min-width:0;padding:0 34px 48px}.topbar{height:92px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.topbar h2{margin:0;font-size:19px;letter-spacing:0}.topbar p{margin:6px 0 0;color:var(--muted);font-size:12px}.health{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12px}.health #clock{padding-left:12px;margin-left:6px;border-left:1px solid var(--line)}
.view{display:none;padding-top:28px}.view.active{display:block}.metrics{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface)}.metric{padding:22px;border-right:1px solid var(--line);min-height:114px}.metric:last-child{border-right:0}.metric-label{color:var(--muted);font-size:12px}.metric-value{font-size:28px;font-weight:700;margin:12px 0 4px;font-variant-numeric:tabular-nums}.metric-meta{font-size:11px;color:var(--muted)}.metric-meta.good{color:var(--accent)}
.section-head{display:flex;justify-content:space-between;align-items:center;margin:30px 0 13px}.section-head.compact{margin:0 0 24px}.section-head h3{margin:0;font-size:15px}.section-head p{margin:5px 0 0;color:var(--muted);font-size:12px}.table-wrap{border:1px solid var(--line);border-radius:var(--radius);overflow:auto;background:var(--surface)}table{width:100%;border-collapse:collapse;min-width:720px}th{height:42px;padding:0 16px;text-align:left;background:#11161a;color:#7f8b94;font-size:11px;font-weight:600;text-transform:uppercase}td{height:57px;padding:10px 16px;border-top:1px solid var(--line);color:#dce2e0;font-size:12px}tbody tr:hover{background:#171d22}.cell-primary{font-weight:600;color:var(--text)}.cell-secondary{color:var(--muted);font-size:11px;margin-top:4px}.serial{font-family:"Cascadia Mono",Consolas,monospace;font-size:11px}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:999px;background:#20272d;color:var(--muted);font-size:11px}.badge:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.badge.active,.badge.success{color:var(--accent);background:rgba(53,214,160,.09)}.badge.unused{color:#78aee8;background:rgba(120,174,232,.09)}.badge.revoked,.badge.failed,.badge.auth_failed,.badge.ip_denied{color:var(--danger);background:rgba(244,93,104,.09)}.badge.redeemed{color:var(--warn);background:rgba(241,162,74,.09)}.quota-bar{width:120px;height:4px;background:#2c343b;margin-top:7px;border-radius:2px;overflow:hidden}.quota-bar i{display:block;height:100%;background:var(--accent)}
.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:14px}.search{height:38px;flex:1;min-width:220px;display:flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:0 12px}.search input{border:0;background:transparent;outline:0;color:var(--text);width:100%}input,select{height:38px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--text);padding:0 11px;outline:0}input:focus,select:focus{border-color:var(--accent)}select{min-width:130px}.btn{height:38px;border:1px solid var(--line);border-radius:6px;padding:0 14px;color:var(--text);background:var(--surface2);cursor:pointer;font-weight:600;font-size:12px}.btn:hover{filter:brightness(1.12)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#07130f}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.ghost{background:transparent}.btn.wide{width:100%}.icon-btn{width:34px;height:34px;border:1px solid var(--line);border-radius:6px;background:transparent;color:var(--muted);cursor:pointer;display:inline-grid;place-items:center;font-size:18px}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface2)}.icon-btn:disabled{opacity:.35;cursor:not-allowed}.pagination{display:flex;justify-content:space-between;align-items:center;padding:13px 4px;color:var(--muted);font-size:12px}.pagination>div{display:flex;align-items:center;gap:10px}
.modal label{display:grid;gap:8px;color:var(--muted);font-size:12px}.modal input{width:100%}.actions{display:flex;gap:7px}
.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 25%,#17221f 0,#0b0e11 45%)}.login-panel{width:min(390px,100%);border:1px solid var(--line);border-radius:var(--radius);background:rgba(20,25,30,.96);box-shadow:var(--shadow);padding:34px;display:grid;gap:22px}.login-panel>.brand-mark{margin-bottom:3px}.login-panel h1{font-size:20px;margin:0}.login-panel p{color:var(--muted);margin:7px 0 0}.login-panel label{display:grid;gap:8px;color:var(--muted);font-size:12px}.form-error{min-height:16px;color:var(--danger);font-size:12px}
.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.58);z-index:40}.drawer{position:fixed;top:0;right:0;width:min(570px,94vw);height:100vh;background:var(--side);border-left:1px solid var(--line);z-index:50;box-shadow:var(--shadow);overflow:auto}.drawer-head{height:94px;padding:21px 24px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.drawer-head h3{margin:5px 0 0;font-size:15px}.eyebrow{color:var(--accent);font-size:10px;text-transform:uppercase}.drawer-body{padding:22px}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:6px;overflow:hidden}.detail-item{background:var(--surface);padding:14px}.detail-item span{display:block;color:var(--muted);font-size:10px;margin-bottom:7px}.detail-item strong{font-size:12px;word-break:break-all}.detail-section{margin-top:24px}.detail-section h4{font-size:12px;margin:0 0 10px;color:var(--muted)}.detail-actions{display:flex;gap:8px;margin-top:22px}
.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.68);z-index:60;display:grid;place-items:center;padding:20px}.modal{width:min(410px,100%);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:26px;box-shadow:var(--shadow)}.danger-icon{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:rgba(244,93,104,.13);color:var(--danger);font-weight:800}.modal h3{font-size:16px;margin:16px 0 8px}.modal p{color:var(--muted);line-height:1.6;font-size:12px;margin:0 0 20px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.toast{position:fixed;right:24px;bottom:24px;z-index:80;background:#e8f7f1;color:#0b3a2c;border-radius:6px;padding:12px 16px;box-shadow:var(--shadow);font-size:12px;font-weight:600}.toast.error{background:#ffe9eb;color:#6d1820}.mobile-only{display:none}
.skeleton{height:12px;border-radius:3px;background:linear-gradient(90deg,#20262b,#2a3238,#20262b);background-size:200% 100%;animation:shimmer 1.2s infinite}@keyframes shimmer{to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.skeleton{animation:none}}
@media(max-width:900px){.app-shell{grid-template-columns:1fr}.sidebar{position:fixed;left:-230px;width:224px;transition:left .2s}.sidebar.open{left:0}.mobile-only{display:grid}main{padding:0 18px 36px}.topbar{height:78px;justify-content:flex-start;gap:13px}.health{margin-left:auto}.health #clock{display:none}.metrics{grid-template-columns:1fr 1fr}.metric:nth-child(2){border-right:0}.metric:nth-child(-n+2){border-bottom:1px solid var(--line)}.toolbar{flex-wrap:wrap}.search{flex-basis:100%}.toolbar select{flex:1}.toolbar .btn{flex:1}}@media(max-width:560px){.metrics{grid-template-columns:1fr}.metric{border-right:0;border-bottom:1px solid var(--line)!important}.metric:last-child{border-bottom:0!important}.topbar p{display:none}.health #health-text{display:none}.detail-grid{grid-template-columns:1fr}}
/* Keep compact forms inside narrow mobile viewports. */
.login-panel{min-width:0}.login-panel input{min-width:0}
@media(max-width:560px){.login-shell{display:block;padding:16px}.login-panel{width:calc(100vw - 32px);margin:22vh auto 0;padding:28px}}
.llm-banner{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:22px 0 26px;border-bottom:1px solid var(--line)}.llm-banner h3{margin:6px 0 7px;font-size:19px}.llm-banner p{margin:0;color:var(--muted);font-size:12px;line-height:1.7}.llm-banner-actions{display:flex;gap:8px;flex-shrink:0}.llm-summary{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-radius:var(--radius);margin-top:22px;background:var(--surface);overflow:hidden}.llm-stat{padding:17px 18px;border-right:1px solid var(--line)}.llm-stat:last-child{border:0}.llm-stat span{display:block;color:var(--muted);font-size:11px}.llm-stat strong{display:block;margin-top:9px;font-size:16px}.llm-stat strong.good{color:var(--accent)}.capabilities{display:flex;gap:5px;flex-wrap:wrap}.capabilities span{border:1px solid var(--line);background:#11161a;border-radius:4px;padding:3px 6px;color:#aab4bb;font-size:10px}.role{display:inline-block;padding:4px 8px;border-radius:4px;font-size:11px;font-weight:700}.role.primary{background:rgba(53,214,160,.1);color:var(--accent)}.role.fallback{background:rgba(120,174,232,.1);color:#78aee8}.model-cell{max-width:220px;overflow:hidden;text-overflow:ellipsis}.provider-url{max-width:230px;overflow:hidden;text-overflow:ellipsis}.llm-policy{margin-top:16px;border-left:2px solid #78aee8;padding:11px 13px;background:rgba(120,174,232,.05);display:flex;gap:12px;font-size:11px}.llm-policy span{color:var(--muted)}.provider-modal{width:min(680px,96vw);max-height:92vh;overflow:auto}.modal-head{display:flex;align-items:center;justify-content:space-between}.modal-head h3{margin:5px 0 0}.provider-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:22px}.provider-form-grid label{display:grid;gap:7px;color:var(--muted);font-size:11px}.provider-form-grid input,.provider-form-grid select{width:100%}.provider-form-grid .span-2{grid-column:1/-1}.capability-checks{display:flex;flex-wrap:wrap;gap:8px}.capability-checks label{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:5px;padding:7px 10px;color:var(--text);cursor:pointer}.capability-checks input{width:14px;height:14px}.toggle-line{display:flex!important;grid-template-columns:18px 1fr!important;align-items:center}.toggle-line input{width:16px;height:16px}.table-wrap .toggle-provider{margin-left:5px}
@media(max-width:900px){.llm-banner{align-items:flex-start;flex-direction:column}.llm-summary{grid-template-columns:1fr 1fr}.llm-stat:nth-child(2){border-right:0}.llm-stat:nth-child(-n+2){border-bottom:1px solid var(--line)}}
@media(max-width:560px){.llm-banner-actions{width:100%;flex-wrap:wrap}.llm-banner-actions .btn{flex:1}.llm-summary{grid-template-columns:1fr}.llm-stat{border-right:0;border-bottom:1px solid var(--line)}.provider-form-grid{grid-template-columns:1fr}.provider-form-grid .span-2{grid-column:auto}.llm-policy{display:grid}}
.drawer{width:min(650px,94vw)}.badge.online{color:var(--accent);background:rgba(53,214,160,.09)}.badge.offline{color:var(--muted);background:#20272d}.device-card{border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:16px;margin-bottom:12px}.device-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:14px}.device-head strong{display:block;font-size:13px}.device-head span{display:block;color:var(--muted);font-size:11px;margin-top:4px;word-break:break-all}.device-grid,.fingerprint-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:6px;overflow:hidden}.fingerprint-grid{grid-template-columns:1fr;margin-top:10px}.device-grid>div,.fingerprint-grid>div{background:#11161a;padding:11px}.device-grid span,.fingerprint-grid span{display:block;color:var(--muted);font-size:10px;margin-bottom:6px}.device-grid strong,.fingerprint-grid strong{font-size:12px;word-break:break-all}.empty-device{border:1px dashed var(--line);border-radius:6px;color:var(--muted);padding:18px;text-align:center;font-size:12px}@media(max-width:560px){.device-head{display:grid}.device-grid{grid-template-columns:1fr}}
.license-toolbar{display:grid;gap:12px;margin-bottom:14px}.license-search-row{display:flex;align-items:center}.license-search-row .search{min-width:0;width:100%}.license-filter-row{display:flex;align-items:center;justify-content:space-between;gap:24px;min-width:0}.filter-group{display:flex;align-items:center;min-width:0}.filter-options{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.filter-option{height:32px;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--muted);padding:0 11px;font-size:12px;font-weight:600;cursor:pointer;letter-spacing:0}.filter-option:hover{color:var(--text);background:var(--surface2)}.filter-option.active{color:#07130f;background:var(--accent);border-color:var(--accent)}.license-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;transition:opacity .16s ease}.license-grid.is-refreshing{opacity:.62;pointer-events:none}.license-card{min-width:0;border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:16px}.license-card:hover{border-color:#3a454e;background:#171d22}.license-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding-bottom:14px;border-bottom:1px solid var(--line)}.license-card-title{font-size:13px;font-weight:700;color:var(--text)}.license-card-serial{margin-top:6px;color:var(--muted);font-size:10px;word-break:break-all}.license-card-actions{display:flex;align-items:center;gap:7px;flex:none}.license-card-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;padding-top:15px}.license-card-field{min-width:0}.license-card-field>span{display:block;color:var(--muted);font-size:10px;margin-bottom:7px}.license-card-field strong{display:block;font-size:12px;word-break:break-word}.license-card-field small{display:block;color:var(--muted);font-size:10px;line-height:1.5;margin-top:5px;word-break:break-word}.license-card-field .quota-bar{width:100%;max-width:180px}.license-loading{min-height:180px}.license-empty{grid-column:1/-1;border:1px dashed var(--line);border-radius:6px;padding:30px;text-align:center;color:var(--muted)}@media(prefers-reduced-motion:reduce){.license-grid{transition:none}}@media(max-width:980px){.license-grid{grid-template-columns:1fr}}@media(max-width:760px){.license-filter-row{gap:10px;align-items:flex-start}.filter-option{padding:0 8px}}@media(max-width:560px){.license-filter-row{display:grid;grid-template-columns:1fr}.filter-group:last-child{justify-content:flex-end}.license-card-grid{grid-template-columns:1fr}.license-card-head{gap:8px}}
.license-search-row .search{flex:1}.license-search-row #new-license{flex:none;margin-left:10px;white-space:nowrap}.license-create-modal{width:min(700px,96vw);max-height:92vh;overflow:auto}.license-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:22px}.license-form-grid label{display:grid;gap:7px;color:var(--muted);font-size:11px}.license-form-grid input,.license-form-grid select{width:100%}.license-form-grid .span-2{grid-column:1/-1}.license-form-grid small{color:var(--muted);font-size:10px;line-height:1.5}.license-result{margin-top:18px;border-top:1px solid var(--line);padding-top:18px}.result-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.result-head h4{margin:0;font-size:12px}.result-head p{margin:5px 0 0;color:var(--muted);font-size:11px}.license-result .serial-results{height:180px;margin-top:12px}.license-create-modal .modal-actions{margin-top:20px}.license-create-modal .risk-note{margin-top:18px}@media(max-width:560px){.license-search-row{align-items:stretch;flex-wrap:wrap}.license-search-row .search{flex-basis:100%}.license-search-row #new-license{width:100%;margin:0}.license-form-grid{grid-template-columns:1fr}.license-form-grid .span-2{grid-column:auto}.license-create-modal{padding:20px}.license-result .serial-results{height:150px}}
