:root{
  --ground:#F6F5F1; --surface:#FFFFFF; --surface-2:#FBFAF7;
  --ink:#17211D; --muted:#5E6B64; --line:#E6E7E1;
  --primary:#12715A; --primary-ink:#fff; --primary-soft:#E4F1EB;
  --accent:#C9812A; --accent-soft:#F8ECD7;
  --pos:#157F52; --neg:#C24236;
  --shadow:0 1px 2px rgba(20,40,32,.05), 0 12px 30px -12px rgba(20,40,32,.16);
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --num:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
}
@media (prefers-color-scheme:dark){
  :root{
    --ground:#0E1512; --surface:#16211D; --surface-2:#121C18; --ink:#E9EFEB; --muted:#93A29B;
    --line:#25332E; --primary:#34C79E; --primary-ink:#06231C; --primary-soft:#123028;
    --accent:#E7A94D; --accent-soft:#2A2213; --pos:#35B877; --neg:#E0685B;
    --shadow:0 1px 2px rgba(0,0,0,.3), 0 16px 34px -14px rgba(0,0,0,.6);
  }
}
:root[data-theme="light"]{
  --ground:#F6F5F1; --surface:#FFFFFF; --surface-2:#FBFAF7; --ink:#17211D; --muted:#5E6B64;
  --line:#E6E7E1; --primary:#12715A; --primary-ink:#fff; --primary-soft:#E4F1EB;
  --accent:#C9812A; --accent-soft:#F8ECD7; --pos:#157F52; --neg:#C24236;
  --shadow:0 1px 2px rgba(20,40,32,.05), 0 12px 30px -12px rgba(20,40,32,.16);
}
:root[data-theme="dark"]{
  --ground:#0E1512; --surface:#16211D; --surface-2:#121C18; --ink:#E9EFEB; --muted:#93A29B;
  --line:#25332E; --primary:#34C79E; --primary-ink:#06231C; --primary-soft:#123028;
  --accent:#E7A94D; --accent-soft:#2A2213; --pos:#35B877; --neg:#E0685B;
  --shadow:0 1px 2px rgba(0,0,0,.3), 0 16px 34px -14px rgba(0,0,0,.6);
}

*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--ground);color:var(--ink);font-family:var(--sans);line-height:1.5;
  -webkit-font-smoothing:antialiased;overscroll-behavior-y:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
svg{display:block}

/* app shell: centered mobile column */
#app{max-width:480px;margin:0 auto;min-height:100%;display:flex;flex-direction:column;
  background:var(--ground);position:relative}
.appbar{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--line);
  padding:calc(env(safe-area-inset-top) + 10px) 16px 10px;display:flex;align-items:center;gap:10px}
.appbar .title{font-weight:800;font-size:1.12rem;letter-spacing:-.01em;flex:1}
.appbar .title small{display:block;color:var(--muted);font-weight:500;font-size:.72rem}
.appbar .back{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--surface-2);
  display:flex;align-items:center;justify-content:center;flex:0 0 34px}
.appbar .back svg{width:18px;height:18px}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--primary-soft);color:var(--primary);
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.9rem;border:0}

.content{flex:1;padding:14px 16px 96px;overflow-y:auto}

/* period selector */
.period{display:flex;justify-content:center;margin:2px 0 14px}
.period .chip{display:inline-flex;align-items:center;gap:.6rem;background:var(--surface);
  border:1px solid var(--line);border-radius:99px;padding:.3rem .5rem .3rem .8rem;font-size:.82rem;font-weight:700;
  box-shadow:var(--shadow)}
.period button{border:0;background:transparent;color:var(--muted);width:28px;height:28px;border-radius:50%;
  display:flex;align-items:center;justify-content:center}
.period button:hover{background:var(--surface-2);color:var(--ink)}
.period svg{width:15px;height:15px}

.card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:15px;margin-bottom:12px;
  box-shadow:var(--shadow)}
.card.flush{padding:6px 15px}
.hero-lbl{color:var(--muted);font-size:.8rem}
.hero-num{font-family:var(--num);font-variant-numeric:tabular-nums;font-weight:800;font-size:2.1rem;
  letter-spacing:-.03em;margin:.1rem 0 0}
.neg{color:var(--neg)} .pos{color:var(--pos)}

.barwrap{height:10px;background:var(--line);border-radius:99px;overflow:hidden;margin:.8rem 0 .4rem;display:flex}
.barwrap>i{height:100%;display:block}
.legend{display:flex;gap:.9rem;font-size:.7rem;color:var(--muted);flex-wrap:wrap}
.legend .dot{width:8px;height:8px;border-radius:2px;display:inline-block;margin-right:4px;vertical-align:middle}

.sectitle{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:700;
  margin:16px 2px 8px}

.rowitem{display:flex;align-items:center;gap:11px;padding:10px 0;border-bottom:1px solid var(--line)}
.rowitem:last-child{border-bottom:0}
.rowitem .ic{width:34px;height:34px;border-radius:11px;background:var(--primary-soft);color:var(--primary);
  display:flex;align-items:center;justify-content:center;flex:0 0 34px}
.rowitem .ic svg{width:18px;height:18px}
.rowitem .nm{flex:1;font-size:.9rem;font-weight:600;min-width:0}
.rowitem .nm small{display:block;color:var(--muted);font-weight:500;font-size:.74rem;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rowitem .vl{font-family:var(--num);font-variant-numeric:tabular-nums;font-weight:700;font-size:.9rem}

.alert{display:flex;gap:10px;align-items:flex-start;background:var(--accent-soft);
  border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:14px;padding:11px 13px;margin-bottom:10px}
.alert svg{width:18px;height:18px;color:var(--accent);flex:0 0 18px;margin-top:2px}
.alert p{margin:0;font-size:.8rem;line-height:1.45}
.alert b{font-weight:700}
.alert.invite{background:var(--primary-soft);border-color:color-mix(in srgb,var(--primary) 35%,transparent)}
.alert.invite svg{color:var(--primary)}
.inv-actions{display:flex;gap:8px}
.btn.sm{width:auto;padding:7px 16px;font-size:.82rem;border-radius:10px}

.empty{text-align:center;color:var(--muted);padding:34px 16px}
.empty svg{width:40px;height:40px;margin:0 auto 12px;color:var(--line)}
.empty b{color:var(--ink);display:block;font-size:1rem;margin-bottom:4px}
.empty p{margin:.2rem auto 0;font-size:.86rem;max-width:34ch}

/* buttons + fields */
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:13px;border-radius:14px;
  font-weight:700;font-size:.92rem;border:1px solid var(--line);background:var(--surface)}
.btn.primary{background:var(--primary);color:var(--primary-ink);border-color:transparent}
.btn.ghost{background:transparent}
.btn.danger{color:var(--neg)}
.btn svg{width:18px;height:18px}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.5}

.field{margin-bottom:12px}
.field label{display:block;font-size:.74rem;color:var(--muted);font-weight:600;margin-bottom:5px}
.inp{width:100%;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:12px}
.inp:focus{outline:2px solid var(--primary);outline-offset:1px}
.two{display:flex;gap:10px}.two>*{flex:1}

.seg{display:flex;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:3px;margin-bottom:14px}
.seg button{flex:1;padding:9px;border-radius:9px;font-size:.85rem;font-weight:700;color:var(--muted);border:0;background:transparent}
.seg button.on-neg{background:var(--neg);color:#fff}
.seg button.on-pos{background:var(--pos);color:#fff}
.bignum{font-family:var(--num);font-variant-numeric:tabular-nums;font-size:2rem;font-weight:800;text-align:center;
  letter-spacing:-.02em;padding:12px;border-radius:14px;background:var(--surface-2);border:1px solid var(--line)}
.suggest{display:inline-flex;align-items:center;gap:6px;background:var(--primary-soft);color:var(--primary);
  border-radius:99px;padding:4px 10px;font-size:.74rem;font-weight:700;margin-top:7px}
.suggest svg{width:13px;height:13px}

/* bottom nav + FAB */
.tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:480px;height:64px;
  background:var(--surface);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(5,1fr);
  align-items:center;padding-bottom:env(safe-area-inset-bottom);z-index:6}
.tab{display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--muted);font-size:.63rem;font-weight:600;
  background:transparent;border:0}
.tab svg{width:23px;height:23px}
.tab.on{color:var(--primary)}
.tab.hidden-slot{visibility:hidden}
.fab{position:fixed;bottom:calc(30px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);
  width:56px;height:56px;border-radius:50%;background:var(--primary);color:var(--primary-ink);border:0;
  display:flex;align-items:center;justify-content:center;z-index:7;
  box-shadow:0 10px 22px -6px color-mix(in srgb,var(--primary) 60%,transparent)}
.fab svg{width:27px;height:27px}

/* welcome / auth */
.welcome{flex:1;display:flex;flex-direction:column;padding:34px 26px calc(30px + env(safe-area-inset-bottom));
  background:radial-gradient(120% 70% at 50% 0%, var(--primary-soft) 0%, transparent 55%)}
.brandmark{width:60px;height:60px;border-radius:17px;background:var(--primary);color:var(--primary-ink);
  display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow)}
.brandmark svg{width:32px;height:32px}
.welcome h1{font-size:1.7rem;line-height:1.12;letter-spacing:-.02em;margin:24px 0 10px;font-weight:800;text-wrap:balance}
.welcome .sub{color:var(--muted);font-size:.95rem;margin:0;max-width:34ch}
.spacer{flex:1;min-height:24px}
.orline{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:.72rem;margin:16px 0 2px}
.orline::before,.orline::after{content:"";height:1px;background:var(--line);flex:1}
.social{display:flex;gap:10px;margin-top:10px}
.social .btn{margin:0}
.social2{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.social2 .btn{margin:0}
.social2 .gbtn{display:flex;justify-content:center;min-height:44px}
.social2 .gbtn>div{width:100%}
.switchline{text-align:center;color:var(--muted);font-size:.86rem;margin-top:16px}
.switchline a{color:var(--primary);font-weight:700}
.formcard{padding:8px 2px}

/* sheet (add) */
.sheet-backdrop{position:fixed;inset:0;background:rgba(10,20,16,.45);z-index:20;display:flex;align-items:flex-end;justify-content:center}
.sheet{width:100%;max-width:480px;background:var(--surface);border-radius:22px 22px 0 0;padding:10px 18px calc(22px + env(safe-area-inset-bottom));
  max-height:92vh;overflow-y:auto;box-shadow:var(--shadow)}
.sheet .grab{width:44px;height:5px;background:var(--line);border-radius:99px;margin:6px auto 12px}
.sheet h2{font-size:1.1rem;margin:0 0 12px}

/* toast */
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:86px;z-index:40;background:var(--ink);color:var(--ground);
  padding:.7rem 1.1rem;border-radius:12px;font-size:.86rem;max-width:88%;box-shadow:var(--shadow)}
.toast.err{background:var(--neg);color:#fff}
.hidden{display:none}

.tag{display:inline-block;font-size:.68rem;padding:.12rem .5rem;border-radius:99px;background:var(--primary-soft);
  color:var(--primary);font-weight:700}
.muted{color:var(--muted);font-size:.85rem}
@media (prefers-reduced-motion:no-preference){
  .card,.sheet,.rowitem{animation:rise .35s cubic-bezier(.2,.7,.2,1) both}
  @keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
}
