:root{--bg:#faf8f5;--card:#ffffff;--ink:#20261f;--muted:#6b746c;--faint:#98a099;--line:#e7e3db;--accent:#2f5d50;--accent-dark:#24473d;--accent-soft:#e9f0ed;--danger:#a33b2e;--radius:16px;--shadow:0 1px 2px rgba(32,38,31,0.05),0 4px 16px rgba(32,38,31,0.06)}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}.page,body{min-height:100dvh}.page{max-width:27rem;margin:0 auto;padding:calc(env(safe-area-inset-top) + 20px) 20px calc(env(safe-area-inset-bottom) + 32px);display:flex;flex-direction:column}@media (min-width:900px){.page-wide{max-width:60rem}}.admin-page{max-width:34rem}@media (min-width:900px){.admin-page.page-wide{max-width:64rem}}.split{display:flex;flex-direction:column;gap:20px}@media (min-width:900px){.split{display:grid;grid-template-columns:1fr 1fr;align-items:center;grid-gap:64px;gap:64px}}.split-panel{gap:16px}.split-panel,.two-col{display:flex;flex-direction:column}.two-col{gap:20px}@media (min-width:900px){.two-col{display:grid;grid-template-columns:1fr 1fr;grid-auto-flow:dense;align-items:start;grid-gap:24px;gap:24px}.two-col>.cta-block{grid-column:1/-1}}.cta-block{display:flex;flex-direction:column;gap:12px}@media (min-width:900px){.cta-block{max-width:24rem;margin:0 auto;width:100%}}.status-bar-backdrop{position:fixed;top:0;left:0;right:0;height:env(safe-area-inset-top);background:var(--accent);z-index:1000}.topbar{justify-content:space-between;padding:4px 0 20px}.brand,.topbar{display:flex;align-items:center}.brand{gap:10px;font-weight:650;font-size:1.05rem;letter-spacing:.01em;color:var(--ink);text-decoration:none}h1{font-size:1.7rem;font-weight:700;letter-spacing:-.02em;line-height:1.2}h2{font-size:1.05rem;font-weight:650;letter-spacing:-.01em}p{color:var(--ink)}.muted{color:var(--muted)}.small{font-size:.875rem}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.stack{display:flex;flex-direction:column;gap:16px}.row,.spread{display:flex;align-items:center;gap:12px}.spread{justify-content:space-between}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);background:var(--card);color:var(--ink);font:inherit;font-weight:600;border-radius:999px;padding:14px 22px;cursor:pointer;text-align:center;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .05s ease,opacity .15s ease;touch-action:manipulation}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-dark)}.btn.btn-primary:disabled{opacity:1;background:#7fa696;border-color:#7fa696;color:rgba(255,255,255,.85);cursor:default}.btn-block{width:100%}.btn-quiet{color:var(--muted)}.btn-danger-quiet,.btn-quiet{border:none;background:transparent;padding:10px 12px}.btn-danger-quiet{color:var(--danger)}.input,.select,textarea.input{width:100%;font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px;outline:none}.input:focus,.select:focus,textarea.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.label{display:block;font-size:.875rem;font-weight:600;color:var(--muted);margin-bottom:6px}.error{color:var(--danger);font-size:.9rem}.success{color:var(--accent);font-size:.9rem}.dots{display:flex;gap:10px}.dot{width:14px;height:14px;border-radius:50%;background:var(--line)}.dot.on{background:var(--accent)}.feelings{display:flex;gap:8px;justify-content:space-between}.feeling{flex:1 1;flex-direction:column;gap:6px;padding:12px 4px;border:1px solid var(--line);border-radius:14px;background:var(--card);cursor:pointer;font:inherit;transition:border-color .15s ease,background .15s ease}.feeling,.feeling .icon{display:flex;align-items:center}.feeling .icon{height:28px;justify-content:center}.feeling .name{font-size:.72rem;font-weight:600;color:var(--muted)}.feeling.selected{border-color:var(--accent);background:var(--accent-soft)}.feeling.selected .name{color:var(--accent)}.tension-list{display:flex;flex-direction:column;gap:8px}.tension-option{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--card);cursor:pointer;font:inherit;font-weight:600;color:var(--ink);text-align:left;transition:border-color .15s ease,background .15s ease}.tension-option .checkbox-box{width:20px;height:20px;border-radius:6px;border:2px solid var(--line);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:.8rem;color:#fff}.tension-option.selected{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.tension-option.selected .checkbox-box{border-color:var(--accent);background:var(--accent)}.switch{position:relative;width:50px;height:30px;flex-shrink:0}.switch input{opacity:0;width:100%;height:100%;position:absolute;cursor:pointer;z-index:1}.switch .track{position:absolute;inset:0;background:var(--line);border-radius:999px;transition:background .15s ease}.switch .track:after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:transform .15s ease}.switch input:checked+.track{background:var(--accent)}.switch input:checked+.track:after{transform:translateX(20px)}.code-input{letter-spacing:.5em;text-align:center;font-size:1.4rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.media{width:100%;border-radius:12px;display:block;max-height:340px;object-fit:cover;background:var(--accent-soft)}.list{display:flex;flex-direction:column}.list>*+*{border-top:1px solid var(--line)}.list-item{padding:14px 0}.chip{display:inline-block;font-size:.72rem;font-weight:650;padding:3px 9px;border-radius:999px;background:var(--accent-soft);color:var(--accent)}.chip.off{background:#f1efe9;color:var(--faint)}.stat{flex:1 1;text-align:center}.stat .num{font-size:1.5rem;font-weight:700;letter-spacing:-.02em}.stat .cap{font-size:.72rem;color:var(--muted);font-weight:600}.stat-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:8px;gap:8px}.stat-compact{padding:14px 6px;background:var(--accent);border-color:var(--accent);color:#fff}.stat-compact .num{font-size:1.15rem}.stat-compact .cap{font-size:.62rem;line-height:1.3;color:rgba(255,255,255,.8)}.center{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;flex:1 1;gap:12px}.spinner{width:22px;height:22px;border:2.5px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.spine-loader{display:flex;flex-direction:column;align-items:center;gap:18px}.spine-dot{fill:var(--accent);transform:translateX(var(--dx));animation:spine-align 1.15s cubic-bezier(.34,1.56,.64,1) forwards}.spine-settle{animation:spine-glow .6s ease-out 1.65s both}@keyframes spine-align{to{transform:translateX(0)}}@keyframes spine-glow{0%,to{filter:drop-shadow(0 0 0 transparent)}50%{filter:drop-shadow(0 0 6px var(--accent))}}@media (prefers-reduced-motion:reduce){.spine-dot,.spine-settle{animation:none}.spine-dot{transform:none}}.home-midnight{--bg:#15221d;--card:#1d2b25;--ink:#f1efe6;--muted:#93a599;--line:#2a3931;--accent:#4c8770;--ribbon-bg:#12201b;--dot-ahead:rgba(241,239,230,0.18);--dot-filled:#f1efe6;--today-accent:#c99ba0;background:var(--bg);color:var(--ink)}.home-midnight .btn-primary{color:#0f1a16}.week-card{padding:0;display:grid;grid-template-columns:82px 1fr;overflow:hidden}.week-ribbon{background:var(--ribbon-bg);align-items:center;padding:16px 0}.week-ribbon,.week-stats{display:flex;justify-content:center}.week-stats{padding:16px 18px;flex-direction:column;gap:14px}.week-stats .row{display:flex;align-items:baseline;gap:8px}.week-stats .num{font-size:1.35rem;font-weight:700;letter-spacing:-.02em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.week-stats .cap{font-size:.72rem;color:var(--muted);font-weight:600}.week-dot.filled{fill:var(--dot-filled)}.week-dot.missed{fill:none;stroke:var(--muted);stroke-width:1.75}.week-dot.ahead{fill:var(--dot-ahead)}.week-dot.today{stroke:var(--today-accent);stroke-width:2.5}.week-dot.today:not(.filled){fill:var(--ribbon-bg)}a{color:var(--accent)}