*{box-sizing:border-box}html,body{margin:0;height:100%}
body{font:15px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans",Arial,sans-serif;background:var(--bg);color:var(--ink);-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%}
a{color:var(--pri2)}[data-theme=dark] a{color:var(--pri)}
h1,h2,h3{margin:0 0 .5em;line-height:1.2}h2{font-size:1.25rem}h3{font-size:1.02rem}
.mut{color:var(--mut)}.small{font-size:.84rem}.tiny{font-size:.75rem}.b{font-weight:600}.r{text-align:right}.nowrap{white-space:nowrap}
.hidden,[hidden]{display:none!important}
/* boot / login */
#boot{position:fixed;inset:0;display:grid;place-items:center;background:var(--bg)}#boot img{width:84px;animation:pulse 1.2s infinite alternate}@keyframes pulse{to{transform:scale(1.08);opacity:.7}}
#login{min-height:100%;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 600px at 10% -10%,var(--glow1) 0,transparent 60%),radial-gradient(900px 500px at 110% 110%,var(--glow2) 0,transparent 55%),var(--bg)}
.login-card{width:100%;max-width:380px;background:var(--card);border-radius:22px;box-shadow:var(--sh);padding:28px 24px;border:1px solid var(--line)}
.login-card .wm{width:230px;max-width:80%;display:block;margin:4px auto 6px}.login-card p.sub{text-align:center;margin:0 0 18px}
/* layout */
#app{min-height:100%;display:flex}
#side{display:none}
#main{flex:1;min-width:0;padding-bottom:calc(74px + var(--safe-b))}
.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;padding:calc(10px + var(--safe-t)) 14px 10px;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.topbar .ttl{font-weight:700;font-size:1.08rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar .logo{width:30px;height:30px;border-radius:8px}
.page{padding:14px;max-width:1180px;margin:0 auto}
#tabs{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;background:var(--card);border-top:1px solid var(--line);padding-bottom:var(--safe-b);box-shadow:0 -4px 18px rgba(0,0,0,.05)}
#tabs a{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 2px 7px;font-size:.7rem;color:var(--mut);text-decoration:none;font-weight:600}
#tabs a svg,#side a svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#tabs a.on{color:var(--pri2)}[data-theme=dark] #tabs a.on{color:var(--pri)}
@media(min-width:900px){
 #side{display:flex;flex-direction:column;width:232px;flex:none;position:sticky;top:0;height:100vh;background:var(--card);border-right:1px solid var(--line);padding:16px 12px;gap:2px;overflow:auto}
 #side .wm{width:170px;margin:4px 8px 16px}
 #side a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;color:var(--ink);text-decoration:none;font-weight:500}
 #side a:hover{background:var(--bg2)}#side a.on{background:var(--soft);color:var(--pri2);font-weight:650}[data-theme=dark] #side a.on{color:var(--pri)}
 #side .grow{flex:1}#tabs{display:none}#main{padding-bottom:20px}.topbar .logo,.topbar .menuonly{display:none}.page{padding:22px}
}
/* cards & grid */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:14px}
.card>h3:first-child{display:flex;align-items:center;gap:8px}
.grid{display:grid;gap:12px}.grid>*{min-width:0}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(min-width:700px){.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.md2{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1100px){.lg3{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;box-shadow:var(--sh)}
.kpi .v{font-size:1.35rem;font-weight:750;letter-spacing:-.01em}.kpi .l{font-size:.78rem;color:var(--mut);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.kpi.pri{background:var(--grad);color:#fff;border:0}.kpi.pri .l{color:rgba(255,255,255,.82)}
.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.row.sp{justify-content:space-between}.grow{flex:1}
/* buttons */
.btn{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--ink);font:inherit;font-weight:600;padding:9px 14px;border-radius:11px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;text-decoration:none;min-height:40px;white-space:nowrap}
.btn:hover{border-color:var(--pri)}.btn:active{transform:translateY(1px)}
.btn.pri{background:var(--pri);border-color:var(--pri);color:var(--pri-ink)}.btn.pri:hover{background:var(--pri2)}
.btn.danger{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 35%,var(--line))}.btn.ghost{border-color:transparent;background:transparent}
.btn.sm{padding:5px 10px;min-height:32px;font-size:.85rem;border-radius:9px}.btn.wide{width:100%;justify-content:center}
.ib{appearance:none;border:0;background:transparent;color:var(--ink);width:40px;height:40px;border-radius:10px;display:grid;place-items:center;cursor:pointer;font-size:1.1rem}.ib:hover{background:var(--bg2)}
.ib svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.fab{position:fixed;right:18px;bottom:calc(86px + var(--safe-b));z-index:25;width:56px;height:56px;border-radius:18px;border:0;background:var(--pri);color:var(--pri-ink);font-size:28px;box-shadow:0 8px 24px color-mix(in srgb,var(--pri) 40%,transparent);cursor:pointer}
@media(min-width:900px){.fab{bottom:28px;right:28px}}
/* forms */
label.f{display:block;font-size:.8rem;font-weight:600;color:var(--mut);margin-bottom:10px}
label.f>input,label.f>select,label.f>textarea,.inp{display:block;width:100%;margin-top:4px;font:inherit;font-size:16px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:9px 11px;min-height:42px}
label.f>textarea{min-height:76px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid color-mix(in srgb,var(--pri) 55%,transparent);outline-offset:0;border-color:var(--pri)}
label.chk{display:flex;align-items:flex-start;gap:8px;font-size:.92rem;margin:6px 0;cursor:pointer}label.chk input{width:18px;height:18px;margin-top:2px;accent-color:var(--pri)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:99px;font-size:.75rem;font-weight:650;background:var(--bg2);color:var(--mut);border:1px solid var(--line);white-space:nowrap}
.chip.ok{background:#dcfce7;color:#166534;border-color:#bbf7d0}.chip.warn{background:#fef3c7;color:#92400e;border-color:#fde68a}.chip.bad{background:#fee2e2;color:#991b1b;border-color:#fecaca}.chip.info{background:#dbeafe;color:#1e40af;border-color:#bfdbfe}.chip.pri{background:var(--soft);color:var(--pri2);border-color:transparent}.chip.vio{background:#ede9fe;color:#5b21b6;border-color:#ddd6fe}
[data-theme=dark] .chip.ok{background:#11331f;color:#86efac;border-color:#14532d}[data-theme=dark] .chip.warn{background:#3a2a0b;color:#fcd34d;border-color:#78350f}[data-theme=dark] .chip.bad{background:#3b1212;color:#fca5a5;border-color:#7f1d1d}[data-theme=dark] .chip.info{background:#0f2147;color:#93c5fd;border-color:#1e3a8a}[data-theme=dark] .chip.vio{background:#2a1b4d;color:#c4b5fd;border-color:#4c1d95}[data-theme=dark] .chip.pri{color:var(--pri)}
.seg{display:inline-flex;background:var(--bg2);border-radius:11px;padding:3px;gap:2px;border:1px solid var(--line)}.seg button{border:0;background:transparent;font:inherit;font-weight:600;font-size:.85rem;color:var(--mut);padding:6px 12px;border-radius:8px;cursor:pointer}.seg button.on{background:var(--card);color:var(--ink);box-shadow:var(--sh)}
.search{position:relative}.search input{padding-left:36px}.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:18px;height:18px;stroke:var(--mut);fill:none;stroke-width:2}
/* lists & tables */
.list{display:flex;flex-direction:column}.li{display:flex;align-items:center;gap:12px;padding:11px 4px;border-bottom:1px solid var(--line);cursor:pointer;color:inherit;text-decoration:none}.li:last-child{border-bottom:0}.li:hover{background:var(--bg2)}
.av{width:40px;height:40px;border-radius:12px;flex:none;display:grid;place-items:center;font-weight:700;color:#fff;font-size:.9rem}
.li .main{flex:1;min-width:0}.li .t{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.li .s{font-size:.82rem;color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl{width:100%;border-collapse:collapse;font-size:.9rem}.tbl th{text-align:left;font-size:.74rem;text-transform:uppercase;letter-spacing:.04em;color:var(--mut);font-weight:700;padding:8px 8px;border-bottom:1px solid var(--line)}.tbl td{padding:9px 8px;border-bottom:1px solid var(--line);vertical-align:top}.tbl tr.void td{text-decoration:line-through;color:var(--mut)}.tbl .num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.scrollx{overflow-x:auto;-webkit-overflow-scrolling:touch}
.empty{padding:26px 10px;text-align:center;color:var(--mut)}
.alert{display:flex;gap:10px;align-items:flex-start;border-radius:12px;padding:10px 12px;margin-bottom:12px;font-size:.9rem;border:1px solid}.alert.bad{background:#fef2f2;border-color:#fecaca;color:#991b1b}.alert.warn{background:#fffbeb;border-color:#fde68a;color:#92400e}.alert.info{background:#eff6ff;border-color:#bfdbfe;color:#1e40af}
[data-theme=dark] .alert.bad{background:#2a1010;border-color:#7f1d1d;color:#fecaca}[data-theme=dark] .alert.warn{background:#2a1f08;border-color:#78350f;color:#fde68a}[data-theme=dark] .alert.info{background:#0d1a36;border-color:#1e3a8a;color:#bfdbfe}
/* patient header & tabs */
.phead{display:flex;gap:14px;align-items:center}.phead .av{width:56px;height:56px;border-radius:16px;font-size:1.2rem}.phead h2{margin:0}
.ptabs{display:flex;gap:4px;overflow-x:auto;padding:2px;margin:12px -2px 12px;scrollbar-width:none}.ptabs::-webkit-scrollbar{display:none}
.ptabs a{flex:none;padding:8px 13px;border-radius:99px;font-weight:600;font-size:.87rem;color:var(--mut);text-decoration:none;background:var(--card);border:1px solid var(--line)}.ptabs a.on{background:var(--pri);color:var(--pri-ink);border-color:var(--pri)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:.92rem}.kv dt{color:var(--mut)}.kv dd{margin:0;font-weight:500;overflow-wrap:anywhere}
/* modal */
#modal{position:fixed;inset:0;z-index:100;display:flex;align-items:flex-end;justify-content:center;background:rgba(10,12,30,.45);backdrop-filter:blur(2px)}
#modal .sheet{background:var(--card);width:100%;max-width:640px;max-height:92vh;border-radius:20px 20px 0 0;display:flex;flex-direction:column;animation:up .2s ease-out;padding-bottom:var(--safe-b)}
#modal.wide .sheet{max-width:900px}
@keyframes up{from{transform:translateY(30px);opacity:0}}
#modal .mh{display:flex;align-items:center;gap:8px;padding:14px 16px 10px;border-bottom:1px solid var(--line)}#modal .mh h3{margin:0;flex:1;font-size:1.05rem}
#modal .mb{padding:14px 16px;overflow:auto;flex:1}#modal .mf{display:flex;gap:8px;justify-content:flex-end;padding:10px 16px 14px;border-top:1px solid var(--line);flex-wrap:wrap}
@media(min-width:700px){#modal{align-items:center}#modal .sheet{border-radius:20px;max-height:88vh}}
#toast{position:fixed;left:50%;bottom:calc(90px + var(--safe-b));transform:translateX(-50%);z-index:200;background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:12px;font-size:.9rem;box-shadow:var(--sh);max-width:90vw;text-align:center}
.sig{border:1.5px dashed var(--mut);border-radius:12px;background:#fff;touch-action:none;width:100%;height:180px;display:block}
.thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px}.thumb{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--bg2);cursor:pointer}.thumb .im{aspect-ratio:4/3;display:grid;place-items:center;background:#0b1517 center/cover no-repeat;color:#fff;font-weight:700}.thumb .c{padding:6px 8px;font-size:.78rem}
.form-body{white-space:pre-wrap;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px;font-size:.92rem;max-height:280px;overflow:auto}
.check-step{display:flex;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}.check-step:last-child{border-bottom:0}.check-step .dot{width:22px;height:22px;border-radius:50%;border:2px solid var(--line);display:grid;place-items:center;font-size:.75rem;flex:none}.check-step.done .dot{background:var(--ok);border-color:var(--ok);color:#fff}
.bar{height:8px;border-radius:99px;background:var(--bg2);overflow:hidden}.bar i{display:block;height:100%;background:var(--pri);border-radius:99px}
.hbar{display:flex;align-items:center;gap:8px;font-size:.85rem;margin:6px 0}.hbar .lb{width:42%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hbar .bar{flex:1}.hbar .vv{width:90px;text-align:right;font-variant-numeric:tabular-nums}
.sample-tag{font-size:.65rem;font-weight:800;letter-spacing:.05em;background:var(--acc);color:#fff;border-radius:6px;padding:1px 6px;vertical-align:2px}
.more-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}@media(min-width:700px){.more-grid{grid-template-columns:repeat(4,1fr)}}
.more-grid a{display:flex;flex-direction:column;gap:8px;padding:16px;border-radius:var(--r);background:var(--card);border:1px solid var(--line);text-decoration:none;color:var(--ink);font-weight:650;box-shadow:var(--sh)}.more-grid a svg{width:28px;height:28px;stroke:var(--pri2);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.more-grid a span{font-weight:400;font-size:.8rem;color:var(--mut)}

.xrow{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) auto;gap:6px;align-items:center;margin-bottom:8px}.xrow select{grid-column:1/-1}
@media(min-width:700px){.xrow{grid-template-columns:minmax(0,2fr) minmax(0,.7fr) minmax(0,.7fr) minmax(0,1fr) auto}.xrow select{grid-column:auto}}
.k3{grid-template-columns:repeat(3,minmax(0,1fr))}@media(max-width:600px){.k3 .kpi{padding:10px}.k3 .kpi .v{font-size:1rem}.k3 .kpi .l{font-size:.66rem}}

.pwwrap{position:relative;display:block}.pwwrap>input{display:block;width:100%;margin-top:4px;font:inherit;font-size:16px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:9px 64px 9px 11px;min-height:42px}.pweye{position:absolute;right:4px;top:50%;transform:translateY(-50%);margin-top:2px;border:0;background:transparent;color:var(--pri2);font:inherit;font-size:.8rem;font-weight:700;padding:8px 10px;cursor:pointer}[data-theme=dark] .pweye{color:var(--pri)}.btn:disabled{opacity:.55;cursor:not-allowed}

/* shared additions */
.sep{height:1px;background:var(--line);margin:8px 6px}
.demo-hint{text-align:center;margin:10px 0 0;padding:8px 10px;border-radius:10px;background:var(--soft);color:var(--pri2)}
.swatches{display:flex;flex-wrap:wrap;gap:8px}.sw{display:flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:12px;padding:7px 12px 7px 8px;font:inherit;font-weight:600;font-size:.85rem;cursor:pointer}.sw i{width:22px;height:22px;border-radius:7px;display:block}.sw.on{outline:2px solid var(--pri);border-color:var(--pri)}
.chartbox{width:100%;overflow:hidden}.chartbox .cx{font-size:9px;fill:var(--mut)}.chartbox .cl{stroke:var(--line)}
.legend{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:.78rem;color:var(--mut);margin-top:4px}.legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.hbar .dot,.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:0}
.donut .dt{fill:none;stroke:var(--bg2);stroke-width:11}.donut .dv{fill:none;stroke:var(--pri);stroke-width:11;stroke-linecap:round}.donut .dn{font-size:19px;font-weight:800;fill:var(--ink)}.donut .dl{font-size:9px;fill:var(--mut)}
.pinin{letter-spacing:.5em;text-align:center;font-size:1.4rem!important}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}.toolbar .search{flex:1;min-width:180px}.toolbar .inp{margin:0}
.pill{display:inline-flex;align-items:center;gap:4px;font-size:.72rem;font-weight:700;padding:2px 8px;border-radius:99px;background:var(--bg2);color:var(--mut)}
.tbl tr.click{cursor:pointer}.tbl tr.click:hover td{background:var(--bg2)}
.month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}.month .dow{font-size:.72rem;font-weight:700;color:var(--mut);text-align:center;padding:4px}
.month .d{min-height:84px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:5px;cursor:pointer;font-size:.78rem;overflow:hidden}.month .d.o{opacity:.45}.month .d.today{border-color:var(--pri);box-shadow:0 0 0 1px var(--pri)}.month .d.sel{background:var(--soft)}
.month .d .dn{font-weight:700;font-size:.8rem}.month .d .ev{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.7rem;border-radius:5px;padding:1px 5px;margin-top:2px;background:var(--soft);color:var(--pri2)}
@media(max-width:600px){.month .d{min-height:56px;padding:3px}.month .d .ev{font-size:0;height:6px;padding:0;margin-top:3px}}
