    :root{
      --bg:#1e1b18; --surface:#28241f; --chip-bg:#2a2620; --chip-fg:#ffc46e;
      --ink:#ece5da; --muted:#9c9184; --faint:#7d7365; --rule:#ece5da; --dot:#443e36;
      --accent:#f4693f; --accent-fill:#e34a27; --kalam:#e08a63; --today-num:#ffc46e;
      --track:#332e28; --note-bg:#28241f; --note-bd:#443e36; --press:#332e28;
    }
    :root[data-theme="light"]{
      --bg:#faf6ee; --surface:#f5efe2; --chip-bg:#1c1a17; --chip-fg:#ffb454;
      --ink:#1c1a17; --muted:#6f6656; --faint:#8a8072; --rule:#1c1a17; --dot:#d5c9b2;
      --accent:#e34a27; --accent-fill:#e34a27; --kalam:#a3552f; --today-num:#b45309;
      --track:#eee5d4; --note-bg:#f5efe2; --note-bd:#ddd3c0; --press:#eee5d4;
    }

*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:var(--bg)}
body{font-family:Newsreader,serif;color:var(--ink);-webkit-font-smoothing:antialiased;overscroll-behavior-y:none}
button,input,textarea{font:inherit}
button{-webkit-tap-highlight-color:transparent}
button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
button{color:inherit}
a{color:var(--accent);text-decoration:none}
.shell{min-height:100vh;background:var(--bg);display:flex;justify-content:center}
.page{width:100%;max-width:430px;padding:16px 18px calc(32px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:12px;transition:transform .2s,opacity .25s}
.lock{min-height:88vh;display:flex;flex-direction:column;justify-content:center;gap:18px;padding:0 4px}
#unlock-form{display:flex;flex-direction:column;gap:18px}
.brand{font:400 28px 'Instrument Serif',serif;color:var(--ink)}
.brand.large{font-size:42px}
.dot{color:var(--accent)}
.kalam{font:400 13px Kalam,cursive;color:var(--kalam);display:inline-block;transform:rotate(-2deg)}
.faint{color:var(--faint)}
.mono{font-family:'IBM Plex Mono',monospace}
.passphrase,.text-input,.note-area{width:100%;border:1px solid var(--note-bd);border-radius:6px;background:var(--note-bg);color:var(--ink);padding:12px}
.passphrase{font:500 20px 'IBM Plex Mono',monospace;letter-spacing:.18em;padding:15px 16px}
.unlock{width:100%;border:1px solid var(--note-bd);border-radius:6px;background:var(--chip-bg);color:var(--chip-fg);font:italic 400 17px Newsreader,serif;padding:13px 16px;text-align:left;cursor:pointer}
.unlock:hover,.quiet-button:hover,.icon-button:hover{border-color:var(--accent);color:var(--accent)}
.error{font:italic 400 14px Newsreader,serif;color:var(--accent)}
.header,.row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.header-actions{display:flex;gap:6px;align-items:center}
.updated{font:400 11px Kalam,cursive;color:var(--faint);white-space:nowrap}
.icon-button{width:38px;height:38px;border:1px solid var(--dot);border-radius:8px;background:transparent;color:var(--muted);font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center}
.icon-button.active{background:var(--press);color:var(--accent)}
.rule{border-top:1px solid var(--rule)}
.month-switcher{display:flex;align-items:baseline;gap:12px}
.month-switcher .month-label{font:italic 400 16px Newsreader;color:var(--ink)}
.arrow-button,.text-button{border:none;background:transparent;cursor:pointer;padding:2px 8px;color:var(--faint)}
.arrow-button{font:400 18px Newsreader}
.arrow-button:disabled{opacity:.25;cursor:default}
.progress-note{margin-left:auto;font:400 13px Kalam,cursive;color:var(--kalam);transform:rotate(-2deg)}
.hero{display:flex;justify-content:space-between;align-items:flex-end;gap:10px}
.eyebrow{font:italic 400 14px Newsreader;color:var(--muted)}
.hero-money{font:600 36px/1.1 'IBM Plex Mono',monospace;color:var(--today-num);margin-top:4px;text-shadow:0 0 20px color-mix(in srgb,var(--today-num) 28%,transparent);display:flex;align-items:baseline;gap:8px}
.hero-pending{font-size:18px;color:var(--accent);text-shadow:none}
.assignment-meta{font:500 11px 'IBM Plex Mono',monospace;color:var(--faint);margin-top:4px}
.assignment-meta.alert{color:var(--accent)}
.hero-meta{font:400 13px Newsreader;color:var(--faint);margin-top:3px}
.spark-wrap{position:relative;flex-shrink:0}
.spark-note{position:absolute;right:0;top:-15px;font:400 11px Kalam,cursive;color:var(--kalam);transform:rotate(-3deg);white-space:nowrap}
.teaser{border:none;background:transparent;padding:1px 0 4px;text-align:left;cursor:pointer;font:italic 400 13px Newsreader;color:var(--kalam)}
.averages{display:grid;grid-template-columns:1fr 1fr;border-top:1px dotted var(--dot);border-bottom:1px dotted var(--dot)}
.average{padding:10px 12px 10px 0}
.average+.average{padding-left:12px;border-left:1px dotted var(--dot)}
.metric-label{font:italic 400 13px Newsreader;color:var(--muted)}
.metric-value{font:500 22px 'IBM Plex Mono',monospace;color:var(--ink);margin-top:2px}
.month-total{display:flex;align-items:baseline;gap:8px;margin-top:2px;flex-wrap:wrap}
.month-money{font:500 26px 'IBM Plex Mono',monospace;color:var(--ink)}
.secondary{font:400 13px Newsreader;color:var(--faint)}
.goal-percent{margin-left:auto;font:500 14px 'IBM Plex Mono',monospace;color:var(--accent)}
.track{height:5px;background:var(--track);border-radius:3px;margin-top:7px;overflow:hidden}
.fill{height:100%;background:var(--accent-fill);border-radius:3px}
.month-meta,.pace{display:flex;justify-content:space-between;margin-top:5px;font:400 12px Newsreader;color:var(--faint);gap:10px}
.pace{margin-top:3px;color:var(--muted)}
.pace-badge{font:500 11px 'IBM Plex Mono',monospace;color:var(--accent)}
.note-box{border:1px solid var(--note-bd);border-radius:6px;background:var(--note-bg);padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.goal-form{display:grid;grid-template-columns:1fr 1fr auto;gap:6px}
.text-input{min-width:0;border-radius:4px;background:transparent;font:500 13px 'IBM Plex Mono',monospace;padding:7px 8px}
.quiet-button{border:1px solid var(--note-bd);border-radius:4px;background:transparent;color:var(--kalam);font:italic 400 13px Newsreader,serif;padding:5px 12px;cursor:pointer}
.history{display:flex;flex-direction:column;gap:3px;font:400 11px 'IBM Plex Mono',monospace;color:var(--faint)}
.section{margin-top:8px}
.section-title{font:400 22px 'Instrument Serif',serif;color:var(--ink)}
.tabs{display:flex;gap:2px}
.tab{padding:4px 10px;border:none;border-radius:3px;cursor:pointer;font:500 12px 'IBM Plex Mono',monospace;background:transparent;color:var(--faint)}
.tab.active{background:var(--chip-bg);color:var(--chip-fg)}
.table-head,.table-row{display:grid;grid-template-columns:1.15fr 1fr .55fr .9fr 1fr;gap:4px;align-items:baseline}
.table-head{padding:5px 0;font:italic 400 12px Newsreader;color:var(--faint);border-bottom:1px solid var(--rule)}
.table-row{padding:8px 0;border-bottom:1px dotted var(--dot);font:400 13px 'IBM Plex Mono',monospace}
.table-row .date{font-family:Newsreader;color:var(--muted)}
.table-row span:not(:first-child),.table-head span:not(:first-child){text-align:right}
.ma{color:var(--kalam)}
.cum,.reviews{color:var(--faint)}
.show-all{border:none;background:transparent;padding:10px 0;font:italic 400 14px Newsreader;color:var(--kalam);cursor:pointer}
.chart{width:100%;height:auto;display:block;overflow:visible}
.chart text{font:400 8px 'IBM Plex Mono',monospace;fill:var(--faint)}
.chart .value{fill:var(--kalam);font-size:7px}
.chart .selected .value{fill:var(--today-num);font-weight:600}
.chart .bar{fill:var(--accent-fill);opacity:.75;cursor:pointer}
.chart .selected .bar{fill:var(--today-num);opacity:1}
.chart .line{fill:none;stroke:var(--accent-fill);stroke-width:2}
.chart .point{fill:var(--bg);stroke:var(--kalam);stroke-width:2;cursor:pointer}
.chart .selected .point{fill:var(--today-num);stroke:var(--today-num)}
.chart-readout{font:400 13px 'IBM Plex Mono',monospace;color:var(--kalam);padding:6px 0 0}
.field-notes{border:1px solid var(--note-bd);border-radius:6px;background:var(--note-bg);margin-top:4px}
.field-toggle{width:100%;border:none;background:transparent;padding:11px 14px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;text-align:left;font:italic 400 14px Newsreader;color:var(--muted)}
.field-body{padding:2px 14px 14px;display:flex;flex-direction:column;gap:12px}
.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.field-value{font:500 16px 'IBM Plex Mono',monospace;color:var(--ink);margin-top:2px}
.project-row{margin-top:6px}
.project-label{display:flex;justify-content:space-between;font:400 12px Newsreader;color:var(--muted)}
.project-bar{height:3px;background:var(--track);border-radius:2px;margin-top:3px;overflow:hidden}
.project-fill{height:100%;background:var(--accent-fill);opacity:.8}
.footer{font:400 12px Kalam,cursive;color:var(--faint);text-align:right;transform:rotate(-1deg);margin-top:2px}
.footer.mono{font:400 10px 'IBM Plex Mono',monospace;opacity:.7;transform:none}
.insights{display:flex;flex-direction:column;gap:12px}
.insights-header{display:flex;align-items:baseline;gap:8px}
.back{border:none;background:transparent;color:var(--muted);font:400 24px Newsreader;cursor:pointer;padding:0 8px 0 0}
.freshness{margin-left:auto;font:400 11px Kalam,cursive;color:var(--faint);white-space:nowrap}
.aged{color:var(--accent)}
.generation-status{display:inline-flex;align-items:baseline;gap:6px;flex-wrap:wrap}
.retry-link{border:none;background:transparent;padding:0;color:var(--accent);font:italic 400 12px Newsreader,serif;text-decoration:underline;cursor:pointer}
.loading{padding:20px 0;display:flex;flex-direction:column;gap:12px}
.skeleton{height:12px;background:var(--track);border-radius:3px}
.insight-card{border:1px solid var(--note-bd);border-radius:6px;background:var(--note-bg);padding:12px 14px;display:flex;flex-direction:column;gap:9px}
.insight-card.suggestion{background:var(--chip-bg)}
.insight-card.alert,.insight-card.ops_alert{border-left:3px solid var(--accent)}
.card-type{font:500 10px 'IBM Plex Mono',monospace;color:var(--faint);letter-spacing:.14em}
.card-type.alert,.ops_alert .card-type{color:var(--accent)}
.card-headline{border:none;background:transparent;padding:0;text-align:left;cursor:pointer;font:400 20px 'Instrument Serif',serif;color:var(--ink)}
.suggestion .card-headline{color:var(--chip-fg);text-decoration:underline wavy var(--kalam);text-decoration-thickness:1px;text-underline-offset:4px}
.card-narrative{font:400 14px/1.5 Newsreader,serif;color:var(--muted)}
.card-likelihood{font:500 13px 'IBM Plex Mono',monospace;color:var(--today-num)}
.card-actions{display:flex;justify-content:flex-end;align-items:center;gap:2px}
.vote{border:none;background:transparent;font-size:12px;opacity:.45;cursor:pointer;padding:2px 4px}
.vote:hover{opacity:1}
.feedback-form{display:flex;gap:6px}
.feedback-form .text-input{font-family:Kalam,cursive}
.watch-actions{display:flex;gap:14px;margin-right:auto}
.watch-actions button{border:none;background:transparent;padding:0;font:italic 400 12px Newsreader;color:var(--faint);cursor:pointer}
.today-reviews{margin-top:4px}
.today-review-list{margin-top:4px;border-top:1px solid var(--rule)}
.today-review-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:baseline;padding:8px 0;border-bottom:1px dotted var(--dot);font:400 13px 'IBM Plex Mono',monospace}
.today-review-project{min-width:0;overflow-wrap:anywhere;color:var(--muted)}
.today-review-time{color:var(--faint)}
.today-review-price{color:var(--today-num);text-align:right}
.empty{padding:18px 0;font:400 14px Kalam,cursive;color:var(--kalam);transform:rotate(-1deg)}
.pull{height:0;text-align:center;font:400 12px Kalam,cursive;color:var(--kalam);overflow:visible;transform:translateY(-6px)}
.status{font:400 12px Kalam,cursive;color:var(--kalam)}
@keyframes spin{to{transform:rotate(360deg)}}
.spinning{animation:spin 1s linear infinite}
@media (max-width:370px){.updated{display:none}.page{padding-left:14px;padding-right:14px}.goal-form{grid-template-columns:1fr 1fr}.goal-form button{grid-column:1/-1}.icon-button{width:34px;height:34px}.table-row,.table-head{font-size:11px}}
@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
