@font-face{font-family:'Rye';src:url(fonts/rye-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Bevan';src:url(fonts/bevan-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Special Elite';src:url(fonts/special-elite-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Alegreya';font-weight:400;src:url(fonts/alegreya-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Alegreya';font-weight:500;src:url(fonts/alegreya-latin-500-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Alegreya';font-weight:700;src:url(fonts/alegreya-latin-700-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Alegreya';font-style:italic;font-weight:400;src:url(fonts/alegreya-latin-400-italic.woff2) format('woff2');font-display:swap}

:root{
  --green:#2F4A3A; --cran:#8E2B3A; --cream:#F4ECDC; --flour:#FBF8F0; --walnut:#2A1810; --brass:#D9A441; --kraft:#A89A7C;
  --bg:#F4ECDC; --surface:#FBF8F0; --surface2:#EADFC8; --ink:#2A1810; --ink-soft:#5B4632;
  --head:#2F4A3A; --rule:#2A1810; --accent:#8E2B3A; --accent-ink:#F4ECDC; --link:#2F4A3A; --green-ink:#2F4A3A; --danger:#8E2B3A;
  --f-display:'Rye',Georgia,serif; --f-head:'Bevan',Georgia,serif; --f-body:'Alegreya',Georgia,serif; --f-label:'Special Elite','Courier New',monospace;
  --shadow:3px 3px 0 var(--rule);
}
:root[data-theme=dark]{
  --bg:#17130F; --surface:#241C15; --surface2:#30251C; --ink:#F1E8D6; --ink-soft:#C9BBA0; --head:#E7C27A; --rule:#C9A25A;
  --accent:#D9694F; --accent-ink:#1F120B; --link:#E7C27A; --green-ink:#7FB08F; --danger:#E8836B; color-scheme:dark;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme=light]){
    --bg:#17130F; --surface:#241C15; --surface2:#30251C; --ink:#F1E8D6; --ink-soft:#C9BBA0; --head:#E7C27A; --rule:#C9A25A;
    --accent:#D9694F; --accent-ink:#1F120B; --link:#E7C27A; --green-ink:#7FB08F; --danger:#E8836B; color-scheme:dark;
  }
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:500 17px/1.45 var(--f-body);-webkit-tap-highlight-color:transparent;overflow-x:hidden}
body.sheet-open{overflow:hidden}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.07;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .35 0 0 0 0 .25 0 0 0 0 .15 0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
#app{position:relative;z-index:1;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}
.boot{padding:40px 20px;text-align:center;font-family:var(--f-label)}
h1,h2,h3,p{margin:0}
h1{font:400 clamp(26px,7vw,34px)/1.15 var(--f-display);color:var(--head);letter-spacing:0}
h2{font:400 21px/1.25 var(--f-head);color:var(--head)}
h3{font:400 18px/1.3 var(--f-head);color:var(--ink)}
a{color:var(--link);text-underline-offset:4px}
:focus-visible{outline:3px solid var(--brass);outline-offset:2px}
button,input,select,textarea{font:inherit;color:inherit}
.lbl,.chip,.stamp,.tag{font-family:var(--f-label);text-transform:uppercase;letter-spacing:.08em;font-size:13px}

/* top bar and nav */
.top{position:sticky;top:0;z-index:20;background:var(--green);color:var(--cream);padding:env(safe-area-inset-top) max(12px,env(safe-area-inset-left)) 0 max(12px,env(safe-area-inset-right));border-bottom:3px double var(--brass)}
.top-in{max-width:960px;margin:0 auto;height:56px;display:flex;align-items:center;gap:8px;justify-content:space-between}
.hol-btn{background:none;border:0;display:flex;align-items:center;gap:10px;min-height:48px;padding:0 4px;cursor:pointer;color:var(--cream);font:400 19px/1 var(--f-head)}
.hol-btn img{width:22px;height:29px;display:block}
.top .icon-btn{color:var(--cream)}
.icon-btn{background:none;border:0;min-width:48px;min-height:48px;font-size:22px;cursor:pointer;display:grid;place-items:center}
main{flex:1;width:100%;max-width:720px;margin:0 auto;padding:18px 16px calc(100px + env(safe-area-inset-bottom))}
.nav{position:fixed;left:0;right:0;bottom:0;z-index:20;background:var(--green);border-top:3px double var(--brass);padding-bottom:env(safe-area-inset-bottom)}
.nav-in{max-width:720px;margin:0 auto;display:grid;grid-template-columns:repeat(5,1fr);align-items:end}
.nav a{color:var(--cream);text-decoration:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:60px;font:400 12px/1.1 var(--f-label);text-transform:uppercase;letter-spacing:.06em;border-top:4px solid transparent}
.nav a svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.nav a[aria-current=page]{border-top-color:var(--brass);font-weight:700}
.nav a.add{margin-top:-18px;min-height:78px;border-top:0}
.nav a.add .plus{width:56px;height:56px;background:var(--accent);color:var(--accent-ink);border:2px solid var(--walnut);box-shadow:3px 3px 0 var(--walnut);display:grid;place-items:center;font:400 32px/1 var(--f-head)}
.foot{max-width:720px;margin:28px auto 0;display:flex;align-items:center;justify-content:center;gap:10px;color:var(--ink-soft);font:13px var(--f-label);text-transform:uppercase;letter-spacing:.08em}
.foot img{height:30px}

/* cards, rows, buttons */
.stack{display:grid;gap:14px}
.stack-lg{display:grid;gap:20px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row.end{justify-content:flex-end}
.row.between{justify-content:space-between}
.grow{flex:1;min-width:0}
.card{background:var(--surface);border:2px solid var(--rule);box-shadow:var(--shadow);padding:16px;position:relative}
.card.frame::after{content:"";position:absolute;inset:5px;border:1px solid currentColor;opacity:.55;pointer-events:none}
.card.dark{background:var(--green);color:var(--cream);border-color:var(--walnut)}
.card.dark h2,.card.dark h3{color:var(--cream)}
.card.soft{background:var(--surface2);box-shadow:none}
.card.warn{border-left:8px solid var(--cran)}
.card.info{border-left:8px solid var(--brass)}
.btn{font:400 17px/1.1 var(--f-head);min-height:52px;padding:12px 18px;border:2px solid var(--walnut);background:var(--surface);color:var(--ink);cursor:pointer;box-shadow:3px 3px 0 var(--walnut);display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;text-align:center}
.btn:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--walnut)}
.btn.primary{background:var(--accent);color:var(--accent-ink)}
.btn.green{background:var(--green);color:var(--cream)}
.btn.danger{background:var(--danger);color:var(--accent-ink)}
.btn.ghost{background:transparent;box-shadow:none;border-color:var(--rule)}
.btn.block{width:100%}
.btn.small{min-height:44px;padding:8px 12px;font-size:15px}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.field{display:grid;gap:5px}
.field .lbl{color:var(--ink-soft)}
.field .hint{font-size:15px;color:var(--ink-soft)}
input[type=text],input[type=number],input[type=url],input[type=date],select,textarea,input:not([type]){width:100%;min-height:48px;padding:10px 12px;background:var(--surface);border:2px solid var(--rule);border-radius:0;font-size:17px;-webkit-appearance:none;appearance:none}
select{background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);background-position:calc(100% - 20px) 55%,calc(100% - 14px) 55%;background-size:6px 6px;background-repeat:no-repeat;padding-right:36px}
textarea{min-height:84px;resize:vertical}
input[type=checkbox]{width:24px;height:24px;accent-color:var(--green)}
.switch{display:flex;gap:10px;align-items:center;min-height:48px}
.err{color:var(--danger);font-weight:700}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* chips, stamps */
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{min-height:44px;padding:8px 12px;border:2px solid var(--rule);background:transparent;cursor:pointer}
.chip[aria-pressed=true],.chip.on{background:var(--green);color:var(--cream);border-color:var(--walnut)}
.stamp{display:inline-block;padding:4px 8px;border:2px solid var(--rule);cursor:pointer;background:transparent;line-height:1.1;min-height:32px}
.stamp.st-bought{background:var(--green);color:var(--cream);border-color:var(--walnut)}
.stamp.st-wrapped{background:var(--brass);color:var(--walnut);border-color:var(--walnut)}
.stamp.st-delivered{background:var(--cran);color:var(--cream);border-color:var(--walnut)}
:root[data-theme=dark] .stamp.st-delivered,:root[data-theme=dark] .btn.primary{border-color:#1F120B}
.tag{color:var(--ink-soft)}
.divider{display:flex;align-items:center;gap:10px;color:var(--rule);margin:6px 0}
.divider::before,.divider::after{content:"";flex:1;border-top:3px double var(--rule)}

/* home */
.hello{margin-bottom:4px}
.count{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.count .num{font:400 clamp(64px,22vw,96px)/1 var(--f-display);color:var(--brass)}
.count .what{font:400 20px/1.2 var(--f-head);color:var(--cream)}
.count .date{width:100%;font:14px var(--f-label);text-transform:uppercase;letter-spacing:.08em;color:var(--cream)}
.bar{height:26px;border:2px solid var(--rule);background:var(--surface2);display:flex;overflow:hidden}
.bar>i{display:block;height:100%}
.meter{height:22px;border:2px solid var(--rule);background:var(--surface2);position:relative}
.meter>i{display:block;height:100%;background:var(--green)}
.meter.over>i{background:var(--cran)}
.meter.mini{height:14px}
.big-num{font:400 28px/1.1 var(--f-head);color:var(--ink)}
.sub{color:var(--ink-soft);font-size:16px}
.legend{display:grid;gap:6px;margin:10px 0 0;padding:0}
.legend li{list-style:none;display:flex;align-items:center;gap:8px}
.sw{width:16px;height:16px;border:1.5px solid var(--rule);flex:none}
.legend .amt{margin-left:auto;font-weight:700}
.quick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.quick .btn{flex-direction:column;min-height:72px;font-size:15px;padding:8px}
.quick .btn span.ic{font-size:24px}
.svg-big{font:400 26px var(--f-head);fill:var(--ink)} .svg-sub{font:13px var(--f-label);fill:var(--ink-soft);text-transform:uppercase}
.svg-ring{font:400 19px var(--f-head);fill:var(--ink)}
.center{display:grid;place-items:center}

/* lists */
.list{display:grid;gap:10px;margin:0;padding:0;list-style:none}
.item{display:flex;gap:12px;align-items:center;background:var(--surface);border:2px solid var(--rule);padding:10px;min-height:68px;text-align:left;width:100%;cursor:pointer}
.item .thumb{width:52px;height:52px;border:1.5px solid var(--rule);background:var(--surface2);flex:none;display:grid;place-items:center;font-size:24px;overflow:hidden}
.item .thumb img{width:100%;height:100%;object-fit:cover;display:block}
.item .ttl{font:400 18px/1.2 var(--f-head);overflow-wrap:anywhere}
.item .meta{color:var(--ink-soft);font-size:15px}
.item .price{font:400 17px var(--f-head);white-space:nowrap}
.person-card{display:grid;gap:8px}
.avatar{width:52px;height:52px;border:2px solid var(--rule);background:var(--surface2);display:grid;place-items:center;font-size:28px;flex:none}
.seg{display:grid;grid-template-columns:1fr 1fr;border:2px solid var(--rule)}
.seg button{min-height:48px;background:transparent;border:0;font:400 16px var(--f-head);cursor:pointer}
.seg button[aria-pressed=true]{background:var(--green);color:var(--cream)}
.task{display:flex;align-items:center;gap:6px;background:var(--surface);border:2px solid var(--rule);min-height:60px}
.task .cb{min-width:56px;min-height:56px;background:none;border:0;cursor:pointer;display:grid;place-items:center}
.task .box{width:28px;height:28px;border:2px solid var(--rule);display:grid;place-items:center;font-size:20px;background:var(--surface)}
.task[data-done=true] .t{text-decoration:line-through;color:var(--ink-soft)}
.task[data-done=true] .box{background:var(--green);color:var(--cream)}
.task .t{flex:1;padding:8px 0;overflow-wrap:anywhere}
.task .due{font:13px var(--f-label);text-transform:uppercase;color:var(--ink-soft);white-space:nowrap}
.task .due.late{color:var(--danger);font-weight:700}
.empty{text-align:center;padding:28px 12px;display:grid;gap:12px;justify-items:center}
.empty img{width:84px;opacity:.9}

/* sheets, toast */
.backdrop{position:fixed;inset:0;background:rgba(20,12,6,.55);z-index:40}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:41;background:var(--bg);border-top:3px double var(--rule);max-height:92vh;max-height:92dvh;overflow:auto;padding-bottom:env(safe-area-inset-bottom);max-width:720px;margin:0 auto;animation:up .18s ease-out}
.sheet-head{position:sticky;top:0;background:var(--bg);display:flex;align-items:center;justify-content:space-between;padding:6px 8px 6px 16px;border-bottom:2px solid var(--rule);z-index:1}
.sheet-title{font:400 20px var(--f-head);color:var(--head)}
.sheet-body{padding:16px 16px 22px;display:grid;gap:14px}
@keyframes up{from{transform:translateY(24px);opacity:.4}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.sheet{animation:none}*{scroll-behavior:auto!important}}
.toast{position:fixed;left:12px;right:12px;bottom:calc(88px + env(safe-area-inset-bottom));max-width:560px;margin:0 auto;z-index:60;background:var(--walnut);color:var(--cream);border:2px solid var(--brass);padding:12px 14px;display:flex;gap:12px;align-items:center;justify-content:space-between}
.toast-btn{background:var(--brass);color:var(--walnut);border:0;font:400 15px var(--f-head);min-height:44px;padding:8px 14px;cursor:pointer}
.photo-box{border:2px dashed var(--rule);padding:10px;display:grid;gap:10px;justify-items:start}
.photo-box img{max-width:100%;max-height:260px;border:2px solid var(--rule)}
.choice{display:grid;gap:10px}
.choice .btn{justify-content:flex-start;min-height:60px;font-size:18px}
.avatar-pick{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.avatar-pick button{min-height:44px;font-size:24px;background:var(--surface);border:2px solid var(--rule);cursor:pointer}
.avatar-pick button[aria-pressed=true]{background:var(--green);border-color:var(--walnut)}
.welcome{max-width:560px;margin:0 auto;padding:max(24px,env(safe-area-inset-top)) 20px 30px;display:grid;gap:18px}
.dots{display:flex;gap:8px;justify-content:center}.dots i{width:12px;height:12px;border:2px solid var(--rule);background:transparent}.dots i.on{background:var(--green)}
.big-link{display:block;word-break:break-all}
@media (min-width:960px){
  main{max-width:960px}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}
  .nav-in{max-width:960px}.sheet{max-width:560px;left:auto;right:24px;bottom:24px;max-height:86vh;border:2px solid var(--rule);box-shadow:var(--shadow)}
}

:root[data-theme=dark] .btn{border-color:var(--rule);box-shadow:3px 3px 0 var(--rule)}
:root[data-theme=dark] .btn.primary,:root[data-theme=dark] .btn.danger{border-color:#1F120B;box-shadow:3px 3px 0 #1F120B}
@media (prefers-color-scheme:dark){
  :root:not([data-theme=light]) .btn{border-color:var(--rule);box-shadow:3px 3px 0 var(--rule)}
  :root:not([data-theme=light]) .btn.primary,:root:not([data-theme=light]) .btn.danger{border-color:#1F120B;box-shadow:3px 3px 0 #1F120B}
  :root:not([data-theme=light]) .btn.ghost{box-shadow:none}
}
.btn.ghost{box-shadow:none!important}
.task .t{min-height:48px;display:flex;align-items:center}
@media (pointer:coarse){.stamp{min-height:44px;padding:8px 10px}.btn.small{min-height:48px}}
