
:root{--paper:#F4F6F8;--card:#FFFFFF;--ink:#14212B;--ink2:#3A4955;--muted:#6B7883;--rule:#D6DEE5;--rule2:#E9EEF2;--acc:#0F5F8C;--acc-soft:#E2EEF6;--pos:#1C7A45;--pos-soft:#DFF1E5;--warn:#9A6212;--warn-soft:#FBEFD6;--risk:#A32B3B;--risk-soft:#F9E2E5;--hi:#FFF7D6;
--body:"IBM Plex Sans",-apple-system,"Segoe UI",Helvetica,Arial,sans-serif;--mono:"IBM Plex Mono",Menlo,Consolas,monospace}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--paper:#0E161C;--card:#162229;--ink:#E9EFF3;--ink2:#C3CDD5;--muted:#8A99A5;--rule:#28363F;--rule2:#1E2B33;--acc:#6FB8E6;--acc-soft:#13303F;--pos:#66CB8E;--pos-soft:#153222;--warn:#E0A94A;--warn-soft:#35290F;--risk:#F08A9B;--risk-soft:#3A1A21;--hi:#3A3110}}
:root[data-theme="dark"]{--paper:#0E161C;--card:#162229;--ink:#E9EFF3;--ink2:#C3CDD5;--muted:#8A99A5;--rule:#28363F;--rule2:#1E2B33;--acc:#6FB8E6;--acc-soft:#13303F;--pos:#66CB8E;--pos-soft:#153222;--warn:#E0A94A;--warn-soft:#35290F;--risk:#F08A9B;--risk-soft:#3A1A21;--hi:#3A3110}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.45}
.wrap{max-width:1040px;margin:0 auto;padding-block:16px 80px;padding-inline:16px}
button{font-family:var(--body)} input,select,textarea{font-family:var(--body);font-size:.95rem;color:var(--ink);background:var(--card);border:1px solid var(--rule);padding:8px 9px;width:100%;border-radius:0}
input:focus,select:focus,textarea:focus,button:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
textarea{min-height:70px;resize:vertical}
h1{font-size:1.3rem;margin:0;font-weight:700} h2{font-size:1.05rem;margin:0 0 8px;font-weight:700} h3{font-size:.8rem;margin:0 0 6px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:700}
.bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding-bottom:10px;border-bottom:3px solid var(--ink);margin-bottom:14px}
.bar .l{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.eyebrow{font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:var(--acc);font-weight:700}
.status{font-size:.75rem;color:var(--muted);font-family:var(--mono)}
.btn{font-weight:600;font-size:.88rem;padding:8px 14px;border:1px solid var(--acc);background:var(--acc);color:#fff;cursor:pointer}
.btn.ghost{background:transparent;color:var(--acc)} .btn.sm{padding:5px 10px;font-size:.78rem} .btn.danger{border-color:var(--risk);color:var(--risk);background:transparent} .btn.pos{background:var(--pos);border-color:var(--pos);color:#fff}
.who{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--muted)} .who select{width:auto;padding:4px 6px;font-size:.8rem}
/* home */
.today{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;margin-bottom:16px}
.panel{background:var(--card);border:1px solid var(--rule);padding:12px 14px}
.panel.risk{border-top:4px solid var(--risk)} .panel.warn{border-top:4px solid var(--warn)} .panel.acc{border-top:4px solid var(--acc)}
.panel ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px} .panel li{font-size:.88rem;display:flex;gap:8px;align-items:flex-start;border-bottom:1px solid var(--rule2);padding-bottom:5px} .panel li:last-child{border:0;padding:0}
.panel li a{color:var(--acc);font-weight:600;cursor:pointer;text-decoration:none} .panel .none{color:var(--muted);font-size:.85rem}
.tbl{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--rule);font-size:.88rem}
.tbl th{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);text-align:left;padding:8px 10px;border-bottom:2px solid var(--rule);background:var(--paper)}
.tbl td{padding:10px;border-bottom:1px solid var(--rule2);vertical-align:top} .tbl tr{cursor:pointer} .tbl tr:hover td{background:var(--acc-soft)}
.tbl td.n{font-weight:700} .tbl td .sub{display:block;font-size:.76rem;color:var(--muted);font-weight:400}
.tblwrap{overflow-x:auto;border:0}
.dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle} .d-pos{background:var(--pos)} .d-warn{background:var(--warn)} .d-risk{background:var(--risk)} .d-mute{background:var(--rule)}
.chip{display:inline-block;padding:2px 8px;font-size:.68rem;font-weight:700;letter-spacing:.03em;white-space:nowrap;border-radius:2px} .c-pos{background:var(--pos-soft);color:var(--pos)} .c-warn{background:var(--warn-soft);color:var(--warn)} .c-risk{background:var(--risk-soft);color:var(--risk)} .c-mute{background:var(--rule2);color:var(--muted)} .c-acc{background:var(--acc-soft);color:var(--acc)}
.stale td.n::after{content:" · untouched "attr(data-age);color:var(--risk);font-weight:600;font-size:.74rem}
/* detail */
.head{background:var(--card);border:1px solid var(--rule);padding:14px 16px;display:grid;grid-template-columns:1fr auto;gap:10px 16px;margin-bottom:12px}
.head .t{font-size:1.25rem;font-weight:700} .head .m{font-size:.85rem;color:var(--muted)}
.head .gate{text-align:right} .gate .big{font-size:1.1rem;font-weight:700;padding:6px 12px;display:inline-block} .gate .big.ok{background:var(--pos-soft);color:var(--pos)} .gate .big.no{background:var(--risk-soft);color:var(--risk)}
.head .ctl{grid-column:1/-1;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.lbl{display:flex;flex-direction:column;gap:3px;font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700}
.tabs{display:flex;gap:0;overflow-x:auto;border-bottom:2px solid var(--rule);margin-bottom:12px}
.tabs button{flex:0 0 auto;border:0;background:transparent;color:var(--muted);font-weight:600;font-size:.85rem;padding:9px 12px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;white-space:nowrap}
.tabs button[aria-selected="true"]{color:var(--acc);border-bottom-color:var(--acc)} .tabs button .n{display:inline-block;min-width:18px;padding:0 5px;margin-left:5px;border-radius:9px;font-size:.68rem;background:var(--risk-soft);color:var(--risk)} .tabs button .n.ok{background:var(--pos-soft);color:var(--pos)}
.tab{background:var(--card);border:1px solid var(--rule);padding:14px 16px}
.tab .how{background:var(--hi);border-left:4px solid var(--warn);padding:8px 12px;font-size:.86rem;margin-bottom:12px;color:var(--ink2)}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-bottom:12px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:12px}
.list{display:flex;flex-direction:column;gap:0;border:1px solid var(--rule);margin-bottom:10px}
.item{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--rule2);font-size:.9rem} .item:last-child{border:0}
.item input[type=checkbox]{width:20px;height:20px;margin:0} .item .txt{display:flex;flex-direction:column} .item .txt small{color:var(--muted);font-size:.76rem} .item.done .txt{text-decoration:line-through;color:var(--muted)} .item.over .txt small{color:var(--risk);font-weight:700}
.item select{width:auto;padding:4px 6px;font-size:.8rem}
.addrow{display:grid;grid-template-columns:2fr 1fr auto;gap:8px;margin-bottom:12px} @media (max-width:560px){.addrow{grid-template-columns:1fr}}
.save{display:flex;gap:8px;align-items:center;justify-content:flex-end;flex-wrap:wrap;margin-top:10px;padding-top:10px;border-top:1px solid var(--rule2)} .save .note{flex:1;min-width:200px}
.money{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:8px} .money div{border:1px solid var(--rule);padding:8px 10px} .money b{display:block;font-size:1.15rem;font-variant-numeric:tabular-nums} .money span{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)} .money .neg b{color:var(--risk)}
.gates{display:flex;flex-direction:column;border:1px solid var(--rule)} .gates div{display:grid;grid-template-columns:28px 1fr;gap:8px;padding:9px 10px;border-bottom:1px solid var(--rule2);font-size:.9rem} .gates div:last-child{border:0} .gates .ok::before{content:"✓";color:var(--pos);font-weight:700} .gates .no::before{content:"✗";color:var(--risk);font-weight:700} .gates small{display:block;color:var(--muted);font-size:.78rem}
.log{font-size:.84rem;display:flex;flex-direction:column;gap:6px;margin-top:14px} .log div{border-bottom:1px solid var(--rule2);padding-bottom:4px} .log .w{font-family:var(--mono);font-size:.72rem;color:var(--muted)}
.empty{color:var(--muted);font-size:.9rem;padding:24px;text-align:center;border:1px dashed var(--rule)}
dialog{border:1px solid var(--rule);background:var(--card);color:var(--ink);max-width:460px;width:calc(100% - 32px);padding:16px} dialog::backdrop{background:rgba(0,0,0,.45)}
.hidden{display:none}
.counts{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px} .counts button{border:1px solid var(--rule);background:var(--card);padding:14px;text-align:left;cursor:pointer;font-family:var(--body)} .counts b{display:block;font-size:2rem;line-height:1} .counts span{font-size:.78rem;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.06em} .counts .r b{color:var(--risk)} .counts .w b{color:var(--warn)} .counts .g b{color:var(--acc)} .counts button[aria-pressed="true"]{outline:3px solid var(--acc)}
@media (max-width:560px){.counts{grid-template-columns:repeat(2,1fr)}}
.pcards{display:flex;flex-direction:column;gap:18px}
.pcard{background:var(--card);border:1px solid var(--rule);border-top:8px solid var(--rule);padding:20px 22px;scroll-margin-top:12px}
.pcard.bad{border-top-color:var(--risk)} .pcard.watch{border-top-color:var(--warn)} .pcard.ok{border-top-color:var(--pos)} .pcard.none{border-top-color:var(--muted);opacity:.75}
.pc-top{margin-bottom:4px;display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.pc-name{font-size:1.45rem;font-weight:700;line-height:1.15} .pc-where{color:var(--muted);font-size:.92rem;margin-top:2px}
.pc-status{text-align:right} .pc-pill{display:inline-block;font-size:1rem;font-weight:700;padding:6px 14px} .pc-pill.bad{background:var(--risk-soft);color:var(--risk)} .pc-pill.watch{background:var(--warn-soft);color:var(--warn)} .pc-pill.ok{background:var(--pos-soft);color:var(--pos)} .pc-pill.none{background:var(--rule2);color:var(--muted)}
.pc-count{font-size:2.4rem;font-weight:700;line-height:1;margin-top:8px;font-variant-numeric:tabular-nums} .pc-count small{display:block;font-size:.78rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-top:2px}
.pc-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:16px 0} @media (max-width:640px){.pc-tiles{grid-template-columns:repeat(2,1fr)}}
.pc-tile{padding:10px 12px;border:1px solid var(--rule)} .pc-tile span{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:700} .pc-tile b{font-size:1.02rem}
.pc-tile.g{background:var(--pos-soft);border-color:transparent} .pc-tile.g b{color:var(--pos)} .pc-tile.y{background:var(--warn-soft);border-color:transparent} .pc-tile.y b{color:var(--warn)} .pc-tile.r{background:var(--risk-soft);border-color:transparent} .pc-tile.r b{color:var(--risk)}
.pc-next{font-size:1.05rem;padding:12px 14px;background:var(--acc-soft);margin-bottom:10px} .pc-next span{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.07em;color:var(--acc);font-weight:700;margin-bottom:2px} .pc-next.over{background:var(--risk-soft)} .pc-next.over span{color:var(--risk)}
.pc-why{font-size:.9rem;color:var(--risk);margin:0 0 10px} .pc-note{font-size:.88rem;color:var(--ink2);margin:0 0 12px} .pc-note b{color:var(--muted);font-weight:600}
.pc-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px solid var(--rule2);padding-top:12px} .pc-foot .m{font-size:.82rem;color:var(--muted)}
.pcard .risk{border:0;padding:0;margin:4px 0 0} .pcard .risk .verdict,.pcard .risk .why{display:none}
.risk{background:var(--card);border:1px solid var(--rule);padding:14px 16px;margin-bottom:12px;border-left:6px solid var(--rule)}
.risk.ok{border-left-color:var(--pos)} .risk.watch{border-left-color:var(--warn)} .risk.bad{border-left-color:var(--risk)} .risk.none{border-left-color:var(--muted)}
.risk .verdict{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:10px} .risk .verdict b{font-size:1.15rem} .risk.ok .verdict b{color:var(--pos)} .risk.watch .verdict b{color:var(--warn)} .risk.bad .verdict b{color:var(--risk)}
.risk .why{margin:8px 0 0;padding-left:18px;font-size:.86rem;color:var(--ink2)} .risk .why li{margin:2px 0}
.tl{position:relative;height:74px;margin:44px 34px 0}
.tl .bar{position:absolute;left:0;right:0;top:30px;height:8px;background:var(--rule2);border-radius:4px;overflow:hidden}
.tl .fill{position:absolute;left:0;top:0;bottom:0}
.tl .mk{position:absolute;top:0;transform:translateX(-50%);text-align:center;font-size:.68rem;line-height:1.15;color:var(--muted);white-space:nowrap}
.tl .mk .pin{width:14px;height:14px;border-radius:50%;margin:16px auto 6px;border:3px solid var(--card);box-shadow:0 0 0 1px var(--rule)}
.tl .mk.top{top:-2px} .tl .mk.top .lab{position:absolute;bottom:44px;left:50%;transform:translateX(-50%)}
.tl .mk b{display:block;color:var(--ink);font-size:.72rem}
.credlog{display:flex;flex-direction:column;border:1px solid var(--rule);margin:8px 0 12px} .credlog div{padding:8px 10px;border-bottom:1px solid var(--rule2);font-size:.9rem} .credlog div:last-child{border:0} .credlog small{display:block;color:var(--muted);font-size:.74rem;font-family:var(--mono)}
.credadd{display:grid;grid-template-columns:auto 1fr auto;gap:8px;margin-bottom:12px} @media (max-width:560px){.credadd{grid-template-columns:1fr}}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);padding:12px 20px;font-weight:700;font-size:.95rem;z-index:50;box-shadow:0 4px 18px rgba(0,0,0,.25)} .toast.ok{background:var(--pos);color:#fff} .toast.err{background:var(--risk);color:#fff}
.dirty{display:inline-block;margin-left:8px;padding:2px 8px;font-size:.72rem;font-weight:700;background:var(--warn-soft);color:var(--warn)}
.btn[disabled]{opacity:.6;cursor:wait}
.nav{display:flex;gap:0;border:1px solid var(--rule);margin-bottom:14px;background:var(--card)} .nav button{flex:1;border:0;background:transparent;color:var(--muted);font-weight:700;font-size:.9rem;padding:10px;cursor:pointer;border-bottom:3px solid transparent} .nav button[aria-pressed="true"]{color:var(--acc);border-bottom-color:var(--acc);background:var(--acc-soft)}
.meter{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:12px} .meter div{border:1px solid var(--rule);padding:8px 10px;background:var(--card)} .meter b{display:block;font-size:1.4rem;font-variant-numeric:tabular-nums} .meter span{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)} .meter .hit b{color:var(--pos)} .meter .miss b{color:var(--risk)}
.tier{border:1px solid var(--rule);background:var(--card);padding:12px 14px;margin-bottom:12px;border-left:6px solid var(--rule)} .tier.t1{border-left-color:var(--risk)} .tier.t2{border-left-color:var(--warn)} .tier.t3{border-left-color:var(--pos)} .tier h2{margin-bottom:2px} .tier .sub{font-size:.84rem;color:var(--muted);margin-bottom:8px}
