:root{--bg:#FFFFFF;--surface-alt:#F6F6F4;--text:#1A1A1A;--muted:#6B6B66;--line:#E4E4E0;--accent:#1F5FBF;--warn:#C62828;--hold:#8A8A84;--mark:#FFF1A8;--tab-h:3.5rem;color-scheme:light dark}
@media (prefers-color-scheme:dark){:root{--bg:#121212;--surface-alt:#1C1C1A;--text:#EDEDEA;--muted:#A6A69F;--line:#30302C;--accent:#8AB0F2;--warn:#FF6B6B;--hold:#909089;--mark:#5A4B00}}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:400 .9375rem/1.5 -apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic",sans-serif;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
button,input{font:inherit;font-size:1rem;color:inherit}
button{min-height:2.75rem;min-width:2.75rem;background:none;border:0;padding:0 .75rem;cursor:pointer;touch-action:manipulation}
button:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
input[type=text]{min-height:2.75rem;width:100%;padding:0 .75rem;border:1px solid var(--line);border-radius:6px;background:var(--bg)}
.kw-row{display:flex;align-items:center;gap:.5rem;margin:.375rem 0}
.kw-num{flex:none;width:1.25rem;text-align:right;font-size:.8125rem;color:var(--muted)}
.kw-row input{flex:1;min-width:0}
.kw-del{flex:none;padding:0 .5rem;color:var(--warn)}
.kw-actions{display:flex;align-items:center;flex-wrap:wrap;gap:.25rem .75rem;margin-top:.5rem}
.kw-actions .btn{padding:0 1rem}
[hidden]{display:none!important}
#app{min-height:100vh;padding-bottom:calc(var(--tab-h) + env(safe-area-inset-bottom))}
#content{padding-top:env(safe-area-inset-top)}
.screen-head{display:flex;align-items:center;flex-wrap:wrap;gap:.25rem .5rem;padding:.5rem 1rem;position:sticky;top:0;background:var(--bg);z-index:2;border-bottom:1px solid var(--line);min-height:3.5rem}
.screen-head h1{font-size:1.5rem;font-weight:700;margin:0;flex:1}
.meta{font-size:.8125rem;color:var(--muted)}
.text-btn{color:var(--accent);font-size:.9375rem}
.text-btn[disabled]{color:var(--muted)}
.btn{border-radius:6px;border:1px solid var(--line);margin:.25rem 0}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
.tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;background:var(--bg);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:5}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:var(--tab-h);position:relative;color:var(--muted)}
.tab[aria-current=page]{color:var(--accent)}
.tab-icon{font-size:1.5rem;line-height:1}
.tab-label{font-size:.75rem}
.badge{position:absolute;top:.25rem;left:calc(50% + .5rem);min-width:1.25rem;height:1.25rem;padding:0 .3rem;border-radius:.625rem;background:var(--warn);color:#fff;font-size:.6875rem;line-height:1.25rem;text-align:center}
.anon-dot{position:fixed;top:calc(env(safe-area-inset-top) + .4rem);right:.4rem;width:.375rem;height:.375rem;border-radius:50%;background:var(--muted);z-index:6}
#veil{display:none;position:fixed;inset:0;background:var(--surface-alt);z-index:50}
.veiled #veil{display:block}
.veiled #app{visibility:hidden}
#snackbar{position:fixed;left:1rem;right:1rem;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + .5rem);display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .25rem .25rem 1rem;background:var(--text);color:var(--bg);border-radius:6px;z-index:20}
.snack-action{color:var(--bg);font-weight:600}
.state{padding:2rem 1rem}
.state-title{font-size:1.0625rem;font-weight:600;margin:0 0 .5rem}
.state-body{margin:.25rem 0;color:var(--muted)}
.state-actions{display:flex;flex-direction:column;gap:.5rem;margin-top:1rem}
.state-error{color:var(--warn);min-height:1.5em;margin:0}
.notice{border-left:3px solid var(--accent);background:var(--surface-alt)}
.skeleton .sk{background:var(--surface-alt);border-radius:4px;height:1rem;margin:.75rem 0}
.skeleton .sk-title{height:1.5rem;width:60%}
.skeleton .sk-warn{height:auto;padding:.5rem;border-left:3px solid var(--warn);background:none}
.sk-label{color:var(--muted);font-size:.8125rem}
.sec{padding:.75rem 1rem 1.5rem;border-top:.75rem solid var(--surface-alt)}
.sec-label{font-size:.75rem;font-weight:600;letter-spacing:.02em;color:var(--muted);margin:0 0 .5rem}
.kv{display:flex;justify-content:space-between;gap:1rem;min-height:2.75rem;align-items:center;border-bottom:.5px solid var(--line)}
.anon-toggle-row{padding:2rem 1rem 1rem;font-size:.75rem;color:var(--muted)}
.anon-toggle{display:inline-flex;align-items:center;gap:.25rem;min-height:2.75rem}
.seg-btn[aria-pressed=true]{background:var(--accent);color:#fff;border-radius:6px}
.seg-btn[disabled]{opacity:.55}
.day-divider{position:sticky;top:3.5rem;z-index:1;background:var(--surface-alt);padding:.25rem 1rem;font-size:.75rem;font-weight:600;color:var(--muted)}
.bundle{padding:.75rem 1rem;border-bottom:.5px solid var(--line);min-height:3.5rem}
.bundle.tappable{cursor:pointer}
.b-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.dot{width:6px;height:6px;border-radius:50%;flex:none}
.dot.unread{background:var(--accent)}
.b-name{font-size:1.0625rem;font-weight:600}
.b-time{font-size:.8125rem;color:var(--muted)}
.chev{margin-left:auto;color:var(--muted)}
.b-today,.b-recent-line,.sum-line{margin:.25rem 0}
.b-stage{display:flex;align-items:baseline;flex-wrap:wrap;gap:.5rem;margin:.25rem 0}
.b-label{font-size:1.25rem;font-weight:700}
.hold .b-label,.hold .tl-label{color:var(--hold);font-weight:500}
.hold-tag{font-size:.6875rem;border:1px solid var(--line);border-radius:6px;padding:0 .3rem;color:var(--muted)}
.expired-note{color:var(--muted);font-size:.8125rem}
.tline{list-style:none;margin:.25rem 0 0;padding:0 0 0 .75rem;border-left:1px solid var(--line)} /* not `.tl`: palmer.ts names its top-left cell `tl` (2.10 single source) */
.tl-item{position:relative;padding:.25rem 0 .25rem .75rem}
.tl-dot{position:absolute;left:-1rem;top:.65rem;width:8px;height:8px;border-radius:50%;background:var(--muted)}
.tl-item.current .tl-dot{left:-1.125rem;top:.55rem;width:12px;height:12px;background:var(--bg);border:2px solid var(--accent)}
.tl-item.hold .tl-dot{background:var(--bg);border:1px solid var(--hold)}
.tl-time{font-size:.8125rem;color:var(--muted);margin-right:.5rem}
.tl-label{font-weight:600}
.tl-text{margin:.125rem 0 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tl-item.hold .tl-text{-webkit-line-clamp:4}
.tl-text.full{display:block}
.segment{display:grid;grid-template-columns:repeat(5,1fr);position:sticky;top:3.5rem;z-index:2;background:var(--bg);border-bottom:1px solid var(--line)}
.seg{min-height:3rem;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;padding:0;min-width:0}
.seg[aria-selected=true]{background:var(--accent);color:#fff}
.seg-count{font-size:.6875rem}
.seg-today{position:absolute;top:.25rem;right:.4rem;width:5px;height:5px;border-radius:50%;background:var(--warn)}
.half-bar{display:flex;gap:.25rem;padding:.25rem 1rem;border-bottom:1px solid var(--line)}
.half-btn{flex:1;min-width:0;border-radius:6px}
.day-scroller{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none}
.day-panel{flex:0 0 100%;scroll-snap-align:start;min-width:0}
.ampm{background:var(--surface-alt);font-size:.75rem;font-weight:600;color:var(--muted);padding:.25rem 1rem}
.pt-row{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;width:100%;min-height:4rem;padding:.5rem 1rem;text-align:left;border-bottom:.5px solid var(--line)}
.pt-time{color:var(--muted);flex:none;width:3rem}
.pt-main{display:flex;flex-direction:column;flex:1 1 4rem;min-width:0}
.pt-name{font-size:1rem;font-weight:700}
.chip{font-size:.75rem;border:1px solid var(--line);border-radius:6px;padding:0 .4rem;margin-right:.5rem;white-space:nowrap}
.pt-row .chip{flex:0 1 auto;min-width:0;max-width:100%;margin-right:0;white-space:normal}
.cat-bar{flex:none;align-self:stretch;width:.5rem;margin-left:auto;border-radius:3px}
.cat-red{background:#FF9999}
.cat-blue{background:#9999FF}
.cat-orange{background:#FFCC99}
.cat-green{background:#CCFFCC}
.cat-gray{background:#999999}
.cat-etc{background:#CCCCCC}
.appbar{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:.25rem;min-height:3.5rem;padding:0 .25rem;background:var(--bg);border-bottom:1px solid var(--line)}
.appbar .back{font-size:1.75rem}
.appbar-title{flex:1;min-width:0}
.ab-name{font-size:1.0625rem;font-weight:600}
.ab-tier1{font-size:.8125rem;color:var(--muted)}
.warn-count{color:var(--warn);font-size:.8125rem;font-weight:600}
.pano{padding:0 0 1rem;position:relative;border-top:0}
/* request E (2026-10-06): the pano fills the width of the phone at its own proportions (the 190px cap left side bands). Only where that would
   be higher than 60% of the screen (a phone held sideways, a wide tablet) is the height capped: the whole picture still shows (contain). */
.pano-frame{display:block;position:relative;width:100%;padding:0;overflow:hidden;border-radius:4px}
.pano-frame img{display:block;width:100%;height:auto;max-height:60vh;object-fit:contain}
.pano-overlay{position:absolute;left:0;top:0}
.overlay-off .pano-overlay{display:none}
.ai-badge{position:absolute;left:.5rem;top:.5rem;font-size:.6875rem;background:var(--text);color:var(--bg);padding:0 .3rem;border-radius:6px}
.zoom-btn{position:absolute;right:.25rem;top:.25rem;background:var(--bg);border-radius:6px}
.warn-list{list-style:none;margin:0;padding:0}
.warn{border-left:3px solid var(--warn);padding:.25rem .5rem;margin:.25rem 0}
.warn strong{color:var(--warn)}
.sum-list{list-style:none;margin:0;padding:0}
.sum-item{display:flex;flex-wrap:wrap;gap:.25rem .5rem;align-items:baseline;padding:.5rem 0;border-bottom:.5px solid var(--line)}
.sum-label{font-weight:600}
.sum-text{flex:1 1 60%}
.evid-btn{color:var(--accent);margin-left:auto}
.more-row{border-bottom:.5px solid var(--line)}
.more-row summary{min-height:2.75rem;display:flex;align-items:center;cursor:pointer}
.more-body{padding:0 0 .75rem}
.hidden-note{color:var(--muted);padding:1rem}
.sheet-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:30;display:flex;align-items:flex-end}
.sheet{width:100%;max-height:85vh;overflow:auto;background:var(--bg);border-radius:6px 6px 0 0;padding:.5rem 1rem 1.5rem}
.sheet-close{float:right}
.ev-src{font-size:.8125rem;color:var(--muted)}
.ev-quote{margin:.5rem 0}
.ev-quote mark{background:var(--mark);color:inherit}
.ev-img{display:block;width:100%;height:auto}
.ev-media.full{position:fixed;inset:0;z-index:40;background:var(--bg);overflow:auto}
.viewer{position:fixed;inset:0;z-index:40;background:#000;display:flex;flex-direction:column}
.viewer-stage{flex:1;overflow:auto}
.viewer-canvas{position:relative;width:100%}
.viewer-error{color:#fff;padding:1rem;text-align:center}
.viewer-img{display:block;width:100%;height:auto}
.viewer-img.overlay{position:absolute;left:0;top:0}
.viewer-bar{display:flex;justify-content:flex-end;gap:.5rem;padding:.5rem .5rem calc(.5rem + env(safe-area-inset-bottom));background:#000}
.viewer-bar button{color:#fff}
.palmer{display:inline-grid;grid-template-columns:repeat(2,minmax(.8em,auto));grid-template-rows:repeat(2,1.45em);font-size:.62em;line-height:1.45em;font-weight:400;letter-spacing:-.02em;vertical-align:middle;margin:0 .4em;padding:0;color:#6a6650;font-variant-numeric:tabular-nums;white-space:nowrap;--pc:#b5651d}.palmer .pq{display:block;min-width:.8em;padding:0 .22em;height:1.45em;overflow:hidden}.palmer .tl{text-align:right;border-right:1.5px solid var(--pc);border-bottom:1.5px solid var(--pc)}.palmer .tr{text-align:left;border-bottom:1.5px solid var(--pc)}.palmer .bl{text-align:right;border-right:1.5px solid var(--pc)}.palmer .br{text-align:left}.palmer .pq.wave{display:flex;align-items:center;justify-content:flex-start;font-size:1.8em;font-weight:400;line-height:1;height:calc(1.45em/1.8);padding:0 .11em;overflow:visible}.palmer .tl.wave,.palmer .bl.wave{justify-content:flex-end}.palmer .tr.wave,.palmer .br.wave{justify-content:flex-start}
@media (prefers-color-scheme:dark){.palmer{color:var(--muted);--pc:#D08A4A}}
@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
#offline-band{padding:calc(env(safe-area-inset-top) + .375rem) 1rem .375rem;background:var(--surface-alt);border-bottom:1px solid var(--line);color:var(--text);font-size:.8125rem;text-align:center}
#offline-band:not([hidden])+#content{padding-top:0}
.offline-note{margin:.25rem 0 .5rem}
