:root{--bg:#f5f7f8;--surface:#fff;--rail:#18201e;--text:#18201e;--muted:#687570;--border:#dce3e0;--accent:#16785d;--accent-hover:#105f49;--danger:#b42318;--radius:6px;--shadow:0 1px 2px rgba(16,24,20,.06)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%}input[type=checkbox]{width:14px;height:14px;min-height:0;margin:0;padding:0;accent-color:var(--accent);cursor:pointer}.cb-col{padding-right:0;width:1px}html,body{margin:0;min-height:100%;font-family:Inter,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--text);background:var(--bg);font-size:14px;letter-spacing:0}a{color:var(--accent);text-decoration:none}.back-link{display:inline-block;margin-bottom:16px;font-size:13px;color:var(--muted)}.back-link:hover{color:var(--accent)}button,input,select,textarea{font:inherit}.app-shell{display:grid;grid-template-columns:220px 1fr;min-height:100vh}.sidebar{position:sticky;top:0;height:100vh;padding:18px 12px;background:var(--rail);display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:10px;color:#fff;font-weight:700;padding:4px 10px 22px}.brand-mark{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:5px;background:#2d9b79;color:#fff;font-weight:800}.sidebar nav{display:grid;gap:3px}.sidebar nav a,.logout{padding:9px 12px;border-radius:5px;color:#aebbb6}.sidebar nav a:hover,.sidebar nav a.active{background:#26322e;color:#fff}.logout{margin-top:auto}.main{min-width:0}.topbar{height:58px;padding:0 28px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.topbar span{font-size:12px;color:var(--muted)}.content{padding:24px 28px}.metric-strip{display:grid;grid-template-columns:repeat(4,1fr);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:24px}.metric-strip div{padding:18px 20px;border-right:1px solid var(--border)}.metric-strip div:last-child{border:0}.metric-strip span{display:block;color:var(--muted);font-size:12px}.metric-strip strong{display:block;margin-top:7px;font-size:25px}.section-head{display:flex;align-items:end;justify-content:space-between;margin:22px 0 12px}.section-head h2,.form-panel h2,.detail-list h2,.actions-panel h2{font-size:16px;margin:0}.section-head p{margin:3px 0 0;color:var(--muted);font-size:12px}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow)}table{width:100%;border-collapse:collapse;white-space:nowrap}th,td{padding:11px 13px;text-align:left;border-bottom:1px solid #edf1ef}th{font-size:11px;text-transform:uppercase;color:var(--muted);background:#f9faf9}tr:last-child td{border:0}.empty{text-align:center;color:var(--muted);padding:34px}.status{display:inline-flex;padding:2px 7px;border-radius:4px;background:#edf2f0;font-size:11px}.status.active{color:#116149;background:#e7f5ef}.status.suspended{color:#946200;background:#fff5d9}.status.revoked{color:#9f241b;background:#fdecea}.status.expired{color:#687570;background:#edf2f0}.split-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:22px;align-items:start}.form-panel,.detail-list,.actions-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}form{display:grid;gap:12px;margin-top:16px}label{display:grid;gap:5px;color:var(--muted);font-size:12px}input,select,textarea{width:100%;min-height:38px;padding:8px 10px;border:1px solid #cfd8d4;border-radius:5px;background:#fff;color:var(--text);outline:none}textarea{min-height:76px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(22,120,93,.12)}.button{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:7px 12px;border:1px solid var(--border);border-radius:5px;background:#fff;color:var(--text);cursor:pointer}.button:hover{background:#f5f7f6}.button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.button.primary:hover{background:var(--accent-hover)}.button.danger{color:var(--danger);border-color:#efc2be}.button.full{width:100%}.flash{padding:10px 12px;margin-bottom:14px;border-radius:5px;background:#edf2f0}.flash.success{color:#116149;background:#e7f5ef}.flash.error{color:#9f241b;background:#fdecea}.login-page{min-height:100vh;display:grid;place-items:center;padding:20px;background:#eef2f0}.login-panel{width:min(380px,100%);padding:28px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 12px 30px rgba(24,32,30,.1)}.login-brand{display:flex;gap:12px;align-items:center;margin-bottom:8px}.login-brand .brand-mark{width:38px;height:38px}.login-brand h1{font-size:19px;margin:0}.login-brand p{font-size:12px;color:var(--muted);margin:2px 0 0}.secret-reveal{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 18px;margin-bottom:20px;background:#fff8dd;border:1px solid #ead899;border-radius:var(--radius)}.secret-reveal p{margin:3px 0 0;color:#756520;font-size:12px}.secret-reveal code{font-size:16px;font-weight:700}.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:22px;margin-bottom:24px}.detail-list dl{margin:15px 0 0}.detail-list dl div{display:grid;grid-template-columns:130px 1fr;padding:10px 0;border-top:1px solid #edf1ef}.detail-list dt{color:var(--muted)}.detail-list dd{margin:0}.action-row{display:flex;gap:7px;margin-top:14px}.action-row form{margin:0;display:block}.actions-panel>form+form{border-top:1px solid #edf1ef;padding-top:14px}code{font-family:"Cascadia Mono",Consolas,monospace;font-size:12px}.fingerprint{cursor:pointer;position:relative}.fingerprint .fp-full{display:none;position:absolute;left:0;top:100%;z-index:10;padding:6px 10px;background:#18201e;color:#fff;border-radius:5px;font-size:12px;white-space:pre;word-break:break-all;max-width:50vw;box-shadow:0 4px 12px rgba(0,0,0,.2)}.fingerprint.revealed .fp-full{display:inline-block}
@media(max-width:800px){.app-shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;padding:10px 12px}.brand{padding:2px 6px 10px}.sidebar nav{display:flex;overflow:auto}.sidebar nav a{white-space:nowrap}.logout{position:absolute;right:12px;top:15px}.topbar{padding:0 14px}.content{padding:16px 12px}.metric-strip{grid-template-columns:repeat(2,1fr)}.metric-strip div:nth-child(2){border-right:0}.metric-strip div:nth-child(-n+2){border-bottom:1px solid var(--border)}.split-layout,.detail-grid{grid-template-columns:1fr}.form-panel,.actions-panel{order:-1}.secret-reveal{align-items:flex-start;flex-direction:column}.secret-reveal code{font-size:14px}.detail-list dl div{grid-template-columns:1fr;gap:4px}}
.split-layout>*{min-width:0}.form-panel,.detail-list,.actions-panel,label{min-width:0}input,select,textarea{min-width:0;max-width:100%}

.public-key-trigger{padding:0;border:0;background:none;color:var(--accent);cursor:pointer;font:inherit}.public-key-trigger:hover{text-decoration:underline}.public-key-dialog{width:min(720px,calc(100vw - 32px));padding:0;border:1px solid var(--border);border-radius:8px;color:var(--text);box-shadow:0 20px 60px rgba(24,32,30,.24)}.public-key-dialog::backdrop{background:rgba(16,24,20,.45)}.public-key-dialog-head{display:flex;align-items:flex-start;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--border)}.public-key-dialog-head h2{margin:0;font-size:17px}.public-key-dialog-head p{margin:4px 0 0;color:var(--muted);font-size:12px}.dialog-close[aria-label]{padding:0;border:0;background:none;color:var(--muted);font-size:25px;line-height:1;cursor:pointer}.public-key-dialog pre{margin:18px 20px;padding:16px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;border:1px solid var(--border);border-radius:6px;background:#f7f9f8;font:12px/1.65 "Cascadia Mono",Consolas,monospace;user-select:all}.public-key-dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding:0 20px 18px}.pagination-toolbar{display:grid;grid-template-columns:minmax(150px,1fr) auto minmax(150px,1fr);align-items:center;gap:12px;margin-top:16px}.pagination{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap}.pagination .button{min-width:36px}.pagination .button.disabled{opacity:.4;cursor:default;pointer-events:none}.pagination .button.current{cursor:default}.pagination-summary{color:var(--muted);font-size:12px}.pagination-ellipsis{color:var(--muted);padding:0 2px}.page-size-form{display:flex;align-items:center;justify-content:flex-end;gap:7px;margin:0}.page-size-form label{display:block;white-space:nowrap}.page-size-form select{width:auto;min-height:36px;padding:6px 28px 6px 9px}.license-search form{display:flex;align-items:center;gap:4px;margin-top:8px}.license-search input[name=search]{width:240px}.filter-bar{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.filter-tag{display:inline-flex;padding:2px 9px;border-radius:4px;background:#edf2f0;color:var(--muted);font-size:11px}.filter-tag:hover{background:#dce3e0;color:var(--text)}.filter-tag.active{background:var(--accent);color:#fff}
.flash.warning{color:#7a5d00;background:#fff8dd;border:1px solid #ead899}
.batch-license-section{margin-top:22px;padding-top:18px;border-top:1px solid var(--border)}.batch-license-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.batch-license-heading h2{margin:0;font-size:16px}.batch-license-heading span{padding:2px 7px;border-radius:4px;background:#e7f5ef;color:#116149;font-size:11px}.batch-license-note{margin:12px 0 0;color:var(--muted);font-size:11px;line-height:1.6}.form-panel small{color:var(--muted);font-size:11px}
.duration-preset{display:flex;gap:6px;flex-wrap:wrap}.duration-preset button{padding:3px 10px;border:1px solid var(--border);border-radius:4px;background:#fff;color:var(--muted);font-size:11px;cursor:pointer}.duration-preset button:hover{background:#f5f7f6}.duration-preset button.active{background:var(--accent);border-color:var(--accent);color:#fff}
.release-downloads{display:flex;flex-direction:column;align-items:flex-start;gap:4px;max-width:220px}.release-downloads a{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.sidebar-link{display:block;padding:9px 12px;border-radius:5px;color:#aebbb6;text-decoration:none}.sidebar-link:hover{background:#26322e;color:#fff}
@media(max-width:1000px){.pagination-toolbar{grid-template-columns:1fr}.pagination-summary{text-align:center}.page-size-form{justify-content:center}}
/* ===== Usage stats dashboard ===== */
.stat-cards{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;margin-bottom:24px}
.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px}
.stat-card span{display:block;color:var(--muted);font-size:12px}
.stat-card strong{display:block;margin-top:8px;font-size:26px;line-height:1;color:var(--text)}
.stat-card em{display:block;margin-top:6px;font-size:11px;color:var(--muted);font-style:normal}
.chart-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px 20px 14px}
.chart{display:flex;align-items:flex-end;gap:10px;height:230px;overflow:hidden}
.chart-col{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;height:100%}
.chart-bars{flex:1;min-height:0;display:flex;align-items:flex-end;justify-content:center;gap:4px;width:100%}
.chart-bar{width:12px;min-height:2px;border-radius:3px 3px 0 0;background:var(--border)}
.bar-devices{background:#16785d}
.bar-reports{background:#3b82f6}
.bar-tasks{background:#f59e0b}
.chart-date{font-size:11px;color:var(--muted)}
.chart-legend{display:flex;gap:18px;justify-content:center;margin-top:12px;flex-wrap:wrap}
.chart-legend span{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.chart-legend .dot{width:10px;height:10px;border-radius:2px;display:inline-block}
.dot-devices{background:#16785d}.dot-reports{background:#3b82f6}.dot-tasks{background:#f59e0b}
.backup-note{font-size:13px;line-height:1.7;color:var(--text)}
.backup-note p{margin:0 0 12px}
.backup-note pre{margin:6px 0;padding:10px 12px;background:#f7f9f8;border:1px solid var(--border);border-radius:6px;overflow:auto;font:12px/1.6 "Cascadia Mono",Consolas,monospace}
.empty-panel{color:var(--muted);font-size:13px;text-align:center;padding:40px 0}
.device-toggle{padding:0 4px;border:0;background:none;color:var(--accent);font-size:13px;cursor:pointer;line-height:1}
.device-row{cursor:pointer}
.device-row:hover td{background:#f7f9f8}
.device-daily-row td{padding:0;background:#f7f9f8;border-top:0}
.device-daily{padding:12px 16px}
.device-daily-loading{color:var(--muted);font-size:12px;padding:6px 0}
.daily-table{width:100%;border-collapse:collapse;font-size:12px}
.daily-table th{color:var(--muted);font-weight:600;text-align:left;padding:6px 10px;border-bottom:1px solid var(--border)}
.daily-table td{padding:6px 10px;border-bottom:1px solid var(--border)}
@media(max-width:1100px){.stat-cards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:600px){.stat-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.chart{height:160px}.chart-bar{width:8px}}
