:root{--text:#172b3a;--muted:#596b7b;--line:#dce3e9;--accent:#087f73;--surface:#f4f6f8;--error:#a72828;--radius:6px;color-scheme:light;font:16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--text);background:#fff}
*{box-sizing:border-box}body{margin:0}header{display:flex;align-items:center;gap:24px;border-bottom:1px solid var(--line);padding:20px max(24px,calc((100vw - 1360px)/2));flex-wrap:wrap}h1{font-size:26px;margin:0;white-space:nowrap}h2{font-size:24px;margin:0 0 6px}h3{font-size:20px;margin:0 0 20px}p{color:var(--muted);margin:6px 0 20px}nav{display:flex;flex:1;gap:12px}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer;border:1px solid var(--line);background:#fff;border-radius:var(--radius);min-height:44px;padding:9px 20px;transition:background .15s}button:hover{background:var(--surface)}button:disabled{opacity:.55;cursor:wait}.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.primary:hover{background:#076a60}nav button{border:0;border-radius:0;border-bottom:3px solid transparent;padding-inline:8px}nav button[aria-current]{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}:focus-visible{outline:3px solid #278cc3;outline-offset:3px}main{max-width:1360px;margin:auto;padding:30px 24px}#login{max-width:500px;margin:30px auto}.toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px}.filter{display:flex;align-items:center;gap:24px;margin:20px 0}.filter label{display:flex;align-items:center;gap:16px}.filter input{max-width:210px}#updated{font-size:14px;color:var(--muted)}label{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}input,textarea,select{min-height:44px;min-width:0;padding:9px 12px;border:1px solid #b8c7d2;border-radius:var(--radius);background:#fff}textarea{resize:vertical}input[readonly]{background:var(--surface)}.table-wrap{border:1px solid var(--line);border-radius:var(--radius);overflow:auto;margin-bottom:28px}table{width:100%;border-collapse:collapse;font-size:15px}th{background:var(--surface);font-weight:600;text-align:left;white-space:nowrap}td,th{padding:16px 18px;border-bottom:1px solid var(--line);vertical-align:top}tr:last-child td{border-bottom:0}td{overflow-wrap:anywhere;min-width:90px;max-width:320px}td button{color:var(--accent);border:0;padding:4px 8px;white-space:nowrap}code{font:13px/1.5 ui-monospace,monospace}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}.wide{grid-column:1/-1}#noteForm,#deviceForm{border:1px solid var(--line);padding:24px;border-radius:var(--radius)}.actions{display:flex;gap:12px;flex-wrap:wrap}.check{flex-direction:row;align-items:center}.check input{min-height:24px;width:24px}#message:not(:empty){padding:12px 16px;background:var(--surface);border-left:3px solid var(--accent);color:var(--text)}#message.error{border-color:var(--error);color:var(--error)}#newKey{display:block;overflow-wrap:anywhere;margin-top:16px}.empty{padding:48px;text-align:center;color:var(--muted)}[hidden]{display:none!important}
@media(max-width:700px){header{gap:12px;padding:16px}h1{font-size:22px;flex:1}nav{order:3;flex-basis:100%;gap:16px}header button{padding:8px 12px}main{padding:24px 16px}.toolbar{align-items:flex-start}.toolbar h2{font-size:22px}.toolbar p{font-size:14px}.filter{align-items:flex-start;flex-direction:column;gap:0}.form-grid{grid-template-columns:1fr}.wide{grid-column:auto}#noteForm,#deviceForm{padding:20px 16px}.actions button{flex:1}td,th{padding:12px}.table-wrap{max-width:100%}#login{margin-top:0}}
@media(prefers-reduced-motion:reduce){button{transition:none}}
button{white-space:nowrap}.toolbar>button{flex-shrink:0}
@media(max-width:700px){.actions button{padding-inline:12px}}
.note-link{min-width:250px;max-width:340px}.note-link-content{display:flex;align-items:baseline;gap:10px}.note-link-content small{flex-shrink:0;white-space:nowrap;color:var(--muted)}.note-link-content a{min-width:0;color:var(--accent);overflow-wrap:anywhere;text-underline-offset:3px}
.editing-row{background:#f3faf8}.editing-row td{min-width:110px}.editing-row input:not([type=checkbox]),.editing-row textarea,.editing-row select{width:100%}.editing-row textarea{min-width:180px}.editing-row .inline-link{min-width:250px}.inline-link select{margin-top:8px}.editing-row .inline-actions{min-width:120px}.inline-actions button{display:block;width:100%;border:1px solid var(--line);margin-bottom:8px}.inline-actions .primary{color:#fff;border-color:var(--accent)}.inline-error{font-size:14px;color:var(--error);margin:8px 0 0}.inline-error:empty{display:none}
.pagination{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:-10px 0 28px}.pagination label,.page-jump{display:flex;flex-direction:row;align-items:center;gap:8px;margin:0}.page-summary{font-size:14px;color:var(--muted)}.page-links{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.pagination button{border:1px solid var(--line);border-radius:var(--radius);min-width:44px;padding:8px 12px}.pagination button[aria-current]{background:var(--accent);color:#fff;opacity:1;border-color:var(--accent)}.pagination button:disabled{cursor:default}.page-jump input{width:80px}.pagination select{padding-inline:10px}.page-links span{padding:0 4px}
@media(max-width:700px){.pagination{gap:12px}.page-links{flex-basis:100%;gap:4px}.pagination button{padding-inline:9px}.page-summary{flex-basis:100%}}
.device-offline{background:#f6f7f9}.device-offline.editing-row{background:#f0f3f5}.presence{display:inline-flex;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.presence::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.presence.online{color:#087f73}.presence.offline{color:#65717e}.note-device{white-space:nowrap}.note-device .presence{margin-left:8px}
.sort-header{display:inline-flex;align-items:center;gap:8px;border:0;background:transparent;padding:6px 0;font-weight:inherit;text-align:left}.sort-icon{color:#748391;font-weight:400}th[aria-sort=ascending] .sort-header,th[aria-sort=descending] .sort-header,th[aria-sort=ascending] .sort-icon,th[aria-sort=descending] .sort-icon{color:var(--accent)}
.signed-out{background:var(--surface);min-height:100vh}.signed-out main{max-width:480px;padding:72px 20px 32px}.signed-out #login{margin:0;padding:28px 24px;background:#fff;border:1px solid var(--line);border-radius:var(--radius)}#login .login-brand{color:var(--accent);font-weight:600;margin-bottom:20px}#login h1{font-size:26px;margin-bottom:10px}#login label{margin-top:24px}#login button{width:100%}.signed-out #message{margin-top:16px}@media(max-width:700px){.signed-out main{padding-top:40px}.signed-out #login{padding:24px 20px}}
.filter-panel{margin:24px 0;border:1px solid var(--line);border-radius:8px;background:#fafbfc;padding:20px}.filter-panel fieldset{border:0;margin:0;padding:0;min-width:0}.filter-fields{display:flex;flex-wrap:wrap;gap:16px}.filter-fields label{flex:1 1 135px;min-width:0;margin:0;font-size:14px;font-weight:600}.filter-fields .search-field{flex:2 1 250px}.filter-panel input,.filter-panel select{width:100%;font-size:15px;font-weight:400}.filter-bottom{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;align-items:flex-end;margin-top:18px}.date-range{display:flex;align-items:flex-end;flex-wrap:wrap;gap:10px}.date-range>span:first-child{flex-basis:100%;font-size:13px;color:var(--muted)}.date-range label{margin:0;gap:4px;font-size:12px;color:var(--muted)}.date-range input{width:160px}.date-divider{padding-bottom:10px;color:var(--muted)}.filter-meta{border-top:1px solid var(--line);padding-top:14px;margin-top:18px;display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;font-size:13px;color:var(--muted)}[data-filter-summary]{display:flex;flex-wrap:wrap;gap:8px}.filter-chip{background:#e8f3f1;color:#126359;padding:3px 8px;border-radius:4px;overflow-wrap:anywhere;max-width:100%}
.results{position:relative}.results .table-wrap{min-height:180px}.list-status{position:absolute;right:0;top:-23px;font-size:12px;margin:0;color:var(--muted)}.loading-indicator{display:none;position:absolute;z-index:1;top:0;left:0;right:0;height:2px;overflow:hidden;background:#dcedea}.is-loading .loading-indicator{display:block}.loading-indicator::after{content:"";display:block;width:35%;height:100%;background:var(--accent);animation:loading-progress 1s ease-in-out infinite}@keyframes loading-progress{from{transform:translateX(-110%)}to{transform:translateX(390%)}}
.device-manager{border:1px solid var(--line);border-radius:8px;padding:24px;margin-top:28px}.device-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap;margin-bottom:20px}.device-heading h3{margin-bottom:6px}.device-heading p{font-size:14px;margin:0}.mode-switch{display:flex;border:1px solid var(--line);border-radius:6px;padding:3px;background:var(--surface);gap:4px}.mode-switch button{border:0;background:transparent;padding:8px 16px}.mode-switch button[aria-pressed=true]{background:#fff;color:var(--accent);box-shadow:0 1px 3px #172b3a16}.device-manager #deviceForm{border:0;padding:0}.field-hint{font-size:13px;font-weight:400;color:var(--muted)}.batch-fields{display:flex;gap:16px;align-items:flex-end;margin-bottom:12px}.batch-fields label{margin:0;max-width:180px}.device-manager output{display:block;margin-top:16px;overflow-wrap:anywhere}.device-manager output:empty{display:none}.credential-cell{min-width:220px;max-width:280px}.credential-cell code{display:block;overflow-wrap:anywhere;user-select:all;background:#f0f4f6;border:1px solid #e5ebef;border-radius:4px;padding:6px 8px}.credential-cell button{font-size:13px;min-height:36px;padding:4px 8px}
@media(max-width:700px){.filter-panel{padding:16px;margin:20px 0}.filter-fields{gap:12px}.filter-fields .search-field{flex-basis:100%}.filter-fields label{flex-basis:calc(50% - 6px)}.filter-bottom{align-items:stretch}.date-range{width:100%;gap:8px}.date-range label{flex:1;min-width:0}.date-range input{width:100%;min-width:0}.filter-bottom .actions{width:100%}.device-manager{padding:20px 16px}.mode-switch{width:100%}.mode-switch button{flex:1;padding-inline:8px}.batch-fields{align-items:stretch;flex-direction:column}.batch-fields label{max-width:none}.credential-cell{min-width:210px}}
@media(prefers-reduced-motion:reduce){.results .table-wrap{transition:none}.results-enter .table-wrap,.loading-indicator::after{animation:none}}
button{transition:background-color .14s ease,color .14s ease,border-color .14s ease,box-shadow .14s ease,transform .12s ease}button:disabled{cursor:default}button:not(:disabled):active{transform:translateY(1px)}input,textarea,select{transition:border-color .14s ease,box-shadow .14s ease}header nav button{transition:color .16s ease,border-color .16s ease,background-color .16s ease}.row-actions{white-space:nowrap}.danger-text{color:var(--error)}.danger-text:hover{background:#fff0ef}.danger-button{background:var(--error);color:#fff;border-color:var(--error)}.danger-button:hover{background:#902222}
.admin-dialog{color:var(--text);background:#fff;border:1px solid var(--line);border-radius:10px;padding:28px;width:min(680px,calc(100% - 32px));max-height:calc(100dvh - 40px);overflow:auto;box-shadow:0 16px 60px #172b3a30}.admin-dialog::backdrop{background:#14243355}.admin-dialog[open]{animation:dialog-in .17s ease-out}.admin-dialog[open]::backdrop{animation:backdrop-in .17s ease-out}.admin-dialog #noteForm{border:0;padding:0}.dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.dialog-heading h2{margin:0}.dialog-heading button{border:0;color:var(--muted);padding:8px 12px}.dialog-actions{justify-content:flex-end;margin-top:24px}.confirm-dialog{max-width:460px}.confirm-dialog h2{font-size:22px;margin-bottom:16px}.confirm-dialog p{overflow-wrap:anywhere}.admin-dialog .inline-error:empty{display:none}body:has(dialog[open]){overflow:hidden;scrollbar-gutter:stable}@keyframes dialog-in{from{opacity:0;transform:translateY(6px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes backdrop-in{from{background:#14243300}to{background:#14243355}}
@media(max-width:700px){.admin-dialog{padding:22px 18px;width:calc(100% - 24px);max-height:calc(100dvh - 24px)}.dialog-heading{margin-bottom:20px}.dialog-heading h2{font-size:22px}.dialog-actions button{flex:1;padding-inline:12px}.confirm-dialog .dialog-actions{flex-wrap:nowrap}}
@media(prefers-reduced-motion:reduce){button,input,textarea,select,header nav button{transition:none}.admin-dialog[open],.admin-dialog[open]::backdrop{animation:none}}
.bulk-actions{margin:0 0 30px;border:1px solid var(--line);border-radius:8px;padding:12px 16px;background:#fafbfc}.bulk-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.bulk-toolbar>.actions{margin-left:auto}.bulk-hint{color:var(--muted);font-size:13px}.bulk-result:empty{display:none}.bulk-result{margin-top:12px;border-top:1px solid var(--line);padding-top:12px;font-size:14px;overflow-wrap:anywhere}.bulk-result summary{cursor:pointer;min-height:44px;display:list-item;padding-block:10px}.bulk-result ul{margin:8px 0;padding-left:22px;max-height:220px;overflow:auto}.bulk-result details[open] ul{animation:dialog-in .16s ease-out}.selection-cell{width:56px;min-width:56px!important;padding:4px!important}.selection-target{display:flex;align-items:center;justify-content:center;width:44px;height:44px;margin:0;cursor:pointer}.selection-target input[type=checkbox]{width:18px;min-width:18px;height:18px;min-height:18px;margin:0;accent-color:var(--accent);cursor:pointer}tr.is-selected{background:#eaf5f2}.selection-target:has(input:disabled){cursor:default}.selection-target input:disabled{cursor:default}@media(max-width:700px){.bulk-actions{padding:12px}.bulk-toolbar>.actions{margin-left:0;width:100%}.bulk-hint{margin-left:auto}.selection-cell{position:sticky;left:0;background:#fff;z-index:1}.is-selected .selection-cell{background:#eaf5f2}.device-offline .selection-cell{background:#f6f7f9}th.selection-cell{background:var(--surface)}}@media(prefers-reduced-motion:reduce){.bulk-result details[open] ul{animation:none}}
.credential-cell .device-qr{margin-left:8px}.credential-dialog{max-width:460px}.credential-qr{display:block;width:300px;max-width:100%;height:auto;margin:16px auto;background:#fff}.qr-details{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;font-size:14px}.qr-details dt{color:var(--muted)}.qr-details dd{margin:0;overflow-wrap:anywhere}.qr-hint{font-size:13px;margin-bottom:0}
.online-summary{align-self:center;white-space:nowrap;font-size:14px;color:var(--accent);font-variant-numeric:tabular-nums;padding:4px 10px;border-radius:4px;background:#edf6f4}.online-summary.unavailable{color:var(--muted);background:var(--surface)}
@media(max-width:1000px){header nav{flex-wrap:wrap}.online-summary{margin-block:4px}}
.device-remark{min-width:200px;max-width:300px}.device-remark .edit-remark{white-space:pre-wrap;text-align:left;overflow-wrap:anywhere;max-width:100%}.device-remark textarea{width:100%;min-width:170px}.device-remark .inline-actions{display:flex;gap:8px;margin-top:8px}.device-remark .inline-error:empty{display:none}
.device-notes{min-width:300px}.device-note{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;border-bottom:1px solid var(--line);padding:6px 0}.device-note-title{grid-column:1;white-space:pre-wrap}.device-note a.device-note-title{color:var(--accent);text-underline-offset:3px;min-height:44px;display:flex;align-items:center}.device-note small{grid-column:1;color:var(--muted)}.device-note-actions{grid-column:2;grid-row:1/3;align-self:center;display:flex;gap:8px}.device-notes>.add-device-note{margin-top:8px}

.heartbeat-panel{padding:20px 24px;margin:0 0 20px;border:1px solid #d8e2e9;border-radius:8px;background:#fff}.heartbeat-panel h3{margin:0 0 16px;font-size:18px}.heartbeat-panel fieldset{border:0;padding:0;margin:0;display:grid;gap:16px;grid-template-columns:1fr}.heartbeat-panel label{margin:0}.heartbeat-panel button{min-height:44px;align-self:start}.heartbeat-panel p{margin:12px 0 0}.heartbeat-panel output{display:block;margin-top:10px;font-size:14px;overflow-wrap:anywhere}.heartbeat-panel output:empty{display:none}@media(min-width:700px){.heartbeat-panel fieldset{grid-template-columns:minmax(160px,240px) minmax(160px,240px) auto;align-items:start}.heartbeat-panel button{margin-top:27px;justify-self:start}}
