/* 算了 · Apple / Liquid Glass layer.
   Loaded after styles.css, finance-room.css and goal-room.css: it re-skins shared components with
   iOS system tokens instead of rewriting every page. One interactive colour (system blue), grouped
   white cards on a grey canvas, frosted floating chrome, spring motion. No gradients on chrome. */
:root{
 color-scheme:light;
 --bg:#f2f2f7;--paper:#fff;--ink:#1c1c1e;--muted:#8a8a8e;--line:rgba(60,60,67,.13);
 --action:#007aff;--action-press:#0062cc;--action-soft:rgba(0,122,255,.11);
 --green:var(--action); /* legacy token: everything that used the old green now uses the one interactive colour */
 --income:#248a3d;--expense:#d70015;--warn:#c35a00;
 --fill:rgba(118,118,128,.12);--fill-soft:rgba(118,118,128,.07);
 --glass:rgba(255,255,255,.72);--glass-strong:rgba(255,255,255,.86);
 --glass-edge:inset 0 0 0 .5px rgba(255,255,255,.7),0 0 0 .5px rgba(0,0,0,.05);
 --float-shadow:0 10px 30px rgba(0,0,0,.08),0 1px 3px rgba(0,0,0,.05);
 --radius:20px;--radius-sm:12px;
 --spring:cubic-bezier(.32,.72,0,1);--snap:cubic-bezier(.2,.9,.25,1.15);--ease:cubic-bezier(.25,.1,.25,1);
 --font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;
}
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--font);letter-spacing:-.01em}
h1,h2,h3{letter-spacing:-.022em;font-weight:700}
h2{font-weight:650}
a{color:var(--action)}
.muted{color:var(--muted)}
.income{color:var(--income)!important}.expense{color:var(--expense)!important}
.eyebrow{letter-spacing:.06em;color:var(--muted)}
::selection{background:var(--action-soft)}

/* ---------- Motion primitives ---------- */
button,a,.card,.category-card,.transaction-row,.settings-row,.entry-category,.key{transition:transform .32s var(--spring),background-color .2s var(--ease),color .2s var(--ease),box-shadow .25s var(--ease),opacity .2s}
button:active:not(:disabled),a:active,.settings-row:active{transform:scale(.97)}
.key:active:not(:disabled){transform:scale(.93);background:#e5e5ea}
.transaction-row:active{background:var(--fill-soft)}
button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid rgba(0,122,255,.45);outline-offset:3px}
input:focus,textarea:focus,select:focus{outline:none;box-shadow:0 0 0 3px rgba(0,122,255,.28)}

/* Page changes slide like a navigation push; month changes slide sideways. Only #content moves. */
#content{view-transition-name:page}
::view-transition-old(root),::view-transition-new(root){animation:none}
::view-transition-old(page){animation:vt-out .22s var(--ease) both}
::view-transition-new(page){animation:vt-in-forward .48s var(--spring) both}
html[data-nav=back]::view-transition-new(page){animation-name:vt-in-back}
html[data-nav=next]::view-transition-new(page){animation-name:vt-in-next}
html[data-nav=prev]::view-transition-new(page){animation-name:vt-in-prev}
html[data-nav=next]::view-transition-old(page){animation:vt-out-next .26s var(--ease) both}
html[data-nav=prev]::view-transition-old(page){animation:vt-out-prev .26s var(--ease) both}
@keyframes vt-out{to{opacity:0;transform:scale(.985)}}
@keyframes vt-in-forward{from{opacity:0;transform:translateX(26px)}}
@keyframes vt-in-back{from{opacity:0;transform:translateX(-26px)}}
@keyframes vt-in-next{from{opacity:0;transform:translateX(44px)}}
@keyframes vt-in-prev{from{opacity:0;transform:translateX(-44px)}}
@keyframes vt-out-next{to{opacity:0;transform:translateX(-30px)}}
@keyframes vt-out-prev{to{opacity:0;transform:translateX(30px)}}
@keyframes rise-in{from{opacity:0;transform:translateY(10px)}}
#content.page-enter>*{animation:rise-in .5s var(--spring) both}
#content.page-enter>*:nth-child(2){animation-delay:.03s}#content.page-enter>*:nth-child(3){animation-delay:.06s}#content.page-enter>*:nth-child(4){animation-delay:.09s}

/* ---------- Buttons ---------- */
.primary,.secondary,.text-button,.round-button,.icon-button{border-radius:999px;font-weight:600}
.primary{background:var(--action);color:#fff}
.primary:hover{background:var(--action-press)}
.primary.danger{background:var(--expense)}
.secondary{background:var(--fill);color:var(--action)}
.secondary:hover{background:rgba(118,118,128,.18)}
.text-button{color:var(--action)}
.danger{color:var(--expense)}
.round-button{background:var(--action)}
.icon-button,.glass-circle{display:inline-grid;place-items:center;width:40px;height:40px;min-width:40px;min-height:40px;padding:0;border-radius:50%;background:var(--glass);color:var(--ink);box-shadow:var(--glass-edge),var(--float-shadow);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%)}
.glass-circle .icon,.icon-button .icon{width:20px;height:20px}
.glass-circle:disabled{opacity:.35}
.glass-circle.primary-circle{background:var(--action);color:#fff}
.add-row{background:var(--paper);color:var(--action);border-radius:var(--radius-sm)}

/* ---------- Inputs and segmented controls ---------- */
input,select,textarea{border:0;background:var(--fill-soft);border-radius:var(--radius-sm);color:var(--ink)}
input::placeholder,textarea::placeholder{color:#a1a1a6}
input[type=checkbox]{accent-color:var(--action)}
.segments,.period-segments,.type-filters,.entry-tabs{display:flex;gap:0;padding:2px;background:var(--fill);border-radius:10px;width:max-content;max-width:100%}
.segments button,.period-segments button,.type-filters button,.entry-tabs button{min-height:32px;padding:6px 16px;border-radius:8px;color:var(--ink);font-size:13px;font-weight:500;box-shadow:none;background:transparent}
.segments button.active,.period-segments button.active,.type-filters button.active,.entry-tabs button.active{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 3px 8px rgba(0,0,0,.12),0 3px 1px rgba(0,0,0,.04)}
.finance-segments button.primary{background:#fff;color:var(--ink);box-shadow:0 3px 8px rgba(0,0,0,.1)}
.finance-segments button.secondary{background:transparent;color:var(--ink)}
.finance-segments{background:var(--fill);padding:2px;border-radius:10px;gap:0}
.search-input,.finance-search{background:var(--fill-soft);border-radius:10px}
progress::-webkit-progress-value{background:var(--action)}progress::-moz-progress-bar{background:var(--action)}
.ring-fill{stroke:var(--action)}.ring-track{stroke:#e5e5ea}

/* ---------- Cards and lists ---------- */
.card{background:var(--paper);border:0;border-radius:var(--radius);box-shadow:none}
.section-title>a,.section-title>span{color:var(--muted)}
.section-title>a{color:var(--action)}
.empty>.icon{color:#c7c7cc}.empty h3{color:var(--ink)}
.transaction-row{position:relative;padding:12px 2px;border-bottom:0;border-radius:12px}
.transaction-row+.transaction-row::before{content:"";position:absolute;left:52px;right:0;top:0;height:.5px;background:var(--line)}
.transaction-row:hover{background:transparent}
.day-label{border-bottom:0;color:var(--muted);font-weight:600;font-size:13px;padding:14px 2px 4px}
.row-main strong{font-weight:600}
.row-tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;background:rgba(255,149,0,.14);color:var(--warn);font-size:11px;font-weight:600;vertical-align:1px}
.row-original{display:block;color:var(--muted);font-weight:500;font-size:11px}
.row-amount{font-weight:600}
.category-icon{color:#fff}
.emoji-icon{background:var(--tone,#f2f2f7);font-size:19px;line-height:1;color:initial}
.flow-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;margin:4px 0 8px;padding:12px;border-radius:14px;background:var(--fill-soft)}
.flow-summary span{display:grid;gap:2px;min-width:0;text-align:center}
.flow-summary small{color:var(--muted);font-size:11px}
.flow-summary strong{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pagination{border-top:.5px solid var(--line)}
.masked{transition:filter .25s var(--ease)}
body.hide-amounts .masked{filter:blur(7px);user-select:none}

/* ---------- Chrome: top bar, sidebar, tab bar ---------- */
.topbar{border-bottom:0;background:transparent;transition:background-color .25s var(--ease),box-shadow .25s var(--ease)}
.topbar.scrolled{background:rgba(242,242,247,.78);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);box-shadow:0 .5px 0 var(--line)}
.book-name{background:var(--glass);border-radius:999px;padding:4px 14px 4px 5px;box-shadow:var(--glass-edge),var(--float-shadow);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.book-name:hover{background:var(--glass-strong)}
.book-mark{width:30px;height:30px;border-radius:50%;border:0;background:var(--action);color:#fff;font-family:inherit;font-size:14px}
.header-tools{gap:10px}
.avatar{width:40px;height:40px;min-width:40px;min-height:40px;border:0;background:var(--glass);color:var(--ink);box-shadow:var(--glass-edge),var(--float-shadow);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.month-control{background:var(--glass);border:0;border-radius:999px;padding:2px 4px;box-shadow:var(--glass-edge),var(--float-shadow);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.month-control button{border-radius:50%}
.period-label{position:relative;display:flex;align-items:center;justify-content:center;min-width:112px;padding:0 4px;font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;cursor:pointer}
.period-label input{position:absolute;inset:0;width:100%!important;opacity:0;cursor:pointer}
.sidebar{background:rgba(255,255,255,.6);border-right:.5px solid var(--line);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.brand-mark{background:var(--action);border-radius:12px}
#desktop-nav a{color:var(--ink);border-radius:12px}
#desktop-nav a .icon{color:var(--action)}
#desktop-nav a.active{background:var(--action-soft);color:var(--action)}
#desktop-nav a:hover{background:var(--fill-soft)}

/* ---------- Large titles ---------- */
.large-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:2px 0 14px}
.large-title h1{font-size:34px;line-height:1.15;letter-spacing:-.03em;font-weight:750;min-width:0;overflow-wrap:anywhere}

/* ---------- Home ---------- */
.monthly-strip{border:0;border-radius:var(--radius);background:var(--paper)}
.monthly-strip>.metric,.home-month-picker{border-left:.5px solid var(--line)}
.home-month-picker{border-left:0}
.home-month-picker .month-emphasis{font-weight:700;color:var(--action)}
.advance-strip{display:flex;align-items:center;gap:10px;width:100%;margin-top:10px;padding:13px 16px;border-radius:16px;background:var(--paper);text-align:left;font-size:14px}
.advance-strip>span{flex:1}.advance-strip strong{color:var(--warn)}.advance-strip .icon{width:16px;color:#c7c7cc}
.category-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.category-card{background:var(--paper);border-radius:18px;min-height:0;padding:14px 6px 12px;gap:2px}
.category-card:hover{transform:translateY(-2px);filter:none}
.category-card>span:first-child{order:2;font-size:13px;font-weight:500;color:var(--ink)}
.category-card .category-icon{order:1;width:46px;height:46px;margin:0 0 6px;font-size:24px}
.category-card>strong{order:3;font-size:12px;font-weight:500;color:var(--muted)}
.category-settings-card{border:0;background:var(--paper)}
.category-settings-card .category-icon{background:var(--fill);color:var(--muted)}
.category-settings-card .category-icon .icon{color:var(--muted)}
.ai-invite{background:var(--paper);border-radius:var(--radius)}
.ai-invite form{background:var(--fill-soft);border:0;border-radius:16px}
.bookkeeping-voice,.bookkeeping-send{background:var(--action)}
.bookkeeping-receipt{background:var(--fill-soft);border:0}
.goal-entry{background:var(--paper);border:0;border-radius:var(--radius)}
.guidance-banner{border:0;border-radius:var(--radius)}

/* ---------- Ledger ---------- */
.calendar-day{background:transparent;border-radius:12px}
.calendar-day:hover{background:var(--fill-soft)}
.calendar-day.selected{background:var(--action-soft);box-shadow:none}
.calendar-day.selected strong{color:var(--action)}
.calendar-day.today strong{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--action);color:#fff}
.year-month{border:0;background:var(--paper)}
.day-stepper{display:flex;align-items:center;gap:10px}
.day-stepper>div{display:grid;gap:2px;min-width:72px;text-align:center}
.day-overview{grid-template-columns:auto 1fr 1fr}
.donut-segment.color-0{--chart:#007aff}.color-0{--chart:#007aff}.color-1{--chart:#34c759}.color-2{--chart:#ff9500}.color-3{--chart:#ff2d55}.color-4{--chart:#5ac8fa}.color-5{--chart:#af52de}
.trend{color:var(--action)}

/* ---------- My page: iOS Settings groups ---------- */
.my-page{color:var(--ink)}
.my-entry{border:0;border-radius:var(--radius);padding:16px;margin-bottom:22px}
.my-profile{background:var(--paper)}
.my-avatar{flex-basis:56px;height:56px;border-radius:50%;background:var(--action);color:#fff;font-size:24px}
.my-entry-copy strong{font-size:19px}.my-entry-copy small{font-size:13px;color:var(--muted)}
.settings-group{background:var(--paper);border-radius:var(--radius);overflow:hidden;margin:0 0 22px}
.settings-row{position:relative;display:flex;align-items:center;gap:12px;width:100%;min-height:50px;padding:10px 16px;background:transparent;color:var(--ink);text-align:left;font-size:16px;text-decoration:none;border-radius:0}
.settings-row+.settings-row::before{content:"";position:absolute;left:56px;right:0;top:0;height:.5px;background:var(--line)}
.settings-row:hover{background:var(--fill-soft)}
.settings-glyph{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--fill-soft);font-size:17px;flex:none}
.settings-label{flex:1;min-width:0}
.settings-row small{color:var(--muted);font-size:14px}
.settings-row>.icon{width:15px;color:#c7c7cc}
.settings-row.soon{cursor:default;opacity:.55}
.settings-row.soon:active{transform:none}
.danger-row{justify-content:center;color:var(--expense);font-weight:500}

/* ---------- Reimbursement ---------- */
.reimburse-page{max-width:760px;margin:0 auto;padding-bottom:120px}
.reimburse-hero{display:grid;gap:4px;margin-bottom:14px}
.reimburse-hero small{color:var(--muted)}.reimburse-hero strong{font-size:30px;letter-spacing:-.02em}
.reimburse-page .type-filters{margin:0 0 14px}
.reimburse-group{margin-bottom:12px;padding:6px 16px}
.reimburse-head,.reimburse-item{display:flex;align-items:center;gap:12px;padding:12px 0}
.reimburse-head>div,.reimburse-item>span{flex:1;min-width:0;display:grid;gap:2px}
.reimburse-head small,.reimburse-item small{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.reimburse-item{border-top:.5px solid var(--line);padding-left:4px}
.reimburse-head b{font-size:16px}
.check-circle{display:grid;place-items:center;width:26px;height:26px;min-height:26px;padding:0;border-radius:50%;border:1.5px solid #c7c7cc;background:#fff;color:#fff;font-size:14px;font-weight:700}
.check-circle.small{width:22px;height:22px;min-height:22px}
.check-circle.on{background:var(--action);border-color:var(--action);animation:pop .35s var(--snap)}
@keyframes pop{50%{transform:scale(1.15)}}
.reimburse-bar{position:sticky;bottom:calc(92px + env(safe-area-inset-bottom));margin-top:16px}

/* ---------- Finance room accents ---------- */
.finance-room{color:var(--ink)}
.finance-hero{background:var(--paper);color:var(--ink);border-radius:var(--radius)}
.finance-hero small{color:var(--muted)}
.finance-hero>svg{color:var(--action);opacity:.12}
.finance-account-hero{color:#fff;background:#1c1c1e}
.finance-account-hero small,.finance-account-hero>span{color:rgba(255,255,255,.8)}
.finance-account-hero.type-bank{background:#1d5e3a}
.finance-account-hero.type-cash{background:#8a6512}
.finance-account-hero.type-e_wallet{background:#0f6b6b}
.finance-account-hero.type-credit_card{background:#2b2f5e}
.finance-account-hero.type-securities,.finance-account-hero.type-fund{background:#7a3410}
.finance-panel h2>svg,.finance-panel:nth-child(2) h2>svg,.finance-panel:nth-child(4) h2>svg{background:var(--action-soft);color:var(--action)}
.finance-row{border-bottom:.5px solid var(--line)}
.finance-account-row button{border-bottom:.5px solid var(--line)}
.finance-account-icon{background:var(--fill-soft);border-radius:10px;color:var(--action)}
.finance-health strong{color:var(--ink)}
.finance-history .finance-row{display:grid;grid-template-columns:minmax(0,1fr) auto 28px;gap:8px}
.finance-history .finance-row>strong{text-align:right}
.row-chevron{display:grid;place-items:center;width:28px;height:28px;min-height:28px;padding:0;color:#c7c7cc;border-radius:50%}
.row-chevron .icon{width:15px}
.balance-after{display:block;font-size:11px;color:var(--muted);font-weight:400;text-align:right}
.month-strip{display:flex;gap:6px;overflow-x:auto;padding:2px 0 10px;scrollbar-width:none}
.month-strip::-webkit-scrollbar{display:none}
.month-strip button{flex:none;min-width:48px;min-height:34px;padding:6px 10px;border-radius:999px;background:var(--fill-soft);font-size:13px;color:var(--ink)}
.month-strip button.active{background:var(--action);color:#fff;font-weight:600}
.account-month{margin-top:14px}

/* ---------- Dialogs: sheets with spring entry and slide-down exit ---------- */
dialog{border-radius:24px;padding:22px;background:#fff;box-shadow:0 30px 80px rgba(0,0,0,.2)}
dialog::backdrop{background:rgba(0,0,0,.28);-webkit-backdrop-filter:none;backdrop-filter:none}
dialog[open]{animation:dialog-in .45s var(--spring)}
dialog[open]::backdrop{animation:fade-in .3s var(--ease)}
dialog.closing{animation:dialog-out .23s var(--ease) forwards}
dialog.closing::backdrop{animation:fade-out .23s var(--ease) forwards}
@keyframes dialog-in{from{opacity:0;transform:translateY(18px) scale(.97)}}
@keyframes dialog-out{to{opacity:0;transform:translateY(14px) scale(.98)}}
@keyframes fade-in{from{opacity:0}}
@keyframes fade-out{to{opacity:0}}
.sheet-heading{margin-bottom:18px}
.sheet-heading h2{font-size:20px}
.optional-fields{background:var(--fill-soft)}
.toast{background:rgba(28,28,30,.88);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:999px;box-shadow:var(--float-shadow);animation:toast-in .45s var(--spring)}
@keyframes toast-in{from{opacity:0;transform:translate(-50%,12px) scale(.96)}}

/* ---------- 记一笔 sheet ---------- */
dialog.entry-dialog{padding:0;width:460px;max-height:min(92dvh,860px);overflow:hidden}
dialog.entry-dialog #sheet-body{height:100%}
.entry-sheet{display:flex;flex-direction:column;height:min(88dvh,820px)}
.entry-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 16px 8px}
.entry-tabs{flex:1;max-width:280px}
.entry-tabs button{flex:1}
.entry-scroll{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:8px 14px 14px}
.entry-categories{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px 4px}
.entry-category{display:flex;flex-direction:column;align-items:center;gap:5px;padding:6px 0;border-radius:14px;background:transparent;font-size:12px;color:var(--ink);min-width:0}
.entry-category>span:last-child{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.entry-emoji{display:grid;place-items:center;width:50px;height:50px;border-radius:50%;background:var(--fill-soft);font-size:27px;line-height:1;transition:transform .35s var(--snap),box-shadow .2s,background-color .2s}
.entry-category.selected .entry-emoji{background:var(--action-soft);box-shadow:0 0 0 2px var(--action);transform:scale(1.06)}
.entry-category.selected>span:last-child{color:var(--action);font-weight:600}
.entry-transfer{display:grid;gap:10px;padding:6px 2px}
.entry-transfer-row{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:16px;background:var(--fill-soft);font-weight:600}
.entry-transfer-row select{flex:1;background:transparent;font-size:16px;padding:6px 0}
.entry-swap{justify-self:center;width:38px;height:38px;border-radius:50%;background:var(--paper);box-shadow:var(--float-shadow);display:grid;place-items:center;color:var(--action);margin:-16px 0;position:relative;z-index:1}
.entry-swap .icon{transform:rotate(90deg);width:18px}
.entry-dock{background:#f7f7f9;border-top:.5px solid var(--line);padding:10px 12px max(12px,env(safe-area-inset-bottom))}
.entry-chips{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 8px;scrollbar-width:none}
.entry-chips::-webkit-scrollbar{display:none}
.entry-chip{position:relative;flex:none;display:inline-flex;align-items:center;min-height:32px;padding:5px 12px;border-radius:999px;background:#fff;box-shadow:0 0 0 .5px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);font-size:13px;color:var(--ink);cursor:pointer}
.entry-chip-text{white-space:nowrap;max-width:150px;overflow:hidden;text-overflow:ellipsis}
.entry-chip-select{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0;margin:0;font-size:16px}
.entry-reimburse{display:grid;gap:4px;margin:0 2px 8px}
.entry-reimburse input{background:#fff;padding:10px 12px}
.entry-reimburse small{color:var(--muted);font-size:11px}
.entry-line{display:flex;align-items:center;gap:10px;padding:2px 4px 8px}
.entry-line>input{flex:1;min-width:0;background:transparent;padding:8px 0;font-size:15px}
.entry-amount-wrap{display:grid;justify-items:end;min-width:0}
.entry-category-label{font-size:12px;color:var(--muted);white-space:nowrap}
.entry-amount{font-size:30px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;max-width:62vw;overflow:hidden;text-overflow:ellipsis;text-align:right}
.entry-fx{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:-2px 4px 8px;font-size:12px;color:var(--muted)}
.entry-fx .text-button{min-height:28px;padding:2px 4px;font-size:12px}
.entry-fx-input{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink)}
.entry-fx-input input{width:110px;padding:6px 8px;background:#fff}
.entry-sheet .form-error{margin:0 4px 6px}
.keypad{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}
.key{min-height:50px;border-radius:12px;background:#fff;font-size:22px;font-weight:500;color:var(--ink);box-shadow:0 1px 0 rgba(0,0,0,.08);font-variant-numeric:tabular-nums}
.key-op{background:#e9e9ee;font-size:24px}
.key-clear{color:var(--expense)}
.key-save-next{background:var(--action-soft);color:var(--action);font-size:16px;font-weight:600}
.key-save{background:var(--action);color:#fff;font-size:17px;font-weight:600}
.key-save:active:not(:disabled){background:var(--action-press)}

/* ---------- Mobile ---------- */
@media(max-width:760px){
 body{background:var(--bg)}
 /* The floating tab bar covers the bottom of the screen: every page ends above it, so its last buttons stay tappable. */
 #content{padding-bottom:calc(100px + env(safe-area-inset-bottom))}
 .page-foot,.decision-landing,.reimburse-page{padding-bottom:0}.budget-settings{margin-bottom:0}
 .workspace{padding:0 16px;transition:transform .5s var(--spring),border-radius .5s var(--spring),filter .5s var(--spring)}
 body.sheet-open .workspace{transform:scale(.94);transform-origin:50% var(--sheet-origin,30vh);border-radius:22px;filter:brightness(.94);overflow:hidden}
 .topbar{height:60px;margin:0 -16px 6px;padding:0 16px;grid-template-columns:minmax(0,1fr) auto minmax(0,auto)}
 #book-title{max-width:96px}
 .topbar-month .month-control input{width:100%}
 .period-label{min-width:88px;font-size:13px}
 .large-title h1{font-size:32px}
 .bottom-nav{bottom:max(10px,env(safe-area-inset-bottom));width:calc(100% - 24px);max-width:460px;padding:6px;border:0;border-radius:999px;background:rgba(255,255,255,.72);box-shadow:0 12px 40px rgba(0,0,0,.12),var(--glass-edge);-webkit-backdrop-filter:blur(28px) saturate(190%);backdrop-filter:blur(28px) saturate(190%)}
 .bottom-nav a{border-radius:999px;color:#5c5c61;font-size:10px;min-height:50px;transition:background-color .3s var(--spring),color .2s}
 .bottom-nav a.active{background:rgba(118,118,128,.14);color:var(--action);font-weight:600}
 .bottom-nav a.ai-nav .icon{color:#fff;background:var(--action);border:4px solid rgba(255,255,255,.9);margin-top:-18px;box-shadow:0 6px 18px rgba(0,122,255,.35)}
 .bottom-nav a.ai-nav.active{color:var(--action);background:transparent}
 .monthly-strip{min-height:76px}
 .category-grid{gap:8px}
 .category-card{min-height:0;padding:12px 4px 10px;border-radius:16px}
 .category-card .category-icon{width:44px;height:44px;margin:0 0 5px;font-size:23px}
 .card{border-radius:18px}
 .ledger-content{padding:14px}
 .flow-summary strong{font-size:13px}
 dialog{width:100%;max-width:100%;margin:auto 0 var(--keyboard-offset,0px);border-radius:28px 28px 0 0;padding:14px 18px max(22px,env(safe-area-inset-bottom));box-shadow:0 -10px 50px rgba(0,0,0,.18)}
 dialog::before{content:"";display:block;width:36px;height:5px;border-radius:3px;background:#d1d1d6;margin:-4px auto 12px}
 dialog[open]{animation:sheet-up .52s var(--spring)}
 dialog.closing{animation:sheet-down .24s var(--ease) forwards}
 dialog.entry-dialog{width:100%;max-height:94dvh;padding:0}
 dialog.entry-dialog::before{position:absolute;left:50%;transform:translateX(-50%);top:6px;margin:0}
 .entry-sheet{height:min(90dvh,calc(var(--visual-height,100dvh) - 20px))}
 .entry-head{padding-top:20px}
 .toast{bottom:calc(92px + env(safe-area-inset-bottom))}
 .finance-hero{border-radius:22px}
}
@keyframes sheet-up{from{transform:translateY(100%)}}
@keyframes sheet-down{to{transform:translateY(100%)}}
@media(max-width:370px){
 .entry-categories{grid-template-columns:repeat(4,minmax(0,1fr))}
 .key{min-height:46px;font-size:20px}
 .entry-amount{font-size:26px}
 .large-title h1{font-size:28px}
 .category-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
/* ---------- AI decision officer: answer first, two-field purchase card ---------- */
.dr-quick,.dr-reused{background:var(--paper);border-radius:var(--radius);padding:20px;display:grid;gap:12px}
.dr-quick h2{font-size:22px;margin:0}.dr-quick p.muted{margin:-6px 0 2px}
.dr-quick label{display:grid;gap:6px;font-size:13px;color:var(--muted);font-weight:500}
.dr-quick input:not([type=radio]){min-height:44px;padding:10px 14px;font-size:17px;color:var(--ink)}
.dr-pay{width:100%}.dr-pay label{flex:1;display:block;position:relative;color:var(--ink);font-size:13px}
.dr-pay input{position:absolute;opacity:0;inset:0;margin:0}
.dr-pay span{display:block;text-align:center;padding:7px 0;border-radius:8px;transition:background-color .2s var(--ease),box-shadow .2s var(--ease)}
.dr-pay input:checked+span{background:#fff;font-weight:600;box-shadow:0 3px 8px rgba(0,0,0,.12),0 3px 1px rgba(0,0,0,.04)}
.dr-pay input:focus-visible+span{outline:2px solid var(--action);outline-offset:2px}
.dr-reused h3{font-size:15px;margin:0;color:var(--muted);font-weight:600}
.dr-reused-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;border-top:.5px solid var(--line)}
.dr-reused-row>span:last-child{text-align:right;display:grid}.dr-reused-row small{color:var(--muted);font-size:12px}
.dr-ask{color:var(--warn)!important}
.dr-fix{font-size:13px;margin:0;display:flex;gap:12px;align-items:center;color:var(--muted)}.dr-fix .text-button{padding:0;min-height:0;font-size:13px}
.dr-verdict h2{font-size:26px;line-height:1.25;margin:4px 0 14px}
.dr-verdict.tone-ok h2{color:var(--income)}.dr-verdict.tone-stop h2{color:var(--expense)}
.dr-verdict>p.muted{font-size:13px;margin:0}
.dr-assume{font-size:13px;color:var(--muted);margin:8px 0 0}
.dr-composer.dr-asking{box-shadow:inset 0 0 0 1.5px var(--action)}
/* Suggested answers read as a pick list; the free input below stays for anything else. */
.dr-choice-list{flex-direction:column;align-items:stretch}
.dr-choice-list .dr-choice{width:100%;min-height:44px;text-align:left;justify-content:flex-start;padding:10px 16px}
.dr-choice-list .text-button{align-self:flex-start}
.dr-examples{display:flex;flex-wrap:wrap;gap:6px}.dr-examples .text-button{background:var(--fill-soft);border-radius:999px;padding:6px 12px;font-size:13px}

.dr-top{list-style:none;margin:12px 0 0;padding:0}.dr-top li{display:flex;justify-content:space-between;padding:6px 0;border-top:.5px solid var(--line)}
.fx-note{font-size:12px;color:var(--muted);margin:6px 4px 0}
/* ---------- Quick goal: five plain fields ---------- */
.goal-quick{background:var(--paper);border-radius:var(--radius);padding:20px;display:grid;gap:12px}
.goal-quick h2{margin:0;font-size:22px}
.goal-quick label{display:grid;gap:6px;font-size:13px;color:var(--muted);font-weight:500}
.goal-quick label small{font-weight:400;color:#a1a1a6;margin-left:6px;display:inline}
.goal-quick input{min-height:44px;padding:10px 14px;font-size:17px;color:var(--ink)}
.goal-room>header~.primary{width:100%}
@media(prefers-reduced-motion:reduce){
 #content{view-transition-name:none}
 #content.page-enter>*,dialog[open],dialog.closing,.toast,.check-circle.on{animation:none!important}
 body.sheet-open .workspace{transform:none;filter:none}
 button:active:not(:disabled),a:active,.settings-row:active,.key:active:not(:disabled){transform:none}
}
