/*
 * Phoenix design system. One palette (Midnight Indigo), dark only.
 *
 * Color roles
 *   Blue  (--accent)  structure and progress: bars, milestones, nav active state, links, focus rings.
 *   Pink  (--pink)    "you, right now": capture button + FAB, inbox badges, items waiting on you,
 *                     Claude's guess pills, the flame, the year-clock gradient end, the review CTA.
 *                     Attention (feed alerts, validation) is --pink-soft behind --ink text, neutral wording.
 *   Errors, warnings and "behind" states get the pink-soft attention style only. No third hue is ever added.
 *
 * Tokens
 *   --bg page, --surface cards and lists, --surface-2 raised chips/pills/toasts, --line borders.
 *   --ink / --ink-2 / --ink-3 text, primary to quiet. --track is the empty part of a bar.
 *   --accent-ink / --pink-ink are the text colors on solid accent / pink fills.
 *   --accent-soft / --pink-soft are translucent tints; --glow / --pink-glow are shadows and soft borders.
 *
 * Contrast (WCAG AA, measured): --ink-3 text passes on --bg and --surface only (4.96 to 5.45).
 * On --surface-2 or --pink-soft use --ink or --ink-2. Pink text on --pink-soft needs --bg or --surface
 * underneath, never --surface-2. Form control borders use --ink-3 so they reach 3:1.
 *
 * Layout: sidebar at >= 760px, bottom nav below. Pages need <meta name="viewport"
 * content="width=device-width,initial-scale=1,viewport-fit=cover"> for the safe-area insets to apply.
 */

:root{
  color-scheme:dark;
  --bg:#0D0E26;--surface:#15173A;--surface-2:#1D2050;--line:#2A2E66;
  --ink:#ECEDFF;--ink-2:#B2B6E6;--ink-3:#8085C0;
  --accent:#8A9BFF;--accent-ink:#0D0E26;--accent-soft:rgba(138,155,255,.16);--track:#24285A;--glow:rgba(138,155,255,.35);
  --pink:#FF5CB1;--pink-ink:#1A0612;--pink-soft:rgba(255,92,177,.16);--pink-glow:rgba(255,92,177,.4);
  --nav-h:64px;--side-w:220px;--safe-b:env(safe-area-inset-bottom,0px);
}

*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
html,body{background:var(--bg)}
body{font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,"Helvetica Neue",Arial,sans-serif;color:var(--ink);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font:inherit;color:inherit}
button{background:none;border:0;cursor:pointer}
a{color:inherit;text-decoration:none}
[hidden]{display:none!important}
::placeholder{color:var(--ink-3);opacity:1}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--ink-3)}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* Shell */
.app{display:flex;min-height:100vh;min-height:100dvh}
.main{flex:1;min-width:0;padding:20px 16px calc(160px + var(--safe-b))}
.wrap{max-width:1080px;margin:0 auto}
.sidebar{display:none}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:17px;letter-spacing:.2px;padding:4px 10px 18px}
.brand svg{color:var(--pink)}
.side-link{display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:10px;color:var(--ink-2);font-weight:500}
.side-link:hover{background:var(--surface-2);color:var(--ink)}
.side-link.on,.side-link[aria-current="page"]{background:var(--accent-soft);color:var(--ink)}
.side-link.on svg,.side-link[aria-current="page"] svg{color:var(--accent)}
.badge{margin-left:auto;background:var(--pink);color:var(--pink-ink);font-size:12px;font-weight:700;border-radius:999px;padding:1px 7px}
.side-foot{margin-top:auto;padding:12px 10px;font-size:13px;color:var(--ink-3)}
.side-foot .bar{margin-top:8px}
.bottomnav{position:fixed;left:0;right:0;bottom:0;z-index:5;display:flex;justify-content:space-around;align-items:center;height:calc(var(--nav-h) + var(--safe-b));padding:0 max(4px,env(safe-area-inset-right)) var(--safe-b) max(4px,env(safe-area-inset-left));background:var(--surface);border-top:1px solid var(--line)}
.bn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:56px;min-height:48px;font-size:11px;color:var(--ink-3);position:relative}
.bn.on,.bn[aria-current="page"]{color:var(--accent)}
.bn .badge{position:absolute;top:2px;right:8px;margin:0;font-size:10px;padding:0 5px}
.bn-plus{width:52px;height:52px;border-radius:16px;background:var(--pink);color:var(--pink-ink);display:grid;place-items:center;box-shadow:0 6px 18px var(--pink-glow);transform:translateY(-14px)}
@media (min-width:760px){
  .sidebar{display:flex;flex-direction:column;gap:4px;width:var(--side-w);flex:none;padding:24px 14px;border-right:1px solid var(--line);background:var(--surface);position:sticky;top:0;height:100vh}
  .main{padding:32px 36px 110px}
  .bottomnav{display:none}
}

/* Type + headers */
.top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}
.eyebrow{font-size:13px;color:var(--ink-3);font-weight:500;letter-spacing:.2px}
h1{font-size:26px;line-height:1.15;font-weight:700;letter-spacing:-.3px;margin-top:2px}
h2{font-size:15px;font-weight:650}
.section-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:26px 0 10px}
.section-h h2{font-size:12.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--ink-3);font-weight:650}
.tag{font-size:12.5px;color:var(--ink-3);font-weight:500}
.link{color:var(--accent);font-weight:600;font-size:13px;position:relative}
.cap{font-size:13px;color:var(--ink-3);margin-top:3px}
.hint{font-size:12.5px;color:var(--ink-3);margin-top:8px}

/* Chips, buttons, bars */
.chip{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;padding:6px 11px;border-radius:999px;background:var(--surface-2);color:var(--ink-2);white-space:nowrap;border:1px solid var(--line)}
.chip-accent{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.chip-pink{background:var(--pink-soft);color:var(--pink);border-color:transparent}
.dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none}
.chip-pink .dot{background:var(--pink)}
.btn,.btn-pink,.btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;border:0;border-radius:10px;padding:9px 16px;font-weight:650;line-height:1.2;white-space:nowrap;cursor:pointer;transition:filter .15s,background .15s}
.btn{background:var(--accent);color:var(--accent-ink)}
.btn-pink,.capture .btn,.review .btn{background:var(--pink);color:var(--pink-ink)}
.btn-ghost,.btn.ghost{background:var(--surface-2);color:var(--ink);border:1px solid var(--line)}
.btn-block{width:100%}
.btn:active,.btn-pink:active,.btn-ghost:active{filter:brightness(.92)}
.btn[disabled],.btn-pink[disabled],.btn-ghost[disabled]{opacity:.5;cursor:not-allowed;filter:none}
@media (hover:hover){
  .btn:hover,.btn-pink:hover,.capture .btn:hover,.review .btn:hover{filter:brightness(1.08)}
  .btn-ghost:hover,.btn.ghost:hover{background:var(--line);filter:none}
}
.bar{height:8px;border-radius:999px;background:var(--track);overflow:hidden}
.bar>span{display:block;height:100%;min-width:6px;border-radius:inherit;background:var(--accent);transition:width .4s ease}
.bar.thin{height:5px}

/* Year clock */
.yearclock{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px 16px}
.yearclock .bar>span{background:linear-gradient(90deg,var(--accent),var(--pink))}
.yearclock .row{display:flex;justify-content:space-between;font-size:13px;color:var(--ink-2);margin-top:8px}

/* Goal cards */
.grid{display:grid;gap:12px;grid-template-columns:1fr}
@media (min-width:600px){.grid{grid-template-columns:repeat(2,1fr)}}
@media (min-width:1100px){.grid{grid-template-columns:repeat(3,1fr)}}
.card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px;display:flex;flex-direction:column}
.card-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:10px}
.big{font-size:30px;font-weight:700;letter-spacing:-.5px;line-height:1.1}
.big small{font-size:14px;font-weight:600;color:var(--ink-3);margin-left:5px;letter-spacing:0}
.ms{margin-top:14px}
.ms-row{display:flex;justify-content:space-between;gap:8px;font-size:13px;margin-bottom:6px;color:var(--ink-2)}
.ms-row b{color:var(--ink)}
.ms-row.after{margin:6px 0 0;color:var(--ink-3)}
.effort{margin-top:auto;padding-top:12px;border-top:1px dashed var(--line);display:flex;justify-content:space-between;gap:10px;font-size:13px}
.ms + .effort{margin-top:14px}
.effort .k{color:var(--ink-3)}
.effort .v{font-weight:600;text-align:right}

/* Capture (pink: it is about you, right now) */
.capture-dock{position:fixed;left:0;right:0;bottom:calc(var(--nav-h) + var(--safe-b) + 16px);padding:0 12px;z-index:4}
.capture{display:flex;gap:8px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:6px 6px 6px 14px;box-shadow:0 10px 30px rgba(0,0,0,.18);max-width:760px;margin:0 auto}
.capture input{flex:1;min-width:0;min-height:40px;background:none;border:0;outline:0;font-size:16px;color:var(--ink)}
.capture input:focus-visible{outline:0}
.capture:focus-within{border-color:var(--pink);box-shadow:0 0 0 3px var(--pink-soft),0 10px 30px rgba(0,0,0,.18)}
.capture.lg{max-width:none;padding:10px 10px 10px 16px;border-radius:16px;box-shadow:0 0 0 4px var(--pink-soft)}
.capture.lg:focus-within{box-shadow:0 0 0 4px var(--pink-soft)}
@media (min-width:760px){.capture-dock{left:var(--side-w);bottom:22px}}

/* Lists, inbox, actions */
.list{background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden}
.li{padding:14px 16px;border-top:1px solid var(--line)}
.li:first-child{border-top:0}
.money{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.money b{font-size:17px}
.pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.pill{border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);border-radius:999px;padding:5px 11px;font-size:13px;font-weight:600;cursor:pointer}
.pill.guess{background:var(--pink);color:var(--pink-ink);border-color:var(--pink)}
.pill[aria-pressed="true"],.pill.on{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.action{display:flex;align-items:center;gap:12px}
.check{width:20px;height:20px;border-radius:50%;border:2px solid var(--ink-3);background:transparent;padding:0;flex:none;position:relative;cursor:pointer}
.check::before{content:"";position:absolute;inset:-12px}
.check.done,.check[aria-pressed="true"]{background:var(--accent);border-color:var(--accent)}
.check.done::after,.check[aria-pressed="true"]::after{content:"";position:absolute;left:5px;top:1px;width:5px;height:10px;border:solid var(--accent-ink);border-width:0 2px 2px 0;transform:rotate(45deg)}
.action .t{flex:1;min-width:0}
.action.is-done .t{color:var(--ink-3);text-decoration:line-through}
.cols{display:grid;gap:4px 24px}
@media (min-width:980px){.cols{grid-template-columns:1.45fr 1fr}}
.mini-row{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center}
.mini-row .n{font-weight:600;font-size:14px}
.mini-row .v{font-size:13px;color:var(--ink-2)}
.mini-row .bar{grid-column:1/-1}

/* Week view */
.grew{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}
.grew .g{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 14px}
.grew .g b{display:block;font-size:21px;color:var(--accent);letter-spacing:-.3px}
.grew .g span{font-size:12.5px;color:var(--ink-3)}
.ef-row{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;padding:14px 16px;border-top:1px solid var(--line);font-size:14px}
.ef-row>:first-child{grid-column:1/-1}
.ef-cell .k{display:block;font-size:11.5px;text-transform:uppercase;letter-spacing:.7px;color:var(--ink-3);margin-bottom:2px}
.ef-head{display:none}
@media (min-width:700px){
  .ef-row{grid-template-columns:1fr 1.5fr 1fr;align-items:center}
  .ef-row>:first-child{grid-column:auto}
  .ef-cell .k{display:none}
  .ef-head{display:grid;border-top:0;font-size:11.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--ink-3);padding:12px 16px 4px}
}
.review{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;background:linear-gradient(135deg,var(--accent-soft),var(--pink-soft) 60%,transparent 90%),var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px;margin-top:24px}
.review>div{flex:1;min-width:220px}

/* Forms: neutral validation, pink-soft only */
.form{display:grid;gap:16px}
.field{display:grid;gap:6px;min-width:0}
.field-row{display:grid;gap:16px;grid-template-columns:1fr}
@media (min-width:600px){.field-row{grid-template-columns:1fr 1fr}}
.label,.field>label{font-size:13px;font-weight:600;color:var(--ink-2)}
.field .hint{margin-top:0}
:where(input[type=text],input[type=number],input[type=date],input[type=time],input[type=email],input[type=password],input[type=search],input[type=url],input[type=tel],select,textarea),.input{width:100%;min-height:44px;padding:10px 12px;font-size:16px;line-height:1.3;background:var(--bg);color:var(--ink);border:1px solid var(--ink-3);border-radius:10px}
@media (hover:hover){:where(input[type=text],input[type=number],input[type=date],input[type=time],input[type=email],input[type=password],input[type=search],input[type=url],input[type=tel],select,textarea),.input{transition:border-color .15s}}
input[type=number]{font-variant-numeric:tabular-nums}
textarea{min-height:96px;resize:vertical;line-height:1.45}
select{-webkit-appearance:none;appearance:none;padding-right:38px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%23B2B6E6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;background-size:12px 8px}
option{background:var(--surface);color:var(--ink)}
input[aria-invalid="true"],select[aria-invalid="true"],textarea[aria-invalid="true"]{border:2px solid var(--pink);padding:9px 11px}
select[aria-invalid="true"]{padding-right:37px}
.field-msg{display:flex;align-items:flex-start;gap:8px;background:var(--pink-soft);color:var(--ink);border-radius:8px;padding:8px 10px;font-size:13.5px}
.field-msg::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--pink);flex:none;margin-top:.55em}
.check-field{display:flex;align-items:center;gap:12px;min-height:44px;cursor:pointer}
input[type=checkbox]{-webkit-appearance:none;appearance:none;flex:none;width:22px;height:22px;margin:0;border:2px solid var(--ink-3);border-radius:6px;background:var(--bg) center/14px 14px no-repeat;cursor:pointer}
input[type=checkbox]:checked{background-color:var(--accent);border-color:var(--accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%230D0E26' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8.5l3.2 3.2L13 4.8'/%3E%3C/svg%3E")}
input:disabled,select:disabled,textarea:disabled{opacity:.55;cursor:not-allowed}

/* Attention banner (feed alerts): pink-soft, ink text, calm wording */
.banner{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;background:var(--pink-soft);color:var(--ink);border:1px solid var(--pink-glow);border-radius:14px;padding:12px 14px;margin-bottom:16px}
.banner .dot{background:var(--pink);align-self:flex-start;margin-top:.5em}
.banner-text{flex:1;min-width:200px}
.banner-title{font-weight:650}
.banner-text p{font-size:13.5px;color:var(--ink-2);margin-top:2px}

/* Toast */
.toast-region{position:fixed;left:0;right:0;bottom:calc(var(--nav-h) + var(--safe-b) + 84px);z-index:20;display:flex;flex-direction:column;align-items:center;gap:8px;padding:0 12px;pointer-events:none}
.toast{pointer-events:auto;display:flex;align-items:center;gap:10px;max-width:420px;background:var(--surface-2);color:var(--ink);border:1px solid var(--line);border-radius:12px;padding:10px 14px;font-size:14px;box-shadow:0 10px 30px rgba(0,0,0,.35);animation:toast-in .2s ease-out}
.toast .dot{background:var(--pink)}
.toast-action{color:var(--accent);font-weight:650;font-size:14px;padding:0 4px;margin-left:6px}
.toast.is-leaving{opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}}
@media (min-width:760px){.toast-region{left:var(--side-w);bottom:96px}}

/* Empty states */
.empty{text-align:center;padding:32px 20px;border:1px dashed var(--line);border-radius:16px}
.list>.empty{border:0;border-radius:0}
.empty-mark{color:var(--accent);margin-bottom:10px}
.empty h2{font-size:16px;color:var(--ink)}
.empty p{font-size:13.5px;color:var(--ink-2);max-width:34ch;margin:4px auto 0}
.empty .btn,.empty .btn-pink,.empty .btn-ghost{margin-top:16px}

/* Login */
.login{min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:max(24px,env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom))}
.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:28px 24px;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.login-brand{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:22px;text-align:center}
.login-brand svg{color:var(--pink)}
.login-brand h1{margin-top:0}

/* Shell additions: sign out, phone capture dock, flame empty state, toast action alignment */
.side-foot .logout-form{margin-top:10px}
.side-foot .logout-form .side-link{width:100%;font-size:15px}
.page-foot{display:flex;justify-content:center;margin-top:32px}
.capture-close{display:none;flex:none;width:44px;height:44px;border-radius:10px;place-items:center;color:var(--ink-3)}
.empty-mark.is-flame{color:var(--pink)}
.toast-action{display:inline-flex;align-items:center}
.yearclock + .empty{margin-top:16px}
@media (min-width:760px){.page-foot{display:none}}
@media (max-width:759px){
  .capture-dock:not(.is-open){display:none}
  .capture-close{display:grid}
}

/* Phone and touch: 44px tap targets */
@media (max-width:759px),(pointer:coarse){
  .btn,.btn-pink,.btn-ghost{min-height:44px}
  .pills{gap:8px}
  .pill{min-height:44px;padding:0 16px}
  .capture input{min-height:44px}
  a.chip,button.chip,.side-link,.toast-action{min-height:44px}
  .link::after{content:"";position:absolute;inset:-14px -8px}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}
