:root{--font-display:"Fraunces", Georgia, serif;--font-body:"Instrument Sans", "Helvetica Neue", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--paper:#f5f1ea;--paper-2:#efe9df;--surface:#fffdf9;--ink:#1c1a17;--ink-2:#4a463f;--ink-3:#8a847a;--line:#e2dbce;--line-strong:#cbc2b2;--thread:#b5382f;--thread-soft:#f6e4e1;--thread-ink:#7d231c;--moss:#3f6b45;--moss-soft:#e3eddf;--ochre:#a2731c;--ochre-soft:#f6ecd6;--sidebar:#1c1a17;--sidebar-ink:#d9d2c5;--sidebar-muted:#8a847a;--radius:10px;--radius-sm:6px;--shadow:0 1px 2px #1c1a170d, 0 8px 24px -12px #1c1a172e}*{box-sizing:border-box}html{font-size:15px}body{font-family:var(--font-body);color:var(--ink);background:radial-gradient(1200px 600px at 100% -10%, #fbf8f2 0%, transparent 60%), var(--paper);-webkit-font-smoothing:antialiased;margin:0;line-height:1.45}a{color:var(--thread)}code{font-family:var(--font-mono);background:var(--paper-2);border-radius:4px;padding:1px 5px;font-size:.86em}.app-shell{grid-template-columns:236px 1fr;min-height:100vh;display:grid}.sidebar{background:var(--sidebar);height:100vh;color:var(--sidebar-ink);background-image:repeating-linear-gradient(#0000 0 23px,#ffffff06 23px 24px);flex-direction:column;gap:2px;padding:28px 18px 20px;display:flex;position:sticky;top:0}.brand{margin:0 8px 28px}.brand h1{font-family:var(--font-display);letter-spacing:-.01em;color:#fff;margin:0;font-size:26px;font-weight:500;line-height:1}.brand h1 em{color:var(--thread);font-style:italic}.brand small{letter-spacing:.14em;text-transform:uppercase;color:var(--sidebar-muted);margin-top:6px;font-size:11px;display:block}.nav-group{letter-spacing:.14em;text-transform:uppercase;color:var(--sidebar-muted);margin:14px 10px 6px;font-size:10.5px}.sidebar a{border-radius:var(--radius-sm);color:var(--sidebar-ink);align-items:center;gap:10px;padding:9px 10px;font-size:14px;text-decoration:none;transition:background .15s,color .15s;display:flex;position:relative}.sidebar a:hover{color:#fff;background:#ffffff0d}.sidebar a.active{color:#fff;background:#ffffff14}.sidebar a.active:before{content:"";background:var(--thread);border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:-18px}.sidebar .spacer{flex:1}.who{border-top:1px solid #ffffff14;padding:12px 10px;font-size:12.5px}.who strong{color:#fff;font-weight:500;display:block}.who span{color:var(--sidebar-muted);font-family:var(--font-mono);font-size:11.5px}.sidebar button.ghost{width:100%;color:var(--sidebar-ink);background:0 0;border-color:#ffffff24;margin:4px 0 0}.sidebar button.ghost:hover{color:#fff;background:#ffffff0f}main.content{width:100%;max-width:1280px;padding:36px 44px 64px;animation:.35s both rise}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.page-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:28px;padding-bottom:18px;display:flex}.page-head h2{font-family:var(--font-display);letter-spacing:-.015em;margin:0;font-size:34px;font-weight:500;line-height:1.05}.page-head p{color:var(--ink-3);max-width:60ch;margin:6px 0 0;font-size:14px}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:20px;overflow:hidden}.panel-head{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #fff 0%, var(--surface) 100%);justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;display:flex}.panel-head h3{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:18px;font-weight:500}.panel-head .count{font-family:var(--font-mono);color:var(--ink-3);margin-left:8px;font-size:12px}.panel-body{padding:20px}.panel-body.flush{padding:0}.grid-form{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px 16px;display:grid}.grid-form .span-2{grid-column:span 2}label.field{letter-spacing:.02em;color:var(--ink-2);flex-direction:column;gap:5px;font-size:12px;font-weight:500;display:flex}label.check{color:var(--ink-2);cursor:pointer;align-items:center;gap:8px;font-size:13.5px;display:inline-flex}input,select,textarea{font:inherit;border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--ink);background:#fff;padding:8px 10px;font-size:14px;transition:border-color .15s,box-shadow .15s}input::placeholder{color:#b7b0a4}input:focus,select:focus,textarea:focus{border-color:var(--thread);outline:none;box-shadow:0 0 0 3px #b5382f24}input[type=checkbox]{accent-color:var(--thread);width:15px;height:15px}.form-actions{flex-wrap:wrap;grid-column:1/-1;align-items:center;gap:8px;padding-top:6px;display:flex}button{font:inherit;border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;white-space:nowrap;background:#fff;padding:7px 13px;font-size:13.5px;font-weight:500;transition:background .15s,border-color .15s,transform 80ms}button:hover{background:var(--paper-2);border-color:#b9b0a0}button:active{transform:translateY(1px)}button:disabled{opacity:.45;cursor:default;transform:none}button.primary{background:var(--ink);border-color:var(--ink);color:#fff}button.primary:hover{background:#2c2924}button.accent{background:var(--thread);border-color:var(--thread);color:#fff}button.accent:hover{background:var(--thread-ink)}button.ok{color:var(--moss);border-color:#b9cdb8}button.ok:hover{background:var(--moss-soft)}button.danger{color:var(--thread);border-color:#e3bdb8}button.danger:hover{background:var(--thread-soft)}button.small{padding:4px 9px;font-size:12.5px}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row.between{justify-content:space-between}table{border-collapse:collapse;width:100%;font-size:13.5px}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:middle;padding:11px 14px}th{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);background:var(--paper);font-size:11px;font-weight:600}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:#fcfaf6}td .sub{color:var(--ink-3);font-size:12px;display:block}.mono{font-family:var(--font-mono);font-size:12.5px}.muted{color:var(--ink-3)}.badge{border:1px solid var(--line-strong);color:var(--ink-2);background:#fff;border-radius:999px;align-items:center;gap:6px;padding:2px 9px;font-size:12px;font-weight:500;display:inline-flex}.badge:before{content:"";opacity:.7;background:currentColor;border-radius:50%;width:6px;height:6px}.badge.on{color:var(--moss);background:var(--moss-soft);border-color:#c3d6c0}.badge.off{color:var(--ink-3);background:var(--paper-2)}.badge.warn{color:var(--ochre);background:var(--ochre-soft);border-color:#e4d2aa}.badge.bad{color:var(--thread);background:var(--thread-soft);border-color:#e3bdb8}.badge.plain:before{display:none}.tags{flex-wrap:wrap;gap:4px;display:flex}.tags span{background:var(--paper-2);color:var(--ink-2);border-radius:4px;padding:1px 7px;font-size:11.5px}.alert{border-radius:var(--radius-sm);white-space:pre-wrap;border:1px solid;align-items:flex-start;gap:10px;margin-bottom:16px;padding:10px 14px;font-size:13.5px;animation:.25s both rise;display:flex}.alert.error{color:var(--thread-ink);background:var(--thread-soft);border-color:#e3bdb8}.alert.notice{color:#2d5133;background:var(--moss-soft);border-color:#c3d6c0}.alert .close{color:inherit;opacity:.6;background:0 0;border:none;margin-left:auto;padding:0 4px}.providers{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;display:grid}.provider{border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;flex-direction:column;gap:8px;padding:14px 16px;display:flex}.provider .name{font-family:var(--font-display);font-size:17px;font-weight:500}.provider dl{grid-template-columns:auto 1fr;gap:2px 12px;margin:0;font-size:12.5px;display:grid}.provider dt{color:var(--ink-3)}.provider dd{font-family:var(--font-mono);word-break:break-all;margin:0;font-size:12px}details.raw{color:var(--ink-3);margin-top:14px;font-size:12.5px}details.raw summary{cursor:pointer}pre.json{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--ink-2);max-height:320px;margin:8px 0 0;padding:10px 12px;font-size:12px;overflow:auto}.tabs{border:1px solid var(--line);background:var(--paper-2);border-radius:999px;gap:2px;margin-bottom:20px;padding:3px;display:inline-flex}.tabs button{color:var(--ink-2);background:0 0;border:none;border-radius:999px;padding:6px 16px}.tabs button:hover{background:#fff9}.tabs button.active{background:var(--ink);color:#fff}.tabs button .n{font-family:var(--font-mono);opacity:.7;margin-left:6px;font-size:11px}.items-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:16px;display:grid}.item-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;transition:transform .18s,box-shadow .18s;animation:.3s both rise;display:flex;overflow:hidden}.item-card:hover{transform:translateY(-2px);box-shadow:0 2px 4px #1c1a170f,0 16px 32px -14px #1c1a174d}.item-card .thumb{aspect-ratio:4/5;object-fit:cover;background:var(--paper-2);width:100%;display:block}.item-card .thumb.empty{color:var(--ink-3);font-family:var(--font-display);place-items:center;font-style:italic;display:grid}.item-card .body{color:var(--ink-3);flex-direction:column;flex:1;gap:5px;padding:10px 12px 8px;font-size:12px;display:flex}.item-card .title{color:var(--ink);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:14px;font-weight:500;line-height:1.3;display:-webkit-box;overflow:hidden}.item-card .actions{border-top:1px solid var(--line);background:#fff;gap:6px;padding:10px 12px;display:flex}.item-card .actions button{flex:1}.empty{text-align:center;color:var(--ink-3);padding:48px 20px}.empty .glyph{font-family:var(--font-display);color:var(--line-strong);margin-bottom:10px;font-size:40px;line-height:1}.empty strong{font-family:var(--font-display);color:var(--ink-2);margin-bottom:4px;font-size:18px;font-weight:500;display:block}.toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.pager{align-items:center;gap:8px;display:inline-flex}.pager .where{font-family:var(--font-mono);color:var(--ink-3);text-align:center;min-width:70px;font-size:12px}.login-shell{grid-template-columns:1.1fr 1fr;min-height:100vh;display:grid}.login-art{background:var(--sidebar);color:var(--sidebar-ink);flex-direction:column;justify-content:space-between;padding:48px;display:flex;position:relative;overflow:hidden}.login-art:before{content:"";background-image:linear-gradient(#ffffff0b 1px,#0000 1px),linear-gradient(90deg,#ffffff0b 1px,#0000 1px);background-size:28px 28px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(600px 500px at 30% 70%,#000 30%,#0000 100%);mask-image:radial-gradient(600px 500px at 30% 70%,#000 30%,#0000 100%)}.login-art:after{content:"";background:var(--thread);height:1px;position:absolute;top:58%;left:48px;right:-40%;transform:rotate(-7deg);box-shadow:0 0 24px #b5382f99}.login-art .mark{font-family:var(--font-display);color:#fff;font-size:22px;position:relative}.login-art .mark em{color:var(--thread)}.login-art h1{font-family:var(--font-display);letter-spacing:-.02em;color:#fff;max-width:11ch;margin:0;font-size:clamp(36px,4.4vw,58px);font-weight:400;line-height:1.02;position:relative}.login-art h1 em{color:var(--thread);font-style:italic}.login-art p{color:var(--sidebar-muted);max-width:38ch;margin:16px 0 0;font-size:14px;position:relative}.login-art .foot{letter-spacing:.14em;text-transform:uppercase;color:var(--sidebar-muted);font-size:11px;position:relative}.login-form-wrap{place-items:center;padding:40px 24px;display:grid}.login-form{width:100%;max-width:380px;animation:.4s both rise}.login-form h2{font-family:var(--font-display);letter-spacing:-.015em;margin:0 0 6px;font-size:30px;font-weight:500}.login-form p.lead{color:var(--ink-3);margin:0 0 24px;font-size:14px}.login-form form{flex-direction:column;gap:14px;display:flex}.login-form input{padding:11px 12px;font-size:15px}.login-form button.primary{margin-top:6px;padding:11px;font-size:15px}@media (width<=900px){.login-shell{grid-template-columns:1fr}.login-art{min-height:240px;padding:28px}.login-art h1{font-size:32px}.app-shell{grid-template-columns:1fr}.sidebar{flex-flow:wrap;align-items:center;gap:6px;height:auto;padding:14px 16px;position:static}.brand{margin:0 16px 0 0}.nav-group,.sidebar .spacer,.who,.sidebar a.active:before{display:none}main.content{padding:20px 16px 48px}.page-head h2{font-size:26px}}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{border-color:var(--line-strong);color:var(--ink-2);background:#fff;border-radius:999px;padding:4px 12px;font-size:12.5px}.chip.on{background:var(--ink);border-color:var(--ink);color:#fff}.chip.on:hover{background:#2c2924}.dropzone{border:1.5px dashed var(--line-strong);border-radius:var(--radius);text-align:center;cursor:pointer;background:repeating-linear-gradient(135deg,#0000 0 14px,#1c1a1705 14px 28px),#fff;padding:36px 20px;transition:border-color .15s,background .15s}.dropzone:hover,.dropzone.over{border-color:var(--thread);background:#fffaf8}.dropzone strong{font-family:var(--font-display);margin-bottom:4px;font-size:19px;font-weight:500;display:block}.dropzone span{color:var(--ink-3);font-size:13px}.upload-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;display:grid}.upload-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;animation:.25s both rise;display:flex;position:relative;overflow:hidden}.upload-card .thumb{aspect-ratio:4/5;object-fit:cover;background:var(--paper-2);width:100%;display:block}.upload-card.uploading .thumb{opacity:.55}.upload-card .body{flex-direction:column;gap:6px;padding:8px 10px 10px;font-size:12px;display:flex}.upload-card input{padding:5px 8px;font-size:13px}.upload-card .fname{color:var(--ink-3);font-family:var(--font-mono);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.upload-card .state{position:absolute;top:8px;left:8px}.upload-card .remove{background:#ffffffe6;border-radius:50%;width:24px;height:24px;padding:0;line-height:1;position:absolute;top:6px;right:6px}.upload-card .msg{color:var(--thread-ink);font-size:12px;line-height:1.35}.bar{background:var(--line);height:3px;overflow:hidden}.bar>i{background:var(--thread);width:40%;height:100%;animation:1s ease-in-out infinite slide;display:block}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(260%)}}.lib-card{position:relative}.lib-card.selected{outline:2px solid var(--thread);outline-offset:1px}.lib-card .pick{width:22px;height:22px;accent-color:var(--thread);cursor:pointer;filter:drop-shadow(0 1px 2px #0006);margin:0;position:absolute;top:8px;left:8px}.lib-card .status{position:absolute;top:8px;right:8px}.lib-card .thumb{cursor:zoom-in}.bulk-bar{z-index:5;background:var(--ink);color:#fff;border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;padding:10px 14px;animation:.2s both rise;display:flex;position:sticky;top:12px;box-shadow:0 10px 30px -10px #1c1a1780}.bulk-bar .n{font-family:var(--font-display);margin-right:6px;font-size:17px}.bulk-bar button{color:#fff;background:#ffffff14;border-color:#ffffff2e}.bulk-bar button:hover{background:#ffffff29}.bulk-bar button.accent{background:var(--thread);border-color:var(--thread)}.bulk-bar .chips{width:100%;padding:8px 0 2px}.bulk-bar .chip{color:#fff;background:0 0;border-color:#ffffff4d}.bulk-bar .chip.on{color:var(--ink);background:#fff;border-color:#fff}.modal-backdrop{z-index:20;background:#1c1a178c;place-items:center;padding:20px;animation:.15s both fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}to{opacity:1}}.modal{background:var(--surface);border-radius:var(--radius);grid-template-columns:280px 1fr;width:100%;max-width:760px;max-height:90vh;animation:.25s both rise;display:grid;overflow:auto;box-shadow:0 30px 60px -20px #00000080}.modal .preview{background:var(--paper-2);place-items:center;display:grid}.modal .preview img{object-fit:contain;width:100%;height:100%;max-height:90vh}.modal .form{flex-direction:column;gap:14px;padding:22px;display:flex}.modal h3{font-family:var(--font-display);margin:0;font-size:20px;font-weight:500}.modal .meta{color:var(--ink-3);font-size:12px;font-family:var(--font-mono)}.failed-list{margin:6px 0 0;padding-left:18px}@media (width<=700px){.modal{grid-template-columns:1fr}.modal .preview img{max-height:40vh}}
