/* DentistaKo — mobile-first clinic UI. Light (default) and dark via [data-theme]. */
:root{--bg:#f3f7f8;--bg2:#e9f1f2;--card:#fff;--ink:#0f2a30;--mut:#5b7178;--line:#dbe6e8;--pri:#0f9f95;--pri2:#0b7d86;--pri-ink:#fff;--soft:#e3f5f3;--acc:#f59e0b;--ok:#16a34a;--warn:#d97706;--bad:#dc2626;--info:#2563eb;--violet:#7c3aed;
--sh:0 1px 2px rgba(15,42,48,.06),0 6px 20px rgba(15,42,48,.06);--r:14px;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px);color-scheme:light}
[data-theme=dark]{--bg:#0b1517;--bg2:#0f1d20;--card:#132427;--ink:#e3f1f1;--mut:#8ea8ad;--line:#22393d;--pri:#2dd4bf;--pri2:#14b8a6;--pri-ink:#042a26;--soft:#123a37;--sh:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25);color-scheme:dark}
*{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%,#c7f0ea 0,transparent 60%),radial-gradient(900px 500px at 110% 110%,#fde7c2 0,transparent 55%),var(--bg)}
[data-theme=dark] #login{background:radial-gradient(1200px 600px at 10% -10%,#0f3b37 0,transparent 60%),radial-gradient(900px 500px at 110% 110%,#3a2a0c 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:linear-gradient(135deg,#14b8a6,#0b7d86);color:#fff;border:0}.kpi.pri .l{color:#d6fffa}
.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 rgba(15,159,149,.4);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}
/* odontogram */
.odo{overflow-x:auto;padding:4px 0 8px}.odo-wrap{min-width:690px;display:flex;flex-direction:column;align-items:center;gap:4px}
.odo-row{display:flex;gap:3px;align-items:flex-end}.odo-row .gap{width:14px;border-left:2px dashed var(--line);align-self:stretch}.odo-row.dec{opacity:.98}
.tooth{display:flex;flex-direction:column;align-items:center;gap:1px;cursor:pointer;border-radius:8px;padding:2px}.tooth:hover{background:var(--bg2)}.tooth.sel{background:var(--soft);outline:2px solid var(--pri)}
.tooth .n{font-size:.68rem;font-weight:700;color:var(--mut)}.tooth svg{width:38px;height:38px}.odo-row.dec .tooth svg{width:31px;height:31px}
.tooth svg .s{fill:var(--card);stroke:var(--mut);stroke-width:1}[data-theme=dark] .tooth svg .s{fill:#0e1c1f}
.odo-mid{width:100%;max-width:690px;border-top:2px solid var(--line);margin:3px 0}
.odo.narrow{overflow:visible}.odo-half{display:flex;flex-direction:column;align-items:center;gap:3px;margin-bottom:14px}.odo-half+.odo-half{padding-top:12px;border-top:1px dashed var(--line)}.odo.narrow .odo-row .tooth svg{width:33px;height:33px}.odo.narrow .odo-row.dec .tooth svg{width:30px;height:30px}.odo.narrow .tooth{padding:2px 1px}.odo.narrow .odo-row{gap:2px}
.legend{display:flex;flex-wrap:wrap;gap:8px 12px;font-size:.78rem;color:var(--mut)}.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-2px}
.surf-pick{display:flex;justify-content:center;margin:6px 0 10px}.surf-pick svg{width:150px;height:150px}.surf-pick .s{fill:var(--bg2);stroke:var(--mut);stroke-width:.6;cursor:pointer}.surf-pick .s.on{fill:var(--pri)}.surf-pick text{font-size:5px;font-weight:700;fill:var(--ink);pointer-events:none}
/* calendar */
.cal-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}.cal-head .ttl{font-weight:700;font-size:1.05rem;flex:1;min-width:160px}
.daygrid{position:relative;border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.slot{height:44px;border-bottom:1px solid var(--line);display:flex;font-size:.72rem;color:var(--mut)}.slot .h{width:52px;flex:none;padding:3px 6px;border-right:1px solid var(--line)}.slot.off{background:repeating-linear-gradient(45deg,transparent 0 6px,var(--bg2) 6px 12px)}.slot .z{flex:1}
.ev{position:absolute;border-radius:9px;padding:4px 7px;font-size:.78rem;line-height:1.25;overflow:hidden;cursor:pointer;color:#06302c;background:#ccfbf1;border-left:4px solid #0d9488;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.ev .t{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ev.st-arrived{background:#fef3c7;border-color:#d97706;color:#422006}.ev.st-in_chair{background:#ede9fe;border-color:#7c3aed;color:#2e1065}.ev.st-completed{background:#dcfce7;border-color:#16a34a;color:#052e16}.ev.st-cancelled,.ev.st-no_show{background:#f1f5f9;border-color:#94a3b8;color:#64748b;text-decoration:line-through}.ev.ev-al{box-shadow:inset 0 0 0 2px #dc2626}
.ev[draggable=true]{cursor:grab}.drop-hi{background:var(--soft)!important}
.week{display:grid;grid-template-columns:58px repeat(7,minmax(92px,1fr));border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden;min-width:720px}
.week .hd{font-size:.78rem;font-weight:700;text-align:center;padding:6px 2px;border-bottom:1px solid var(--line);border-left:1px solid var(--line)}.week .hd.today{color:var(--pri2);background:var(--soft)}
.week .col{position:relative;border-left:1px solid var(--line)}.week .hcell{height:44px;border-bottom:1px solid var(--line);font-size:.68rem;color:var(--mut);padding:3px 4px;white-space:nowrap}.week .cell{height:44px;border-bottom:1px solid var(--line)}.week .cell.off{background:repeating-linear-gradient(45deg,transparent 0 6px,var(--bg2) 6px 12px)}
.month{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.month .dow{font-size:.72rem;font-weight:700;color:var(--mut);text-align:center;padding:4px}
.month .d{min-height:70px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:5px;cursor:pointer;font-size:.8rem}.month .d.o{opacity:.45}.month .d.today{border-color:var(--pri);box-shadow:0 0 0 1px var(--pri)}.month .d.closed{background:repeating-linear-gradient(45deg,var(--card) 0 6px,var(--bg2) 6px 12px)}
.month .d .dots{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px}.month .d .dots i{width:7px;height:7px;border-radius:50%;background:var(--pri)}.month .d .cnt{font-size:.7rem;font-weight:700;color:var(--pri2)}
/* modal */
#modal{position:fixed;inset:0;z-index:100;display:flex;align-items:flex-end;justify-content:center;background:rgba(5,20,22,.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:#0f2a30;color:#fff;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}
