/* ============================================================
   GROUNDWORK — App shell, dashboard, admin, profile, onboarding
   ============================================================ */

/* ---------- App shell ---------- */
/* The hidden attribute must always win: a class with its own `display` (e.g. .reauth's
   flex) silently out-specifies the UA's [hidden] rule, leaving "hidden" panels expanded. */
[hidden]{display:none!important}
body.app-body{background:var(--bg)}
.shell{display:grid;grid-template-columns:248px 1fr;min-height:100vh}
@media(max-width:980px){.shell{grid-template-columns:1fr}}

.sidebar{
  background:var(--surface);border-right:1px solid var(--line);
  padding:1.2rem .9rem;display:flex;flex-direction:column;gap:.3rem;
  position:sticky;top:0;height:100vh;overflow-y:auto;
}
.sidebar .brand{padding:.4rem .6rem 1.1rem}
.sidebar__label{font-size:.68rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);padding:1rem .8rem .35rem}
.side-link{
  display:flex;align-items:center;gap:.7rem;
  padding:.58rem .8rem;border-radius:var(--r-md);
  font-size:.9rem;font-weight:500;color:var(--ink-2);text-decoration:none;
  transition:background .15s,color .15s;
}
.side-link svg{flex:none;opacity:.75}
.side-link:hover{background:var(--surface-2);color:var(--ink)}
.side-link.is-active{background:var(--ember-ghost);color:var(--ember);font-weight:600}
.side-link.is-active svg{opacity:1}
.side-link .pill{margin-left:auto;padding:.1rem .5rem;font-size:.68rem}

.sidebar__footer{margin-top:auto;padding-top:1rem;border-top:1px solid var(--line)}
.user-chip{display:flex;align-items:center;gap:.7rem;padding:.5rem .6rem;border-radius:var(--r-md);text-decoration:none;color:var(--ink);transition:background .15s}
.user-chip:hover{background:var(--surface-2)}
.user-chip b{display:block;font-size:.86rem;line-height:1.25}
.user-chip span{font-size:.72rem;color:var(--ink-3)}

@media(max-width:980px){
  .sidebar{
    position:fixed;left:0;top:0;bottom:0;width:264px;z-index:90;
    transform:translateX(-100%);transition:transform .28s ease;
    box-shadow:var(--shadow-lg);height:100vh;
  }
  .sidebar.is-open{transform:none}
  .scrim{position:fixed;inset:0;background:rgba(15,10,5,.45);z-index:80;opacity:0;pointer-events:none;transition:opacity .25s}
  .scrim.is-visible{opacity:1;pointer-events:auto}
}

.main{display:flex;flex-direction:column;min-width:0}
.topbar{
  display:flex;align-items:center;gap:1rem;
  padding:.9rem clamp(1rem,3vw,2rem);
  border-bottom:1px solid var(--line);background:var(--surface);
  position:sticky;top:0;z-index:50;
}
.topbar__burger{display:none;background:none;border:0;color:var(--ink);padding:.3rem}
@media(max-width:980px){.topbar__burger{display:inline-flex}}
.topbar h1{font-size:1.18rem;margin:0;font-family:var(--font-body);font-weight:700;letter-spacing:-.01em}
.topbar__search{
  margin-left:auto;display:flex;align-items:center;gap:.5rem;
  background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-full);
  padding:.4rem .9rem;font-size:.85rem;color:var(--ink-3);min-width:200px;
}
.topbar__search input{border:0;background:none;outline:none;width:100%;font-size:.85rem;color:var(--ink)}
@media(max-width:680px){.topbar__search{display:none}}
.icon-btn{
  position:relative;background:none;border:1px solid var(--line);border-radius:var(--r-full);
  width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;
  color:var(--ink-2);transition:border-color .15s,color .15s;
}
.icon-btn:hover{color:var(--ink);border-color:var(--line-strong)}
.icon-btn .notif-dot{position:absolute;top:7px;right:8px;width:8px;height:8px;border-radius:50%;background:var(--ember);border:2px solid var(--surface)}

.content{padding:clamp(1.1rem,3vw,2rem);display:flex;flex-direction:column;gap:1.4rem;max-width:1280px;width:100%;margin-inline:auto}

/* app views (hash-routed sections) */
.view{display:none;flex-direction:column;gap:1.4rem;animation:view-in .35s ease}
.view.is-active{display:flex}
@keyframes view-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

.view-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.view-head h2{font-size:1.5rem;margin:0}
.view-head p{margin:0;color:var(--ink-2);font-size:.92rem}

/* ---------- Dashboard widgets ---------- */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem}
@media(max-width:1080px){.kpis{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.kpis{grid-template-columns:1fr}}
.kpi{padding:1.1rem 1.25rem}
.kpi__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}
.kpi__label{font-size:.78rem;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em}
.kpi__value{font-family:var(--font-display);font-size:1.9rem;font-weight:600;line-height:1.1}
.kpi__trend{font-size:.76rem;font-weight:600;display:inline-flex;align-items:center;gap:.25rem;margin-top:.2rem}
.kpi__trend.up{color:var(--moss)}
.kpi__trend.down{color:var(--clay)}
.kpi__trend.flat{color:var(--ink-3)}

.dash-grid{display:grid;grid-template-columns:1.6fr 1fr;gap:1.4rem;align-items:start}
@media(max-width:1080px){.dash-grid{grid-template-columns:1fr}}

.panel{padding:0;overflow:hidden}
.panel__head{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.3rem .9rem;border-bottom:1px solid var(--line)}
.panel__head h3{margin:0;font-size:1.02rem;font-family:var(--font-body);font-weight:700}
.panel__head a{font-size:.82rem;font-weight:600;color:var(--ember);text-decoration:none}
.panel__head a:hover{text-decoration:underline}
.panel__body{padding:1rem 1.3rem 1.2rem}
.panel__body--flush{padding:0}

/* agenda */
.agenda-item{display:flex;gap:1rem;padding:.85rem 1.3rem;border-bottom:1px solid var(--line);transition:background .15s}
.agenda-item:last-child{border-bottom:0}
.agenda-item:hover{background:var(--surface-2)}
.agenda-item__time{font-family:var(--font-mono);font-size:.78rem;color:var(--ink-3);min-width:74px;padding-top:.15rem}
.agenda-item__rail{width:3px;border-radius:3px;flex:none;align-self:stretch}
.agenda-item__body b{display:block;font-size:.92rem;font-weight:600}
.agenda-item__body span{font-size:.79rem;color:var(--ink-3)}
.agenda-item .pill{margin-left:auto;align-self:center;flex:none}
.agenda-item.is-now{background:var(--ember-ghost)}

/* day grouping header (agenda "coming up") */
.day-head{display:flex;align-items:baseline;gap:.5rem;padding:.6rem 1.3rem .35rem;
  font-size:.72rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);
  background:var(--surface-2);border-bottom:1px solid var(--line)}
.day-head span{text-transform:none;letter-spacing:0;font-weight:400;color:var(--ink-3)}

/* date divider inside the chat transcript */
.conv-day{align-self:center;margin:.3rem 0;padding:.18rem .7rem;border-radius:999px;
  font-size:.7rem;font-weight:600;color:var(--ink-3);background:var(--surface-3)}

/* gym training-balance bars */
.bal-row{display:flex;align-items:center;gap:.7rem;padding:.55rem 1.3rem}
.bal-row__label{width:46px;font-size:.8rem;font-weight:600;color:var(--ink-2);flex:none}
.bal-row__track{flex:1;height:9px;border-radius:6px;background:var(--surface-3);overflow:hidden}
.bal-row__fill{display:block;height:100%;border-radius:6px;transition:width .4s ease}
.bal-row__pct{width:36px;text-align:right;font-size:.78rem;color:var(--ink-3);flex:none;font-variant-numeric:tabular-nums}

/* bjj at-a-glance */
.glance-stats{display:flex;gap:.5rem;padding:1rem 1.3rem .4rem}
.glance-stat{flex:1;text-align:center;padding:.55rem .3rem;background:var(--surface-2);border-radius:10px}
.glance-stat b{display:block;font-size:1.35rem;font-weight:600;line-height:1.1}
.glance-stat span{font-size:.71rem;color:var(--ink-3)}
/* memory — delete button (appears on row hover) */
.li-row .li-del{flex:none;margin-left:auto;align-self:center;background:none;border:0;cursor:pointer;
  color:var(--ink-3);padding:.3rem;border-radius:8px;opacity:0;transition:opacity .15s,color .15s,background .15s}
.li-row:hover .li-del,.li-del:focus-visible{opacity:1}
.li-del:hover{color:var(--clay);background:var(--surface-3)}
@media(hover:none){.li-row .li-del{opacity:1}}

/* notes — mark-as-done checkbox + done state */
.note-check{width:20px;height:20px;flex:none;margin-top:.1rem;padding:0;cursor:pointer;
  border:2px solid var(--line-strong);border-radius:6px;background:var(--surface);
  display:flex;align-items:center;justify-content:center;color:#fff;transition:background .15s,border-color .15s}
.note-check:hover{border-color:var(--moss)}
.note-check svg{width:13px;height:13px}
.note-row.is-done .note-check{background:var(--moss);border-color:var(--moss)}
.note-row.is-done .li-snip{text-decoration:line-through;color:var(--ink-3)}

/* AI review drawer items */
.rev-item{padding:.5rem 0;border-bottom:1px solid var(--line)}
.rev-item:last-of-type{border-bottom:none}
.rev-item b{display:block;font-size:.9rem;margin-bottom:.1rem}
.rev-item span{font-size:.83rem;color:var(--ink-2);line-height:1.45}

.glance-legend{padding:.1rem 1.3rem .45rem;font-size:.72rem;color:var(--ink-3);line-height:1.5}
.glance-legend b{color:var(--ink-2);font-weight:600}
.glance-meta{padding:.35rem 1.3rem;font-size:.8rem;color:var(--ink-3);border-top:1px solid var(--line)}
.glance-foc{padding:.55rem 1.3rem}
.glance-foc:not(:last-child){border-bottom:1px solid var(--line)}
.glance-foc > b{font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);display:block;margin-bottom:.4rem}
.glance-foc .pill{margin:0 .3rem .3rem 0}

/* nudges */
.nudge{display:flex;gap:.85rem;padding:.9rem 1.3rem;border-bottom:1px solid var(--line);align-items:flex-start}
.nudge:last-child{border-bottom:0}
.nudge__icon{width:34px;height:34px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center}
.nudge p{margin:0;font-size:.86rem;line-height:1.45}
.nudge time{font-size:.72rem;color:var(--ink-3)}
.nudge__actions{display:flex;gap:.4rem;margin-top:.45rem}

/* conversation list & transcript */
.convo{display:flex;gap:.85rem;padding:.85rem 1.3rem;border-bottom:1px solid var(--line);cursor:default}
.convo:last-child{border-bottom:0}
.convo:hover{background:var(--surface-2)}
.convo b{display:block;font-size:.88rem}
.convo p{margin:0;font-size:.8rem;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:420px}
.convo time{margin-left:auto;font-size:.72rem;color:var(--ink-3);flex:none}

.transcript{display:flex;flex-direction:column;gap:.6rem;padding:1.2rem 1.3rem;background:var(--surface-2);max-height:430px;overflow-y:auto}
.transcript .wa-msg{box-shadow:var(--shadow-sm);max-width:88%}

/* notes */
.notes-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}
@media(max-width:1080px){.notes-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.notes-grid{grid-template-columns:1fr}}
.note-card{padding:1.15rem 1.25rem;display:flex;flex-direction:column;gap:.5rem}
.note-card h4{margin:0;font-size:.95rem}
.note-card p{margin:0;font-size:.84rem;color:var(--ink-2);flex:1}
.note-card footer{display:flex;align-items:center;justify-content:space-between;font-size:.72rem;color:var(--ink-3)}

/* charts */
.chart-wrap{position:relative}
.chart-wrap svg{width:100%;height:auto;display:block}
.chart-legend{display:flex;gap:1.2rem;font-size:.76rem;color:var(--ink-2);margin-top:.6rem;flex-wrap:wrap}
.chart-legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:.35rem;vertical-align:-1px}

.spark{height:44px}
.spark path.line{fill:none;stroke:var(--ember);stroke-width:2;stroke-linecap:round}
.spark path.area{fill:url(#sparkfill);opacity:.5}

/* progress rings */
.ring-wrap{display:flex;align-items:center;gap:1rem}
.ring{transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:8}
.ring .track{stroke:var(--surface-3)}
.ring .meter{stroke:var(--ember);stroke-linecap:round;transition:stroke-dashoffset 1.2s cubic-bezier(.2,.7,.3,1)}
.ring-wrap b{font-family:var(--font-display);font-size:1.5rem;display:block;line-height:1.1}
.ring-wrap span{font-size:.78rem;color:var(--ink-3)}

/* training */
.session-row{display:flex;align-items:center;gap:1rem;padding:.85rem 1.3rem;border-bottom:1px solid var(--line)}
.session-row:last-child{border-bottom:0}
.session-row__icon{width:38px;height:38px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center}
.session-row b{display:block;font-size:.9rem}
.session-row span{font-size:.78rem;color:var(--ink-3)}
.session-row .meta{margin-left:auto;text-align:right;flex:none}
.session-row .meta b{font-family:var(--font-mono);font-weight:600;font-size:.84rem}

.pr-card{padding:1.1rem 1.2rem;text-align:left}
.pr-card .lift{font-size:.78rem;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em}
.pr-card .num{font-family:var(--font-display);font-size:1.7rem;font-weight:600;line-height:1.2}
.pr-card .delta{font-size:.76rem;font-weight:600;color:var(--moss)}
.pr-card .when{font-size:.72rem;color:var(--ink-3)}

.tech-row{display:flex;align-items:center;gap:.9rem;padding:.75rem 1.3rem;border-bottom:1px solid var(--line);font-size:.88rem}
.tech-row:last-child{border-bottom:0}
.tech-row .belt{width:10px;height:10px;border-radius:3px;flex:none}
.tech-row b{font-weight:600}
.tech-row span{color:var(--ink-3);font-size:.78rem}
.tech-row .pill{margin-left:auto;flex:none}

/* heatmap (consistency) */
.heatmap{display:grid;grid-template-columns:repeat(16,1fr);gap:4px}
.heatmap i{aspect-ratio:1;border-radius:3px;background:var(--surface-3)}
.heatmap i[data-l="1"]{background:color-mix(in srgb,var(--ember) 30%,var(--surface-3))}
.heatmap i[data-l="2"]{background:color-mix(in srgb,var(--ember) 55%,var(--surface-3))}
.heatmap i[data-l="3"]{background:var(--ember)}

/* video recommendations */
.video-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}
@media(max-width:1080px){.video-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.video-grid{grid-template-columns:1fr}}
.video-card{padding:0;overflow:hidden;display:flex;flex-direction:column}
.video-card__thumb{
  aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;position:relative;
  background:linear-gradient(135deg,var(--surface-3),var(--surface-2));
}
.video-card__thumb .play{
  width:48px;height:48px;border-radius:50%;background:var(--surface);
  display:flex;align-items:center;justify-content:center;color:var(--ember);
  box-shadow:var(--shadow-md);transition:transform .2s;
}
.video-card:hover .play{transform:scale(1.1)}
.video-card__thumb .dur{position:absolute;bottom:8px;right:8px;background:rgba(15,10,5,.75);color:#fff;font-size:.68rem;padding:.1rem .45rem;border-radius:5px;font-family:var(--font-mono)}
.video-card__body{padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.45rem;flex:1}
.video-card__body b{font-size:.9rem;line-height:1.35}
.video-card__why{font-size:.76rem;color:var(--ink-2);background:var(--ember-ghost);border-left:3px solid var(--ember);padding:.45rem .6rem;border-radius:0 8px 8px 0;margin-top:auto}
.video-card__why strong{color:var(--ember)}

/* hobbies */
.hobby-card{padding:1.2rem 1.3rem;display:flex;flex-direction:column;gap:.7rem}
.hobby-card header{display:flex;align-items:center;gap:.7rem}
.hobby-card header b{font-size:.95rem}
.hobby-card header span{font-size:.76rem;color:var(--ink-3);display:block}
.hobby-card .milestone{font-size:.8rem;color:var(--ink-2);display:flex;gap:.5rem;align-items:flex-start}
.hobby-card .milestone svg{flex:none;color:var(--ember);margin-top:.15rem}

/* integrations */
.integration{display:flex;align-items:center;gap:1rem;padding:1.1rem 1.3rem;border-bottom:1px solid var(--line)}
.integration:last-child{border-bottom:0}
.integration__logo{width:42px;height:42px;border-radius:11px;flex:none;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1rem}
.integration b{display:block;font-size:.92rem}
.integration span{font-size:.78rem;color:var(--ink-3)}
.integration .flex{margin-left:auto;gap:.6rem}

/* Calendar re-auth (Apple inline form under its row) */
.reauth{display:flex;flex-direction:column;gap:.6rem;padding:.9rem 1.3rem 1.1rem;border-bottom:1px solid var(--line);background:var(--surface-2)}
.reauth .field-input{width:100%}
.reauth__row{display:flex;align-items:center;justify-content:space-between;gap:.8rem}
.reauth__hint{font-size:.78rem;color:var(--ink-3);text-decoration:none}
.reauth__hint:hover{color:var(--ink-2);text-decoration:underline}
.reauth__err{color:var(--clay);font-size:.8rem}

/* activity feed */
.activity{position:relative;padding:.4rem 0}
.activity::before{content:"";position:absolute;left:calc(1.3rem + 16px);top:1rem;bottom:1rem;width:2px;background:var(--line)}
.activity-item{display:flex;gap:1rem;padding:.7rem 1.3rem;position:relative}
.activity-item__dot{
  width:34px;height:34px;border-radius:50%;flex:none;z-index:1;
  display:flex;align-items:center;justify-content:center;
  background:var(--surface);border:2px solid var(--line-strong);
}
.activity-item p{margin:0;font-size:.86rem}
.activity-item time{font-size:.72rem;color:var(--ink-3)}

/* empty / loading states */
.empty{
  display:flex;flex-direction:column;align-items:center;gap:.7rem;
  padding:2.6rem 1.5rem;text-align:center;color:var(--ink-3);
}
.empty svg{opacity:.5}
.empty b{color:var(--ink-2);font-size:.95rem}
.empty p{margin:0;font-size:.84rem;max-width:36ch}

.skeleton{position:relative;overflow:hidden;background:var(--surface-3);border-radius:8px;min-height:14px}
.skeleton::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);
  animation:shimmer 1.4s infinite;
}
[data-theme="dark"] .skeleton::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.07),transparent)}
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}

/* ---------- Tables (admin + app) ---------- */
.table-wrap{overflow-x:auto}
table.gw-table{width:100%;border-collapse:collapse;font-size:.86rem}
.gw-table th{
  text-align:left;font-size:.72rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--ink-3);padding:.7rem 1.1rem;border-bottom:1px solid var(--line);white-space:nowrap;
}
.gw-table td{padding:.8rem 1.1rem;border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap}
.gw-table tbody tr{transition:background .12s;cursor:default}
.gw-table tbody tr:hover{background:var(--surface-2)}
.gw-table tbody tr.is-selected{background:var(--ember-ghost)}
.gw-table .cell-user{display:flex;align-items:center;gap:.65rem}
.gw-table .cell-user b{font-size:.86rem;display:block;line-height:1.3}
.gw-table .cell-user span{font-size:.72rem;color:var(--ink-3)}

/* ---------- Admin agents ---------- */
.agents-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.1rem}
@media(max-width:1180px){.agents-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.agents-grid{grid-template-columns:1fr}}
.agent-card{padding:1.25rem 1.3rem;display:flex;flex-direction:column;gap:.8rem}
.agent-card header{display:flex;align-items:flex-start;gap:.8rem}
.agent-card header .avatar{border-radius:12px}
.agent-card header b{display:block;font-size:.95rem}
.agent-card header span{font-size:.76rem;color:var(--ink-3)}
.agent-card header .pill{margin-left:auto}
.agent-card .personality{font-size:.8rem;color:var(--ink-2);font-style:italic;border-left:3px solid var(--line-strong);padding-left:.7rem}
.agent-card h5{margin:.2rem 0 .3rem;font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);font-weight:700}
.agent-card ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}
.agent-card li{font-size:.8rem;color:var(--ink-2);display:flex;gap:.5rem;align-items:flex-start}
.agent-card li::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--ember);flex:none;margin-top:.5rem}
.agent-card .reco{
  font-size:.8rem;background:var(--ember-ghost);border-radius:10px;padding:.6rem .8rem;
  color:var(--ink);border:1px dashed color-mix(in srgb,var(--ember) 40%,transparent);
}
.agent-card .reco strong{color:var(--ember)}

/* user detail drawer */
.drawer{
  position:fixed;top:0;right:0;bottom:0;width:min(420px,94vw);z-index:100;
  background:var(--surface);border-left:1px solid var(--line);box-shadow:var(--shadow-lg);
  transform:translateX(105%);transition:transform .3s cubic-bezier(.2,.7,.3,1);
  display:flex;flex-direction:column;
}
.drawer.is-open{transform:none}
.drawer__head{display:flex;align-items:center;gap:.9rem;padding:1.2rem 1.4rem;border-bottom:1px solid var(--line)}
.drawer__head .icon-btn{margin-left:auto}
.drawer__body{padding:1.3rem 1.4rem;overflow-y:auto;display:flex;flex-direction:column;gap:1.2rem}
.drawer .def{display:flex;justify-content:space-between;gap:1rem;font-size:.86rem;padding:.45rem 0;border-bottom:1px dashed var(--line)}
.drawer .def span{color:var(--ink-3)}
.drawer .def b{font-weight:600;text-align:right}

/* ---------- Profile / settings ---------- */
.settings-grid{display:grid;grid-template-columns:240px 1fr;gap:2rem;align-items:start}
@media(max-width:920px){.settings-grid{grid-template-columns:1fr}}
.settings-nav{position:sticky;top:90px;display:flex;flex-direction:column;gap:.2rem}
@media(max-width:920px){.settings-nav{position:static;flex-direction:row;flex-wrap:wrap;gap:.4rem}}
.settings-nav a{
  padding:.55rem .9rem;border-radius:var(--r-md);font-size:.9rem;font-weight:500;
  color:var(--ink-2);text-decoration:none;transition:background .15s,color .15s;
}
.settings-nav a:hover{background:var(--surface-2);color:var(--ink)}
.settings-nav a.is-active{background:var(--ember-ghost);color:var(--ember);font-weight:600}

.setting-row{display:flex;align-items:center;gap:1.2rem;padding:1.05rem 1.3rem;border-bottom:1px solid var(--line)}
.setting-row:last-child{border-bottom:0}
.setting-row b{display:block;font-size:.92rem}
.setting-row p{margin:0;font-size:.8rem;color:var(--ink-3);max-width:46ch}
.setting-row .control{margin-left:auto;flex:none;display:flex;align-items:center;gap:.6rem}
.setting-row select.input{width:auto;padding:.45rem .8rem;font-size:.86rem}

/* ---------- Onboarding / signup ---------- */
.auth-wrap{
  min-height:100vh;display:grid;grid-template-columns:1fr 1fr;
}
@media(max-width:920px){.auth-wrap{grid-template-columns:1fr}.auth-side{display:none}}
.auth-side{
  background:linear-gradient(160deg,var(--ember-deep),var(--ember) 60%,var(--ember-bright));
  color:#FFF4EC;padding:3rem;display:flex;flex-direction:column;position:relative;overflow:hidden;
}
.auth-side::after{
  content:"";position:absolute;left:-80px;bottom:-80px;width:340px;height:340px;border-radius:50%;
  border:44px solid rgba(255,255,255,.1);
}
.auth-side blockquote{font-family:var(--font-display);font-size:1.45rem;line-height:1.45;margin:auto 0 1.4rem;font-weight:500;position:relative;z-index:1}
.auth-side .brand{color:#fff}
.auth-main{display:flex;flex-direction:column;padding:2rem clamp(1.2rem,5vw,4.5rem);overflow-y:auto}
.auth-card{width:min(440px,100%);margin:auto}

.wizard-steps{display:flex;gap:.45rem;margin-bottom:2rem}
.wizard-steps i{height:4px;flex:1;border-radius:3px;background:var(--surface-3);transition:background .3s}
.wizard-steps i.is-done{background:var(--ember)}
.wizard-steps i.is-current{background:linear-gradient(90deg,var(--ember) 50%,var(--surface-3) 50%)}

.wizard-step{display:none;animation:view-in .35s ease}
.wizard-step.is-active{display:block}

.oauth-btn{
  display:flex;align-items:center;justify-content:center;gap:.7rem;width:100%;
  padding:.78rem 1rem;border-radius:var(--r-md);border:1px solid var(--line-strong);
  background:var(--surface);font-weight:600;font-size:.93rem;text-decoration:none;color:var(--ink);
  transition:border-color .15s,background .15s,transform .15s;margin-bottom:.7rem;
}
.oauth-btn:hover{border-color:var(--ink-3);transform:translateY(-1px)}
.oauth-btn--wa{background:var(--wa-green);border-color:transparent;color:#06250F}
.oauth-btn--wa:hover{filter:brightness(1.04)}
.or-sep{display:flex;align-items:center;gap:1rem;color:var(--ink-3);font-size:.78rem;margin:1.2rem 0;text-transform:uppercase;letter-spacing:.1em}
.or-sep::before,.or-sep::after{content:"";flex:1;height:1px;background:var(--line)}

.focus-grid{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;margin:1.2rem 0 1.6rem}
.focus-tile{
  border:1.5px solid var(--line-strong);border-radius:var(--r-md);padding:.9rem 1rem;
  display:flex;align-items:center;gap:.7rem;cursor:pointer;font-weight:600;font-size:.88rem;
  transition:border-color .15s,background .15s,transform .1s;user-select:none;
}
.focus-tile:hover{transform:translateY(-1px)}
.focus-tile input{position:absolute;opacity:0}
.focus-tile.is-selected{border-color:var(--ember);background:var(--ember-ghost);color:var(--ember)}
.focus-tile span{font-size:1.15rem}

.qr-mock{
  width:170px;height:170px;margin:1.4rem auto;border-radius:var(--r-md);
  background:
    repeating-linear-gradient(0deg,var(--ink) 0 6px,transparent 6px 12px),
    repeating-linear-gradient(90deg,var(--ink) 0 6px,var(--surface) 6px 12px);
  border:10px solid var(--surface);outline:1px solid var(--line-strong);
  position:relative;opacity:.9;
}
.qr-mock::after{
  content:"";position:absolute;inset:35%;background:var(--ember);border-radius:8px;
  border:5px solid var(--surface);
}

.checklist{display:flex;flex-direction:column}
.check-item{display:flex;align-items:center;gap:.9rem;padding:.8rem 1.3rem;border-bottom:1px solid var(--line);font-size:.9rem}
.check-item:last-child{border-bottom:0}
.check-item__box{
  width:24px;height:24px;border-radius:50%;flex:none;border:2px solid var(--line-strong);
  display:flex;align-items:center;justify-content:center;color:#fff;transition:all .2s;
}
.check-item.is-done .check-item__box{background:var(--moss);border-color:var(--moss)}
.check-item.is-done span{text-decoration:line-through;color:var(--ink-3)}
.check-item a{margin-left:auto;font-size:.78rem;font-weight:600;color:var(--ember);text-decoration:none;flex:none}

/* welcome confetti-ish */
.welcome-burst{position:relative;text-align:center;padding:1rem 0 0}
.welcome-burst .avatar{width:74px;height:74px;font-size:1.6rem;margin:0 auto 1.2rem;box-shadow:var(--shadow-md)}

/* ---------- Support ---------- */
.support-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.2rem}
@media(max-width:880px){.support-grid{grid-template-columns:1fr}}
.support-tile{padding:1.6rem 1.5rem;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:.6rem}
.support-tile .mock-row__icon{width:44px;height:44px;border-radius:12px}
.support-tile b{font-size:1.02rem}
.support-tile p{margin:0;font-size:.86rem;color:var(--ink-2)}
.support-tile .small{color:var(--ember);font-weight:600;margin-top:auto}

.chat-mock{display:flex;flex-direction:column;border-radius:var(--r-lg);overflow:hidden;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-md)}
.chat-mock__head{display:flex;align-items:center;gap:.7rem;padding:.9rem 1.1rem;border-bottom:1px solid var(--line);background:var(--surface-2)}
.chat-mock__body{padding:1.1rem;display:flex;flex-direction:column;gap:.6rem;min-height:240px}
.chat-bubble{max-width:80%;padding:.6rem .85rem;border-radius:14px;font-size:.86rem;line-height:1.45}
.chat-bubble--agent{background:var(--surface-2);border-top-left-radius:4px;align-self:flex-start}
.chat-bubble--user{background:var(--ember);color:#fff;border-top-right-radius:4px;align-self:flex-end}
[data-theme="dark"] .chat-bubble--user{color:#1A0E05}
.chat-mock__input{display:flex;gap:.6rem;padding:.8rem 1rem;border-top:1px solid var(--line)}
.chat-mock__input .input{border-radius:var(--r-full)}
.typing{display:inline-flex;gap:4px;padding:.7rem .9rem;background:var(--surface-2);border-radius:14px;border-top-left-radius:4px;align-self:flex-start}
.typing i{width:6px;height:6px;border-radius:50%;background:var(--ink-3);animation:typing 1.2s infinite}
.typing i:nth-child(2){animation-delay:.15s}
.typing i:nth-child(3){animation-delay:.3s}
@keyframes typing{0%,60%,100%{transform:none;opacity:.5}30%{transform:translateY(-4px);opacity:1}}

/* ---------- Newsletter page ---------- */
.issue-preview{
  border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:var(--surface);
  box-shadow:var(--shadow-md);
}
.issue-preview__head{padding:1.5rem 1.7rem 1.2rem;border-bottom:1px solid var(--line);background:var(--surface-2)}
.issue-preview__head .pill{margin-bottom:.7rem}
.issue-preview__head h3{margin:0 0 .3rem}
.issue-preview__body{padding:1.5rem 1.7rem;display:flex;flex-direction:column;gap:1.2rem}
.issue-item{display:flex;gap:1rem}
.issue-item__num{font-family:var(--font-display);color:var(--ember);font-weight:600;font-size:1.1rem;flex:none;width:26px}
.issue-item b{display:block;font-size:.94rem;margin-bottom:.15rem}
.issue-item p{margin:0;font-size:.85rem;color:var(--ink-2)}

/* toast */
.toast{
  position:fixed;bottom:24px;left:50%;transform:translate(-50%,80px);
  background:var(--ink);color:var(--bg);padding:.8rem 1.3rem;border-radius:var(--r-full);
  font-size:.88rem;font-weight:500;box-shadow:var(--shadow-lg);z-index:200;
  opacity:0;transition:transform .35s cubic-bezier(.2,.7,.3,1),opacity .3s;
  display:flex;align-items:center;gap:.6rem;max-width:90vw;
}
.toast.is-visible{transform:translate(-50%,0);opacity:1}
.toast svg{color:var(--moss);flex:none}
[data-theme="dark"] .toast{background:var(--surface-3);color:var(--ink)}

/* ---------- Skeleton loading (added Phase 5a) ---------- */
.skel{position:relative;overflow:hidden;background:var(--surface-3);border-radius:6px;display:inline-block}
.skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent);animation:skel 1.3s infinite}
@keyframes skel{100%{transform:translateX(100%)}}
.skel-row{display:flex;gap:.9rem;align-items:center;padding:.85rem 1.3rem}
.skel-row__body{flex:1;display:flex;flex-direction:column;gap:.5rem}

/* ---------- Workout plan editor (Phase 5b) ---------- */
.plan-layout{display:grid;grid-template-columns:300px 1fr;gap:1.4rem;align-items:start}
@media(max-width:880px){.plan-layout{grid-template-columns:1fr}}
.plan-item{display:flex;align-items:center;gap:.7rem;padding:.9rem 1.3rem;cursor:pointer;border-left:3px solid transparent;transition:background .15s}
.plan-item:hover{background:var(--surface-2)}
.plan-item.is-active-sel{background:var(--ember-ghost);border-left-color:var(--ember)}
.plan-item__body{flex:1;min-width:0}
.plan-item__body b{display:block;font-size:.92rem}
.plan-item__body span{font-size:.78rem;color:var(--ink-3)}
.plan-edit{display:flex;flex-direction:column;gap:1.1rem}
.plan-edit__head{display:flex;gap:.8rem;align-items:center;flex-wrap:wrap}
.plan-edit input.plan-name{flex:1;min-width:180px;font-family:var(--font-display);font-size:1.2rem;font-weight:600;
  padding:.5rem .7rem;border:1px solid transparent;border-radius:var(--r-md);background:transparent;color:var(--ink)}
.plan-edit input.plan-name:hover{border-color:var(--line)}
.plan-edit input.plan-name:focus{outline:none;border-color:var(--ember);box-shadow:var(--ring);background:var(--bg)}
.day-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.day-card__head{display:flex;gap:.6rem;align-items:center;padding:.8rem 1rem;background:var(--surface-2);border-bottom:1px solid var(--line)}
.day-card__head input{flex:1;min-width:0;font-weight:600;font-size:.95rem;padding:.4rem .6rem;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--bg);color:var(--ink)}
.day-card__head select{padding:.4rem .5rem;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--bg);color:var(--ink);font-size:.82rem}
.day-card__body{padding:.7rem 1rem 1rem}
.ex-row{display:flex;gap:.5rem;align-items:center;margin-bottom:.5rem}
.ex-row input{padding:.5rem .6rem;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--bg);color:var(--ink);font-size:.88rem}
.ex-row input.ex-name{flex:1;min-width:0}
.ex-row input.ex-target{width:96px;text-align:center}
.ex-row input:focus,.day-card__head input:focus,.day-card__head select:focus{outline:none;border-color:var(--ember);box-shadow:var(--ring)}
.icon-x{flex:0 0 auto;width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);color:var(--ink-3);cursor:pointer;font-size:1rem;line-height:1}
.icon-x:hover{color:var(--clay);border-color:var(--clay)}
.plan-edit__foot{display:flex;gap:.55rem .9rem;align-items:center;flex-wrap:wrap;padding-top:.8rem;border-top:1px solid var(--line);margin-top:.3rem}
.plan-edit__foot .spacer{flex:1}
.plan-edit__foot .save-hint{margin-right:auto}
.foot-actions{display:flex;gap:.5rem;flex-wrap:wrap}
/* plain checkbox+label — distinct from groundwork.css's 44px .switch toggle component */
.gw-check{display:inline-flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--ink-2);cursor:pointer;white-space:nowrap}
.gw-check input{accent-color:var(--ember);width:16px;height:16px;flex:none}
.save-hint{font-size:.8rem;color:var(--ink-3)}
.save-hint.dirty{color:var(--ember)}

/* ---------- Routines editor (Phase 5b.2) ---------- */
.rt-edit{display:flex;flex-direction:column;gap:1.1rem}
.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--r-full);padding:3px;background:var(--surface-2);gap:2px}
.seg button{border:0;background:transparent;color:var(--ink-2);padding:.4rem .9rem;border-radius:var(--r-full);font:inherit;font-size:.85rem;font-weight:600;cursor:pointer}
.seg button.on{background:var(--ember);color:#fff}
.tg-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);padding:.9rem 1rem}
.tg-card+.tg-card{margin-top:.7rem}
.tg-days{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.7rem}
.day-chip{width:38px;height:34px;display:grid;place-items:center;border:1px solid var(--line-strong);border-radius:var(--r-sm);
  background:var(--bg);color:var(--ink-2);font-size:.78rem;font-weight:600;cursor:pointer;text-transform:capitalize;user-select:none}
.day-chip.on{background:var(--ember);border-color:var(--ember);color:#fff}
.tg-row{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
.tg-row label{font-size:.78rem;color:var(--ink-3)}
.tg-row input[type=time],.tg-row input.dur,.rt-amb input,.rt-amb select{padding:.5rem .6rem;border:1px solid var(--line-strong);
  border-radius:var(--r-sm);background:var(--bg);color:var(--ink);font-size:.9rem}
.tg-row input.dur{width:80px}
.tg-row .spacer{flex:1}
.rt-amb{display:flex;gap:1rem;flex-wrap:wrap;align-items:flex-end}
.rt-amb .fld{display:flex;flex-direction:column;gap:.3rem}
.rt-amb .fld label{font-size:.78rem;color:var(--ink-3)}
.rt-amb input.num{width:90px}
.rt-note{font-size:.82rem;color:var(--ink-3);display:flex;gap:.4rem;align-items:flex-start}
.rt-note.warn{color:var(--gold)}
.rt-summary{font-size:.78rem;color:var(--ink-3)}
.kind-pill{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em}

/* ---------- Plan creation: chooser / templates / coach form / picker (5b.3) ---------- */
.mode-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.9rem}
.mode-card{display:flex;flex-direction:column;gap:.3rem;text-align:left;padding:1.1rem;border:1px solid var(--line-strong);
  border-radius:var(--r-lg);background:var(--surface);cursor:pointer;transition:border-color .15s,transform .1s;font:inherit;color:inherit}
.mode-card:hover{border-color:var(--ember);transform:translateY(-2px)}
.mode-card__emoji{font-size:1.5rem}
.mode-card b{font-size:.98rem}
.mode-card span{font-size:.8rem;color:var(--ink-3)}
.tpl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.8rem}
.tpl-card{display:flex;flex-direction:column;gap:.35rem;text-align:left;padding:1rem;border:1px solid var(--line);
  border-radius:var(--r-lg);background:var(--surface);cursor:pointer;transition:border-color .15s,transform .1s;font:inherit;color:inherit}
.tpl-card:hover{border-color:var(--ember);transform:translateY(-2px)}
.tpl-card b{font-size:.95rem}
.tpl-card span{font-size:.8rem;color:var(--ink-3)}
.coach-form{display:flex;flex-direction:column;gap:.7rem}
.coach-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.8rem}
.coach-form .fld{display:flex;flex-direction:column;gap:.3rem}
.coach-form .fld span{font-size:.78rem;color:var(--ink-3)}
.coach-form select,.coach-form input{padding:.55rem .65rem;border:1px solid var(--line-strong);border-radius:var(--r-sm);
  background:var(--bg);color:var(--ink);font:inherit;font-size:.9rem}
.coach-form select:focus,.coach-form input:focus{outline:none;border-color:var(--ember);box-shadow:var(--ring)}

.ex-overlay{position:fixed;inset:0;background:rgba(33,26,18,.45);display:grid;place-items:center;padding:20px;z-index:80}
.ex-overlay.hidden{display:none}
.ex-picker{width:100%;max-width:460px;max-height:80vh;display:flex;flex-direction:column;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--shadow-lg);overflow:hidden}
.ex-picker__head{display:flex;gap:.6rem;padding:.9rem;border-bottom:1px solid var(--line)}
.ex-picker__head input{flex:1;padding:.6rem .7rem;border:1px solid var(--line-strong);border-radius:var(--r-md);
  background:var(--bg);color:var(--ink);font:inherit;font-size:.95rem}
.ex-picker__head input:focus{outline:none;border-color:var(--ember);box-shadow:var(--ring)}
.ex-picker__head .icon-x{width:auto;padding:0 .8rem;font-size:.82rem;font-weight:600}
.ex-picker__chips{display:flex;flex-wrap:wrap;gap:.4rem;padding:.7rem .9rem;border-bottom:1px solid var(--line)}
.ex-chip{padding:.3rem .7rem;border:1px solid var(--line-strong);border-radius:var(--r-full);background:var(--bg);
  color:var(--ink-2);font:inherit;font-size:.78rem;font-weight:600;cursor:pointer}
.ex-chip.on{background:var(--ember);border-color:var(--ember);color:#fff}
.ex-picker__list{overflow-y:auto;padding:.5rem}
.ex-item{display:flex;justify-content:space-between;align-items:center;gap:.6rem;width:100%;text-align:left;
  padding:.6rem .7rem;border:0;border-radius:var(--r-md);background:transparent;color:inherit;font:inherit;cursor:pointer}
.ex-item:hover{background:var(--surface-2)}
.ex-item b{font-size:.9rem;font-weight:500}
.ex-item span{font-size:.74rem;color:var(--ink-3)}
.ex-item--custom{color:var(--ember);font-weight:600;font-size:.85rem}


/* ============================================================
   v2 REDESIGN (ported from prototype/v2 — 16 Jun)
   ============================================================ */
/* v2: all-Inter dashboard — drop Fraunces serif from headings AND big numerals.
   Scoped override of the design-system display font (Leo's call, 16 Jun). */
:root{--font-display:"Inter",-apple-system,"Segoe UI",Roboto,sans-serif}

.view-head h2{font-size:1.55rem;margin:0;font-family:var(--font-body);font-weight:700;letter-spacing:-.02em}
/* ---------- v2: weather chip on the greeting ---------- */
.greet-row{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap}
.weather-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.32rem .7rem .32rem .55rem;
  border:1px solid var(--line);border-radius:999px;background:var(--surface-2);font-size:.84rem;line-height:1}
.weather-chip svg{width:18px;height:18px;flex:none}
.weather-chip b{font-weight:700;font-feature-settings:"tnum"}
.weather-chip span{color:var(--ink-3)}
.weather-chip .sun{color:#e8a33d}.weather-chip .cloud{color:#8a93a0}.weather-chip .rain{color:#5b8bb0}

.kpi{padding:1.1rem 1.25rem;display:flex;flex-direction:column}
.kpi__spark{margin-top:.55rem;height:34px}
.kpi__spark svg{width:100%;height:34px;display:block}

/* ============================================================
   v2 — Routines: rich overview cards + click-to-edit drawer
   ============================================================ */
.routine-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.1rem}
.routine-card{padding:1.15rem 1.25rem;cursor:pointer;transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease;position:relative}
.routine-card:hover{transform:translateY(-2px);box-shadow:0 10px 26px -16px rgba(20,14,8,.5);border-color:var(--line-strong,var(--line))}
.routine-card:focus-visible{outline:2px solid var(--ember);outline-offset:2px}
.routine-card.skel-card{cursor:default;pointer-events:none}
.routine-card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:.6rem}
.routine-card__title{font-weight:700;font-size:1.06rem;letter-spacing:-.01em}
.routine-card__edit{opacity:0;color:var(--ink-3);transition:opacity .14s ease;flex:none}
.routine-card:hover .routine-card__edit{opacity:1}
.routine-chips{display:flex;flex-wrap:wrap;gap:.32rem;margin:.6rem 0 .9rem}
.daychip{font-size:.72rem;font-weight:600;padding:.16rem .45rem;border-radius:6px;background:var(--surface-3);color:var(--ink-2);text-transform:capitalize}
.daychip--time{background:transparent;color:var(--ink-3);font-family:var(--font-mono);padding-left:.2rem}
.routine-stat{display:flex;align-items:center;gap:.6rem;margin-bottom:.7rem}
.routine-bar{flex:1;height:7px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.routine-bar__fill{height:100%;border-radius:99px}
.routine-stat__num{font-size:.82rem;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.routine-streak{font-size:.78rem;color:var(--ink-3);font-weight:600;white-space:nowrap}
.routine-next{font-size:.8rem;color:var(--ink-2);margin-bottom:.85rem;display:flex;align-items:center;gap:.4rem}
.routine-next b{color:var(--ink);font-weight:600}
.adh6{display:flex;align-items:flex-end;gap:3px;height:30px}
.adh6 i{flex:1;border-radius:3px 3px 0 0;min-height:3px;opacity:.85}
.adh6__label{font-size:.66rem;color:var(--ink-3);margin-top:.3rem;letter-spacing:.04em;text-transform:uppercase}
.tag-ambient,.tag-scheduled{font-size:.66rem;font-weight:700;padding:.16rem .45rem;border-radius:5px;text-transform:uppercase;letter-spacing:.05em;flex:none}
.tag-scheduled{background:color-mix(in srgb,var(--moss) 16%,transparent);color:var(--moss)}
.tag-ambient{background:color-mix(in srgb,var(--slate) 16%,transparent);color:var(--slate)}

/* drawer (reused later by gym/bjj session edit) */
.drawer-scrim{position:fixed;inset:0;background:rgba(15,10,5,.42);opacity:0;pointer-events:none;transition:opacity .2s ease;z-index:60}
.drawer-scrim.is-open{opacity:1;pointer-events:auto}
/* centred pop-up modal — web AND phone (all editors share this element) */
.drawer{position:fixed;top:50%;left:50%;width:min(460px,94vw);max-height:88vh;
  background:var(--surface);border:1px solid var(--line);border-radius:18px;overflow:hidden;
  box-shadow:0 34px 74px -26px rgba(20,14,8,.62);z-index:61;display:flex;flex-direction:column;
  opacity:0;pointer-events:none;transform:translate(-50%,calc(-50% + 12px)) scale(.97);
  transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s ease}
.drawer.is-open{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}
.drawer__head{display:flex;align-items:center;justify-content:space-between;padding:1.2rem 1.3rem;border-bottom:1px solid var(--line)}
.drawer__head h3{margin:0;font-size:1.12rem;font-weight:700}
.drawer__close{background:none;border:none;color:var(--ink-3);cursor:pointer;padding:.2rem;border-radius:6px}
.drawer__close:hover{color:var(--ink);background:var(--surface-3)}
.drawer__body{padding:1.3rem;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:1.15rem}
.drawer__foot{padding:1rem 1.3rem;border-top:1px solid var(--line);display:flex;gap:.6rem;align-items:center}
.field-label{font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);margin-bottom:.4rem;display:block}
.field-input{width:100%;padding:.6rem .7rem;border:1px solid var(--line);border-radius:9px;background:var(--surface-2);font:inherit;color:var(--ink)}
.field-input:focus{outline:none;border-color:var(--ember)}
/* Keyboard focus ring for interactive elements whose :focus rules clear the outline
   (inputs keep their border-color cue above). */
a:focus-visible,button:focus-visible,[role="button"]:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--ember);outline-offset:2px;border-radius:6px}
.wk-toggle{display:flex;gap:.35rem;flex-wrap:wrap}
.wk-toggle button{width:38px;height:38px;border-radius:9px;border:1px solid var(--line);background:var(--surface-2);font-size:.74rem;font-weight:700;
  color:var(--ink-3);cursor:pointer;text-transform:capitalize;transition:all .12s ease}
.wk-toggle button.on{background:var(--moss);border-color:var(--moss);color:#fff}
.stat-box{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:.85rem 1rem}
.stat-box__k{font-size:.78rem;color:var(--ink-3);font-weight:600}
.stat-box__v{font-size:1.3rem;font-weight:700;margin-top:.15rem}
/* editable log rows inside the drawer */
.logrows{display:flex;flex-direction:column;gap:.5rem}
.logrow{display:grid;grid-template-columns:1fr .9fr auto;gap:.4rem;align-items:center}
.logrow__del{width:30px;height:30px;border:1px solid var(--line);background:var(--surface-2);border-radius:8px;color:var(--ink-3);cursor:pointer;font-size:1.1rem;line-height:1}
.logrow__del:hover{color:var(--clay);border-color:var(--clay)}

/* Info-tip — a small contextual help affordance injected into card headers.
   Click-to-toggle (works on touch), viewport-aware popover, never hides content. */
.info-tip{margin-left:.45rem;width:18px;height:18px;border-radius:50%;border:1px solid var(--line);background:var(--surface-2);
  color:var(--ink-3);font-size:.72rem;font-weight:700;line-height:1;cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;flex:none;vertical-align:middle;font-style:italic;font-family:Georgia,"Times New Roman",serif;transition:background .15s,color .15s,border-color .15s}
.info-tip:hover,.info-tip[aria-expanded="true"]{background:var(--ink-2);color:var(--surface);border-color:transparent}
.info-pop{position:absolute;z-index:120;max-width:280px;background:var(--ink);color:var(--surface);font-size:.8rem;line-height:1.45;
  font-weight:400;padding:.6rem .75rem;border-radius:9px;box-shadow:0 10px 30px rgba(0,0,0,.24)}
.info-pop::after{content:"";position:absolute;top:-5px;left:var(--arrow,16px);width:10px;height:10px;background:var(--ink);
  transform:rotate(45deg);border-radius:2px}

/* ============================================================
   v2 — two-column split + list rows (notes/memory, gym, bjj)
   ============================================================ */
.split2{display:grid;grid-template-columns:1fr 1fr;gap:1.4rem;align-items:start}
@media(max-width:900px){.split2{grid-template-columns:1fr}}
.split2 .panel{display:flex;flex-direction:column}
.panel__sub{padding:.7rem 1.1rem;border-bottom:1px solid var(--line)}
.filter-input{width:100%;padding:.5rem .7rem;border:1px solid var(--line);border-radius:8px;background:var(--surface-2);font:inherit;font-size:.86rem;color:var(--ink)}
.filter-input:focus{outline:none;border-color:var(--ember)}
.li-list{max-height:560px;overflow-y:auto}

/* Notes — inline composer is the dominant action; search is demoted below it */
.note-compose{display:flex;flex-direction:column;gap:.55rem;padding:.9rem 1.1rem;border-bottom:1px solid var(--line)}
.note-compose__input{width:100%;padding:.65rem .8rem;border:1.5px solid var(--line);border-radius:10px;background:var(--surface);
  font:inherit;font-size:.92rem;color:var(--ink);resize:vertical;min-height:2.6rem;line-height:1.4}
.note-compose__input::placeholder{color:var(--ink-3)}
.note-compose__input:focus{outline:none;border-color:var(--ember);box-shadow:0 0 0 3px var(--ember-soft,rgba(200,90,40,.12))}
.note-compose__add{align-self:flex-end}
.note-search{display:flex;align-items:center;gap:.45rem;margin:.6rem 1.1rem;padding:.35rem .6rem;
  border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
.note-search__ic{color:var(--ink-3);flex:none}
.note-search__input{flex:1;border:0;background:transparent;font:inherit;font-size:.82rem;color:var(--ink-2);padding:.15rem 0}
.note-search__input:focus{outline:none}
.note-search__input::placeholder{color:var(--ink-3)}
.li-row{display:flex;align-items:flex-start;gap:.7rem;padding:.85rem 1.1rem;border-bottom:1px solid var(--line)}
.li-row:last-child{border-bottom:none}
.li-emoji{font-size:1.05rem;line-height:1.3;flex:none}
.li-brain{filter:saturate(1.1)}
.li-dot{width:9px;height:9px;border-radius:50%;flex:none;margin-top:.42rem}
.li-body{min-width:0;flex:1}
.li-body b{font-weight:600;font-size:.94rem;display:block}
.li-snip{margin:.15rem 0 .3rem;color:var(--ink-2);font-size:.85rem;line-height:1.4;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.li-meta{font-size:.76rem;color:var(--ink-3);display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}
.pr-row{align-items:center}
.pr-row__w{font-weight:700;font-size:1.05rem;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink)}
/* editable session rows */
.sess-edit{cursor:pointer;transition:background .12s ease}
.sess-edit:hover{background:var(--surface-2)}
.sess-edit:focus-visible{outline:2px solid var(--ember);outline-offset:-2px}
.sess-edit .meta{display:flex;align-items:center;gap:.5rem}
.sess-edit__pen{color:var(--ink-3);opacity:0;transition:opacity .12s ease}
.sess-edit:hover .sess-edit__pen{opacity:1}

/* v2 port — small adjustments for the live (real-data) dashboard */
.spark-flat{height:34px;background:linear-gradient(var(--line),var(--line)) left center/100% 2px no-repeat;opacity:.7}
.greet-row-wrap{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem}
.greet-row-wrap p{width:100%;margin:0}
.logrow{grid-template-columns:1fr 54px 54px 54px auto}
.logrow--bjj{grid-template-columns:1fr .95fr auto}
.lg-num{text-align:center;padding-left:.3rem;padding-right:.3rem}

/* mobile: workout-plan editor fit — the day header packs name+type+reorder+delete and
   .day-card is overflow:hidden, so on a phone the controls were clipped. Wrap the header
   (name on its own line, controls below) and let everything shrink. */
/* grid items default to min-width:auto and expand to their content's min-content, so on a
   phone the stacked plan-layout cards grew ~17px wider than the screen — clamp to the column. */
.plan-layout > *{min-width:0}
@media(max-width:560px){
  .day-card__head{flex-wrap:wrap}
  .day-card__head input{flex:1 1 100%}
  .day-card__head select{flex:1 1 auto;min-width:0}
  .ex-row input.ex-target{width:64px}
  .plan-edit input.plan-name{min-width:0}
}

/* ===== Insights-in-tab: trend badges, segmented control, exercise rows, funnel =====
   Added when the standalone Insights view was folded into Gym + BJJ. Compact, token-only. */

/* two CTAs in a view-head (BJJ: Edit profile + Ask Marco) */
.head-actions{display:flex;gap:.5rem;flex-wrap:wrap}

/* segmented window control inside a panel head (4w / 12w) */
.seg{display:inline-flex;background:var(--surface-3);border-radius:var(--r-full);padding:2px;gap:2px}
.seg__btn{border:0;background:none;cursor:pointer;font:inherit;font-size:.74rem;font-weight:600;
  color:var(--ink-3);padding:.2rem .6rem;border-radius:var(--r-full);line-height:1.4;transition:background .15s,color .15s}
.seg__btn:hover{color:var(--ink-2)}
.seg__btn.is-active{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}

/* one trend vocabulary for gym lifts + BJJ moves */
.trend-badge{flex:none;align-self:center;font-size:.72rem;font-weight:600;white-space:nowrap;
  padding:.14rem .5rem;border-radius:var(--r-full);font-variant-numeric:tabular-nums}
.tb-up{background:var(--moss-soft);color:var(--moss)}
.tb-down{background:var(--clay-soft);color:var(--clay)}
.tb-warn{background:var(--ember-soft);color:var(--ember-deep)}
[data-theme="dark"] .tb-warn{color:var(--ember-bright)}
.tb-flat{background:var(--surface-3);color:var(--ink-3)}

/* Gym Exercises list — PR + progression fused, expandable for the detail read */
.gx-item{border-bottom:1px solid var(--line)}
.gx-item:last-child{border-bottom:none}
.gx-row{align-items:center;gap:.6rem;border-bottom:0;cursor:default}
.gx-item.is-expandable .gx-row{cursor:pointer}
.gx-item.is-expandable .gx-row:hover{background:var(--surface-2)}
.gx-row__w{flex:none;font-weight:700;font-size:1rem;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink)}
.gx-row__chev{flex:none;color:var(--ink-3);transition:transform .2s ease}
.gx-item.is-open .gx-row__chev{transform:rotate(180deg)}
.gx-detail{display:none;padding:0 1.1rem .9rem 1.1rem}
.gx-item.is-open .gx-detail{display:block}
.gx-detail p{margin:0 0 .35rem;color:var(--ink-2);font-size:.86rem;line-height:1.45}

/* BJJ technique funnel: drilled → landed → finished, lit to the furthest stage reached */
.funnel{display:inline-flex;gap:3px;margin:.3rem 0 .15rem;width:100%;max-width:220px}
.funnel__seg{flex:1;height:18px;border-radius:4px;background:var(--surface-3);
  display:flex;align-items:center;justify-content:center;position:relative;opacity:.55}
.funnel__seg i{font-style:normal;font-size:.68rem;font-weight:700;color:var(--ink-3);font-variant-numeric:tabular-nums}
.funnel__seg.is-on{opacity:1}
.funnel__seg.fs-drill.is-on{background:var(--slate-soft)}
.funnel__seg.fs-drill.is-on i{color:var(--slate)}
.funnel__seg.fs-land.is-on{background:var(--moss-soft)}
.funnel__seg.fs-land.is-on i{color:var(--moss)}
.funnel__seg.fs-finish.is-on{background:var(--ember-soft)}
.funnel__seg.fs-finish.is-on i{color:var(--ember-deep)}
[data-theme="dark"] .funnel__seg.fs-finish.is-on i{color:var(--ember-bright)}
.funnel-row .li-body{display:flex;flex-direction:column}

/* demoted admin: the exercise-alias manager as a collapsed panel at the foot of Gym */
.panel--collapse{padding:0}
.panel--collapse>summary{cursor:pointer;list-style:none;margin:0}
.panel--collapse>summary::-webkit-details-marker{display:none}
.panel--collapse>summary::after{content:"";width:9px;height:9px;border-right:2px solid var(--ink-3);
  border-bottom:2px solid var(--ink-3);transform:rotate(-45deg);transition:transform .2s ease;flex:none;margin-left:auto}
.panel--collapse[open]>summary::after{transform:rotate(45deg)}
.panel--collapse[open]>summary{border-bottom:1px solid var(--line)}
.panel--collapse:not([open])>summary{border-bottom:0}

/* ===== v2 feedback: compact charts on the side, richer expand, glance redesign ===== */

/* Gym: Exercises list (wide) with a right-hand stack of Volume + Balance.
   BJJ: At-a-glance (wide) beside a compact Rounds chart. Custom columns desktop-only so
   the base .split2 mobile stack (≤900px) still applies. */
.gx-side{display:flex;flex-direction:column;gap:1.4rem;min-width:0}
@media(min-width:901px){
  .gx-split{grid-template-columns:1.5fr 1fr}
  .bjj-split{grid-template-columns:1.4fr 1fr}
}

/* compact bar charts in a narrow column — keep them small, bars anchored at the foot */
.chart-wrap--sm svg{max-height:150px}

/* expanded exercise detail: emoji-driven stat lines + Marco's comment */
.gx-stats{list-style:none;margin:.1rem 0 .5rem;padding:0;display:flex;flex-direction:column;gap:.32rem}
.gx-stats li{font-size:.84rem;color:var(--ink-2);line-height:1.4;font-variant-numeric:tabular-nums}
.gx-detail p{margin:.35rem 0 0;padding-top:.45rem;border-top:1px solid var(--line)}
/* Per-exercise recent sets — tap a row to edit that session */
.gx-recent{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--line)}
.gx-recent__h{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);margin-bottom:.35rem}
.gx-recent__row{display:flex;align-items:center;gap:.6rem;width:100%;text-align:left;padding:.5rem .6rem;border:1px solid var(--line);
  border-radius:9px;background:var(--surface);cursor:pointer;margin-bottom:.35rem;transition:background .15s,border-color .15s;color:inherit}
.gx-recent__row:last-child{margin-bottom:0}
.gx-recent__row:hover{background:var(--surface-2);border-color:var(--ink-3)}
.gx-recent__d{font-size:.8rem;color:var(--ink-3);flex:none;min-width:5.5rem}
.gx-recent__v{font-size:.86rem;font-weight:600;color:var(--ink);flex:1;font-variant-numeric:tabular-nums}
.gx-recent__row .sess-edit__pen{color:var(--ink-3);flex:none}

/* BJJ At-a-glance: stat tiles tinted to the funnel vocabulary (finish/land/drill) */
.glance-stat.gs-finish b{color:var(--ember-deep)}
[data-theme="dark"] .glance-stat.gs-finish b{color:var(--ember-bright)}
.glance-stat.gs-land b{color:var(--moss)}
.glance-stat.gs-drill b{color:var(--slate)}

/* Gi / No-Gi proportional split bar (Gi = moss fill, No-Gi = remaining track) */
.glance-split{padding:.3rem 1.3rem .7rem}
.glance-split__head{display:flex;justify-content:space-between;align-items:baseline;
  font-size:.77rem;font-weight:600;color:var(--ink-2);margin-bottom:.38rem}
.glance-split__head .muted{font-weight:500}
.glance-split__bar{height:8px;border-radius:6px;background:var(--slate-soft);overflow:hidden}
.glance-split__bar span{display:block;height:100%;background:var(--moss);border-radius:6px;transition:width .4s ease}
.glance-foc__chips{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.15rem}
.glance-foc__chips .pill{margin:0}

/* ============================================================
   Finance tab — net position, spending, allocation, uploads
   ============================================================ */
.fin-currencies{display:flex;flex-wrap:wrap;gap:.5rem .9rem;align-items:baseline}
.fin-currency{font-family:var(--font-display);font-size:1.5rem;font-weight:600;line-height:1.1}
.fin-currency span{font-size:.78rem;font-weight:600;color:var(--ink-3);margin-left:.25rem}
.fin-note{font-size:.8rem;color:var(--ink-3);margin:.5rem 0 0}

.fin-spend-row{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.1rem}
@media(max-width:680px){.fin-spend-row{grid-template-columns:1fr}}
.fin-spend-stat{padding:.85rem 1rem;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}
.fin-spend-stat b{display:block;font-family:var(--font-display);font-size:1.3rem;font-weight:600}
.fin-spend-stat span{font-size:.76rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em;font-weight:600}
.fin-spend-stat.is-income b{color:var(--moss)}
.fin-spend-stat.is-spending b{color:var(--clay)}
.fin-spend-stat.is-net.up b{color:var(--moss)}
.fin-spend-stat.is-net.down b{color:var(--clay)}

.fin-cat-row{display:flex;align-items:center;gap:.7rem;padding:.4rem 0}
.fin-cat-row__label{width:120px;flex:none;font-size:.82rem;font-weight:600;color:var(--ink-2);text-transform:capitalize;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fin-cat-row__track{flex:1;height:9px;border-radius:6px;background:var(--surface-3);overflow:hidden}
.fin-cat-row__fill{display:block;height:100%;border-radius:6px;background:var(--ember);transition:width .4s ease}
.fin-cat-row__amt{width:84px;flex:none;text-align:right;font-size:.8rem;color:var(--ink-3);font-variant-numeric:tabular-nums}

.fin-alloc{display:grid;grid-template-columns:1fr 1fr;gap:1.6rem}
@media(max-width:680px){.fin-alloc{grid-template-columns:1fr}}
.fin-alloc h4{margin:0 0 .6rem;font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:700}
.fin-alloc-row{display:flex;align-items:center;gap:.6rem;padding:.32rem 0;font-size:.85rem}
.fin-alloc-row__label{flex:1;min-width:0;text-transform:capitalize;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fin-alloc-row__amt{flex:none;font-weight:600;font-variant-numeric:tabular-nums}

.fin-hold-row .li-body b{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.fin-hold-row__amt{flex:none;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink)}

.fin-snap-del{flex:none;margin-left:auto;align-self:center;background:none;border:0;cursor:pointer;
  color:var(--ink-3);padding:.3rem;border-radius:8px;opacity:0;transition:opacity .15s,color .15s,background .15s}
.li-row:hover .fin-snap-del,.fin-snap-del:focus-visible{opacity:1}
.fin-snap-del:hover{color:var(--clay);background:var(--surface-3)}
@media(hover:none){.li-row .fin-snap-del{opacity:1}}

.fin-trust{font-size:.78rem;color:var(--ink-3);margin:0 0 .8rem;padding:.55rem .7rem;background:var(--surface-2);
  border-radius:var(--r-md);border-left:3px solid var(--moss)}
/* Inside a card, the tinted blurb must be INSET from the card's edges. Callers used
   to override .fin-trust's padding to 1.2rem, but padding cannot inset a background —
   the tint ran edge to edge (audit 2026-08-05). Margin is what insets it. */
.fin-trust--inset{margin:.7rem 1.2rem .9rem}
/* Structural backstop. `.panel` zeroes the card's own 1.5rem padding so its head
   and body can supply their own, which means ANY other direct child paints edge to
   edge. Give the tinted blocks the same 1.3rem gutter `.panel__body` uses, so they
   line up with the card's text instead of running into its border. Scoped to
   `.card.panel` on purpose: a plain `.card` keeps its padding, and applying a
   margin there too would double-inset. Blurbs nested inside `.panel__body` are
   already inset by that body and are left alone. */
.card.panel > .fin-trust{margin-left:1.3rem;margin-right:1.3rem}
.card.panel > .fin-ai{margin:.7rem 1.3rem 1.2rem}
.fin-upload-btn{display:inline-flex;cursor:pointer}
.fin-head-actions{display:flex;align-items:flex-start;gap:.6rem}
.fin-eye{font-size:1rem;line-height:1;padding:.4rem .55rem}
/* Privacy blur: hide every money value in the finance view behind the eye toggle. */
[data-view="finance"].balances-hidden .fin-estate__total b,
[data-view="finance"].balances-hidden .fin-estate__chip b,
[data-view="finance"].balances-hidden .kpi__value,
[data-view="finance"].balances-hidden .fin-spend-stat b,
[data-view="finance"].balances-hidden .fin-cat-row__amt,
[data-view="finance"].balances-hidden .fin-alloc-row__amt,
[data-view="finance"].balances-hidden .fin-hold-row__amt,
[data-view="finance"].balances-hidden .fin-alert-group__price,
[data-view="finance"].balances-hidden .fin-trend-row__amt,
[data-view="finance"].balances-hidden .fin-money,
[data-view="finance"].balances-hidden .fin-currency{
  filter:blur(8px);transition:filter .12s;user-select:none}
/* Inline AI comments under the Overview + Spending cards (Hub v2). */
.fin-ai{display:flex;gap:.55rem;align-items:flex-start;margin:.7rem 0 0;padding:.6rem .75rem;
  background:var(--ember-ghost,var(--surface-2));border-radius:var(--r-md);border-left:3px solid var(--ember)}
.fin-ai__icon{font-size:1rem;line-height:1.3}
.fin-ai__text{font-size:.86rem;line-height:1.5;color:var(--ink)}
.fin-ai__disc{display:block;margin-top:.2rem;font-size:.7rem;color:var(--ink-3)}
/* Provider picker — the entry point. A grid of source cards, each showing its
   current total so the user sees what's tracked before opening it. */
.fin-prov-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;margin-bottom:1.2rem}
@media(max-width:720px){.fin-prov-cards{grid-template-columns:1fr 1fr}}
.fin-prov-card{display:flex;flex-direction:column;gap:.25rem;align-items:flex-start;text-align:left;
  font:inherit;cursor:pointer;padding:.85rem .9rem;border:1px solid var(--line-strong);
  border-radius:var(--r-md);background:var(--surface);
  transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}
.fin-prov-card:hover{border-color:var(--ember)}
.fin-prov-card[aria-checked="true"]{border-color:var(--ember);box-shadow:inset 0 0 0 1px var(--ember);background:var(--ember-ghost)}
.fin-prov-card:focus-visible{outline:2px solid var(--ember);outline-offset:2px}
.fin-prov-card__name{font-weight:600;font-size:.92rem;color:var(--ink)}
.fin-prov-card__meta{font-size:.8rem;color:var(--ink-2);font-variant-numeric:tabular-nums}
.fin-prov-card__meta.is-empty{color:var(--ink-3);font-style:italic}

/* Holdings editor — opens under the cards for the selected source. */
.fin-holdings__head{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;
  margin-bottom:.8rem;padding-bottom:.75rem;border-bottom:1px solid var(--line)}
.fin-holdings__title{display:flex;align-items:center;gap:.9rem;flex-wrap:wrap}
.fin-holdings__title b{font-family:var(--font-display);font-size:1.2rem;font-weight:600}
.fin-holdings__acct{display:inline-flex;align-items:center;gap:.45rem;font-size:.7rem;font-weight:700;
  text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3)}
.fin-holdings__acct .field-input{width:auto;text-transform:none;letter-spacing:normal;font-weight:500}
.fin-holdings__total{font-size:.7rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em;
  font-weight:700;text-align:right;white-space:nowrap}
.fin-holdings__total b{display:block;margin-top:.1rem;font-family:var(--font-display);font-size:1.45rem;
  color:var(--ink);text-transform:none;letter-spacing:normal;font-variant-numeric:tabular-nums}
.fin-holdings__cols{display:grid;grid-template-columns:8rem 1fr 4rem 7rem auto;gap:.4rem;
  /* border-inline mirrors each row's 1px side border so the header columns line up
     exactly with the row inputs (box-sizing:border-box → identical track widths). */
  padding:0 .6rem .35rem;border-inline:1px solid transparent;
  font-size:.66rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;color:var(--ink-3)}
@media(max-width:680px){.fin-holdings__cols{display:none}}

/* One holding = a bordered block: a main line (type · name · currency · value · ×)
   plus a contextual detail line that depends on the asset class. */
.fin-hrow{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);
  padding:.6rem;margin-bottom:.55rem}
.fin-hrow__main{display:grid;grid-template-columns:8rem 1fr 4rem 7rem auto;gap:.4rem;align-items:center}
.fin-hrow__detail{display:none;gap:.4rem;align-items:center;flex-wrap:wrap;margin-top:.5rem;
  padding-top:.5rem;border-top:1px dashed var(--line-strong)}
.fin-hrow[data-class="crypto"] .fin-hrow__detail--crypto{display:flex}
.fin-hrow[data-class="fixed_income"] .fin-hrow__detail--fi{display:flex}
.fin-hrow__detail .field-input{flex:0 1 7rem}
.fin-hrow__detail .fin-h-rate{flex:0 0 5.5rem}
.fin-hrow__detail .fin-h-qty{flex:0 0 6rem}
.fin-h-hint{flex-basis:100%;font-size:.74rem;color:var(--ink-3);min-height:.9rem}
.fin-h-del{padding:.4rem .6rem;line-height:1}
/* Crypto value is auto-priced — make it read as derived, still editable as a fallback. */
.fin-hrow[data-class="crypto"] .fin-h-amt{background:var(--surface-3)}
.fin-manual__actions{margin-top:.7rem}

/* Confirmed merchants collapse into a disclosure so the review list stays focused on
   what still needs a decision; each confirmed row is still clickable to re-edit. */
.fin-confirmed{margin-top:.9rem;border-top:1px solid var(--line)}
.fin-confirmed>summary{cursor:pointer;list-style:none;padding:.75rem .2rem;
  font-size:.82rem;font-weight:700;color:var(--ink-2);display:flex;align-items:center;gap:.4rem}
.fin-confirmed>summary::-webkit-details-marker{display:none}
.fin-confirmed>summary::before{content:"▸";color:var(--ink-3);transition:transform .15s}
.fin-confirmed[open]>summary::before{content:"▾"}
.fin-confirmed__list{padding-top:.4rem}
.fin-mrow--all-done{padding:1rem 1.2rem;color:var(--ink-2);font-size:.9rem}
@media(max-width:680px){
  .fin-hrow__main{grid-template-columns:1fr 1fr;gap:.45rem}
  .fin-hrow__main .fin-h-name{grid-column:1 / -1}
  .fin-hrow__main .fin-h-del{grid-column:2;justify-self:end}
}
.fin-upload-empty{text-align:center;padding:2rem 1rem}
.fin-upload-empty .fin-trust{display:inline-block;text-align:left;margin:1rem auto 0}

.fin-spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--line-strong);
  border-top-color:var(--ember);border-radius:50%;animation:fin-spin .7s linear infinite;vertical-align:-2px;margin-right:.4rem}
@keyframes fin-spin{to{transform:rotate(360deg)}}
.fin-upload-msg{margin-top:.7rem;font-size:.84rem;color:var(--ink-2)}
.fin-upload-msg.is-error{color:var(--clay)}

.fin-preview-card{margin-top:1rem;border:1px solid var(--line);border-radius:var(--r-md);padding:.9rem 1rem;background:var(--surface-2)}
.fin-preview-card h4{margin:0 0 .3rem;font-size:.92rem}
.fin-preview-card .li-meta{margin-bottom:.6rem}
.fin-preview-list{list-style:none;margin:0 0 .8rem;padding:0;display:flex;flex-direction:column;gap:.3rem;max-height:220px;overflow-y:auto}
.fin-preview-list li{display:flex;justify-content:space-between;gap:.6rem;font-size:.82rem;color:var(--ink-2)}
.fin-preview-list li b{color:var(--ink);font-weight:600}
.fin-preview-actions{display:flex;gap:.6rem;margin-top:.6rem}

.fin-month-field{display:flex;flex-direction:column;gap:.3rem;margin:.2rem 0 .7rem;font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;font-weight:700;color:var(--ink-3)}
.fin-month-field input{font:inherit;font-weight:500;letter-spacing:normal;text-transform:none;padding:.45rem .55rem;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);color:var(--ink)}

.fin-trend-block{margin-bottom:1.1rem}
.fin-trend-block:last-child{margin-bottom:0}
.fin-trend-block h4{margin:0 0 .55rem;font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:700}
.fin-trend-row{display:flex;align-items:center;gap:.7rem;padding:.28rem 0;font-size:.84rem}
.fin-trend-row__label{width:64px;flex:none;color:var(--ink-3);font-variant-numeric:tabular-nums}
.fin-trend-row__track{flex:1;height:9px;border-radius:6px;background:var(--surface-3);overflow:hidden}
.fin-trend-row__fill{display:block;height:100%;border-radius:6px;background:var(--ember);transition:width .4s ease}
.fin-trend-row__fill.is-up{background:var(--moss,#2ea043)}
.fin-trend-row__fill.is-down{background:var(--danger,#c0392b)}
.fin-trend-row__amt.is-up{color:var(--moss,#2ea043)}
.fin-trend-row__amt.is-down{color:var(--danger,#c0392b)}
/* Monthly spending heat-map (Hub v2) */
.fin-heat__grid{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.5rem}
.fin-heat-cell{flex:1 1 64px;min-width:64px;padding:.5rem .4rem;border-radius:8px;text-align:center;display:flex;flex-direction:column;gap:.2rem;border:1px solid var(--line)}
.fin-heat-cell__m{font-size:.7rem;color:var(--ink-3);text-transform:uppercase}
.fin-heat-cell b{font-size:.8rem;font-variant-numeric:tabular-nums}
.fin-heat-cell.is-low{background:rgba(46,160,67,.16);border-color:rgba(46,160,67,.35)}
.fin-heat-cell.is-mid{background:var(--surface-2)}
.fin-heat-cell.is-high{background:rgba(192,57,43,.14);border-color:rgba(192,57,43,.32)}
.fin-trend-row__amt{width:90px;flex:none;text-align:right;color:var(--ink-2);font-variant-numeric:tabular-nums}
.fin-trend-row__amt--wide{width:auto;flex:1;color:var(--ink)}

/* Phase 2 — estate hero card + cashflow */
.fin-estate-card{margin-bottom:1.2rem}
.fin-estate{display:flex;flex-direction:column;gap:1.2rem}
.fin-estate__total{display:flex;flex-direction:column;gap:.2rem}
.fin-estate__total b{font-family:var(--font-display);font-size:2.4rem;font-weight:600;line-height:1.05;font-variant-numeric:tabular-nums}
.fin-estate__label{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:700}
.fin-estate__note{font-size:.74rem;color:var(--ink-3)}
.fin-estate__split{display:grid;grid-template-columns:repeat(4,1fr);gap:.8rem}
@media(max-width:760px){.fin-estate__split{grid-template-columns:repeat(2,1fr)}}
@media(max-width:420px){.fin-estate__split{grid-template-columns:1fr}}
.fin-estate__chip{display:flex;flex-direction:column;gap:.2rem;padding:.85rem 1rem;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}
.fin-estate__chip span{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:600}
.fin-estate__chip b{font-family:var(--font-display);font-size:1.3rem;font-weight:600;font-variant-numeric:tabular-nums}
.fin-estate__chip.is-up b{color:var(--moss)}
.fin-estate__chip.is-down b{color:var(--clay)}
.fin-grain{display:inline-flex;gap:.3rem}
.fin-grain__btn{font-size:.74rem;font-weight:600;padding:.25rem .65rem;border-radius:var(--r-full);border:1px solid var(--line);background:transparent;color:var(--ink-3);cursor:pointer;transition:.15s}
.fin-grain__btn.is-active{background:var(--ember-ghost);border-color:var(--ember);color:var(--ember)}
.fin-cf-legend{display:flex;gap:1.1rem;font-size:.74rem;color:var(--ink-3);margin-bottom:.7rem}
.fin-cf-legend span::before{content:"";display:inline-block;width:.6rem;height:.6rem;border-radius:2px;margin-right:.35rem;vertical-align:middle}
.fin-cf-legend .is-income::before{background:var(--moss)}
.fin-cf-legend .is-spending::before{background:var(--clay)}
.fin-cf-chart{display:flex;align-items:flex-end;gap:.4rem;height:128px}
.fin-cf-col{display:flex;flex-direction:column;align-items:center;flex:1;min-width:0;height:100%}
.fin-cf-col__bars{display:flex;align-items:flex-end;gap:2px;flex:1;width:100%;justify-content:center}
.fin-cf-bar{width:38%;min-height:2px;border-radius:3px 3px 0 0}
.fin-cf-bar.is-income{background:var(--moss)}
.fin-cf-bar.is-spending{background:var(--clay)}
.fin-cf-col__label{font-size:.62rem;color:var(--ink-3);margin-top:.35rem;white-space:nowrap;font-variant-numeric:tabular-nums}

/* Finance Hub — alerts panel (Phase 3) */
.fin-alert { display:flex; align-items:flex-start; justify-content:space-between; gap:.8rem; padding:.7rem .9rem; border:1px solid var(--line); border-left-width:3px; border-radius:.6rem; margin-bottom:.5rem; }
.fin-alert--warn { border-left-color:var(--clay); }
.fin-alert--info { border-left-color:var(--moss); }
.fin-alert__body { display:flex; flex-direction:column; gap:.15rem; }
.fin-alert__body b { font-size:.86rem; }
.fin-alert__body span { font-size:.78rem; color:var(--ink-3); }
.fin-alert__x { background:transparent; border:0; color:var(--ink-3); font-size:1.1rem; line-height:1; cursor:pointer; padding:0 .2rem; }
.fin-alert__x:hover { color:var(--ink); }
.fin-alerts__head{cursor:pointer;user-select:none}
.fin-alert-group__head{cursor:pointer}
.fin-alert-group__chev{display:inline-block;transition:transform .15s;font-size:.8em;color:var(--ink-3)}
.fin-alert-group[data-open="true"] .fin-alert-group__chev{transform:rotate(90deg)}
.fin-alert-group__list{list-style:none;margin:.2rem 0 .5rem;padding:0 .9rem;display:none;flex-direction:column;gap:.2rem}
.fin-alert-group__list li{font-size:.78rem;color:var(--ink-3);padding:.2rem 0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:.6rem}
.fin-alert-group__price{color:var(--ink-2,var(--ink));font-variant-numeric:tabular-nums;white-space:nowrap}
.fin-alert-group[data-open="true"] .fin-alert-group__list{display:flex}

/* ---------- Budgets & savings card (Finance Hub Phase 5A) ---------- */
.fin-budget-row{display:flex;align-items:center;gap:.75rem;padding:.35rem 0}
.fin-budget-row__label{flex:0 0 7.5rem;text-transform:capitalize;font-size:.88rem;color:var(--ink-2)}
.fin-budget-row__track{flex:1;height:.5rem;border-radius:var(--r-full);background:var(--surface-2);overflow:hidden}
.fin-budget-row__fill{height:100%;border-radius:var(--r-full)}
.fin-budget-row__fill.is-ok{background:var(--moss)}
.fin-budget-row__fill.is-warn{background:var(--gold)}
.fin-budget-row__fill.is-over{background:var(--clay)}
.fin-budget-row__amt{flex:0 0 auto;font-variant-numeric:tabular-nums;font-size:.86rem}
.fin-budget-savings{display:flex;gap:.75rem;align-items:baseline;padding:.35rem 0 .6rem;flex-wrap:wrap}
.fin-budget-savings b.is-up{color:var(--moss)}
.fin-budget-savings b.is-down{color:var(--clay)}
.fin-budget-edit__row{display:flex;justify-content:space-between;align-items:center;gap:.75rem;padding:.25rem 0}
.fin-budget-edit__row label{font-size:.88rem;color:var(--ink-2);text-transform:capitalize}
.fin-budget-edit__row input{width:7rem;font:inherit;padding:.3rem .5rem;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink)}
.fin-budget-edit__actions{display:flex;gap:.5rem;padding-top:.6rem;align-items:center}

/* ===== Finance Hub v3 — segmented app shell ===== */
.fin-head-actions{flex-wrap:wrap}
.fin-util{display:inline-flex;align-items:center;gap:.4rem;font:inherit;font-size:.78rem;font-weight:600;
  color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-full);
  padding:.4rem .7rem;cursor:pointer;transition:border-color .15s,color .15s,background .15s;position:relative}
.fin-util:hover{border-color:var(--line-strong);color:var(--ink)}
.fin-util.is-active{border-color:var(--ember);color:var(--ember-deep);background:var(--ember-soft)}
.fin-util svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.fin-util__badge{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;border-radius:8px;
  background:var(--clay);color:#fff;font-size:.62rem;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 4px}
@media(max-width:640px){.fin-util span:not(.fin-util__badge){display:none}.fin-util{padding:.42rem .5rem}}

.fin-seg{position:relative;display:grid;grid-template-columns:repeat(5,1fr);gap:.15rem;
  background:var(--surface-2);border-radius:var(--r-full);padding:.28rem;margin:0 0 1.3rem}
.fin-seg button{position:relative;z-index:2;font:inherit;font-size:.8rem;font-weight:600;color:var(--ink-2);
  background:none;border:0;border-radius:var(--r-full);padding:.5rem .1rem;cursor:pointer;transition:color .25s;
  min-width:0;white-space:nowrap}
.fin-seg button[aria-selected="true"]{color:var(--ink)}
/* Width and offset are measured from the active button in JS. They used to be a
   hardcoded calc(20% - .3rem) moved by translateX(i*100%) — i.e. by the glide's OWN
   width, not a column's — so the highlight drifted, worst at the last tab
   ("Categories", audit 2026-08-05). */
.fin-seg__glide{position:absolute;z-index:1;top:.28rem;bottom:.28rem;left:0;width:0;
  background:var(--surface);border-radius:var(--r-full);box-shadow:var(--shadow-sm);
  transition:transform .34s cubic-bezier(.32,.72,0,1),width .34s cubic-bezier(.32,.72,0,1)}
@media(max-width:420px){.fin-seg button{font-size:.72rem;letter-spacing:-.01em}}

.fin-tab{display:none}
.fin-tab.is-on{display:flex;flex-direction:column;gap:1.4rem;animation:finTabIn .34s cubic-bezier(.2,.8,.2,1)}
@keyframes finTabIn{from{opacity:0;transform:translateX(10px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.fin-tab.is-on{animation:none}.fin-seg__glide{transition:none}}

.fin-plan-grid{display:grid;grid-template-columns:1.35fr 1fr;gap:1.4rem;align-items:start}
@media(max-width:900px){.fin-plan-grid{grid-template-columns:1fr}}
.fin-plan-progress{margin-left:auto;font-size:.78rem;color:var(--ink-3)}
.pill--gold{color:#7c581e;background:var(--gold-soft);border-color:transparent}

.fin-overlay{position:fixed;inset:0;background:rgba(33,26,18,.4);z-index:100;display:flex;
  align-items:flex-start;justify-content:center;padding:7vh 1rem 1rem}
.fin-overlay[hidden]{display:none}
.fin-modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);width:min(520px,100%);max-height:82vh;overflow:auto}
.fin-modal--wide{width:min(860px,100%)}
.fin-modal__x{margin-left:auto;background:none;border:0;font-size:1.05rem;color:var(--ink-3);cursor:pointer;padding:.2rem .4rem}
.fin-modal__x:hover{color:var(--ink)}

/* Today hero — estate-led: numeral + gold sparkline, flow row, connected strip */
.fin-hero{display:grid;grid-template-columns:1fr auto;gap:.4rem 1.5rem;align-items:start}
@media(max-width:720px){.fin-hero{grid-template-columns:1fr}}
.fin-hero__lead{min-width:0}
.fin-hero__eyebrow{font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}
.fin-hero__estate{font-family:var(--font-display);font-size:clamp(2.6rem,6vw,3.6rem);font-weight:700;letter-spacing:-.03em;line-height:.98;margin:.35rem 0 .15rem;font-variant-numeric:tabular-nums}
.fin-hero__sub{font-size:.74rem;color:var(--ink-3)}
.fin-hero__spark{align-self:start;justify-self:end;width:min(340px,44vw)}
.fin-hero__spark svg{display:block;width:100%;height:auto}
.fin-hero__flow{grid-column:1/-1;display:flex;gap:2.4rem;flex-wrap:wrap;margin-top:1.2rem}
.fin-hero__flow div span{display:block;font-size:.78rem;color:var(--ink-3);margin-bottom:.1rem}
.fin-hero__flow div b{font-family:var(--font-display);font-size:1.5rem;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.fin-hero__flow .is-kept b{color:var(--moss)}
.fin-hero__flow .is-kept.is-neg b{color:var(--clay)}
.fin-strip{grid-column:1/-1;display:grid;grid-template-columns:repeat(4,1fr);background:var(--surface-2);border-radius:var(--r-md);margin-top:1.4rem;overflow:hidden}
.fin-strip__cell{padding:.95rem 1.1rem;border-right:1px solid var(--line)}
.fin-strip__cell:last-child{border-right:0}
.fin-strip__cell span{display:block;font-size:.68rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);margin-bottom:.4rem}
.fin-strip__cell b{font-family:var(--font-display);font-size:1.3rem;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.fin-strip__cell.is-neg b{color:var(--clay)}
/* Breakdown under the Cash figure. Needs to beat `.fin-strip__cell span`, which is
   the uppercase label style — otherwise this renders as a tiny caps heading. */
.fin-strip__cell .fin-strip__sub{display:block;margin:.35rem 0 0;font-size:.72rem;font-weight:500;letter-spacing:0;text-transform:none;color:var(--ink-3);font-variant-numeric:tabular-nums}
@media(max-width:640px){.fin-strip{grid-template-columns:1fr 1fr}.fin-strip__cell:nth-child(2){border-right:0}.fin-strip__cell:nth-child(1),.fin-strip__cell:nth-child(2){border-bottom:1px solid var(--line)}}

/* Marco note — gold rule, no box */
#finAiAllocation.fin-ai{display:block;background:none;border:0;padding:0;margin:1.5rem 0 0}
.fin-marco{border-left:3px solid var(--gold);padding:.1rem 0 .1rem 1rem}
.fin-marco__name{display:block;font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);margin-bottom:.25rem}
.fin-marco__text{margin:0;font-size:.95rem;line-height:1.5;color:var(--ink-2)}
.fin-marco__disc{display:block;margin-top:.3rem;font-size:.72rem;color:var(--ink-3)}

/* Plan tab — action checklist + goal ring */
.fin-action{display:flex;gap:.85rem;padding:.9rem 1.25rem;border-bottom:1px solid var(--line);align-items:flex-start;transition:background .18s}
.fin-action:hover{background:var(--ember-ghost)}
.fin-action:last-of-type{border-bottom:0}
.fin-action__tick{flex:none;width:22px;height:22px;margin-top:.12rem;border-radius:7px;border:1.5px solid var(--line-strong);
  background:var(--surface);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:transparent;
  transition:background .18s,border-color .18s,color .18s,transform .12s;padding:0}
.fin-action__tick:active{transform:scale(.9)}
.fin-action__tick svg{width:13px;height:13px}
.fin-action.is-done .fin-action__tick{background:var(--moss);border-color:var(--moss);color:#fff}
.fin-action__body{min-width:0;flex:1}
.fin-action__body b{font-size:.92rem;display:block}
.fin-action__body span{font-size:.8rem;color:var(--ink-2)}
.fin-action.is-done .fin-action__body b{text-decoration:line-through;color:var(--ink-3)}
.fin-action.is-done .fin-action__body span{color:var(--ink-3)}
.fin-action__amt{flex:none;font-family:var(--font-display);font-weight:600;font-size:1.02rem;margin-top:.1rem;font-variant-numeric:tabular-nums}
.fin-goal-top{display:flex;align-items:center;gap:1.1rem;margin-bottom:.3rem}
.fin-ring{flex:none;width:84px;height:84px;position:relative}
.fin-ring svg{display:block}
.fin-ring__pct{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.fin-ring__pct b{font-family:var(--font-display);font-size:1.25rem;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}
.fin-ring__pct span{font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin-top:.12rem}
.fin-goal-head{display:flex;align-items:baseline;gap:.7rem;flex-wrap:wrap}
.fin-goal-head b{font-family:var(--font-display);font-size:1.3rem;font-weight:600}
.fin-goal-meta{display:flex;gap:1.6rem;margin:.8rem 0 .3rem;flex-wrap:wrap}
.fin-goal-meta div span{display:block;font-size:.72rem;color:var(--ink-3)}
.fin-goal-meta div b{font-family:var(--font-display);font-size:1.02rem;font-weight:600;font-variant-numeric:tabular-nums}
.fin-goal-chart{display:block;width:100%;height:auto;margin-top:.4rem}
.fin-goal-form{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.7rem}
.fin-goal-form .field-input{flex:1;min-width:130px}

/* Goal tab — per-account net worth */
.fin-networth{display:flex;align-items:baseline;justify-content:space-between;padding:1.05rem 1.2rem;border-bottom:1px solid var(--line)}
.fin-networth span{font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.fin-networth b{font-family:var(--font-display);font-size:1.6rem;font-weight:600;font-variant-numeric:tabular-nums}
.fin-acct{display:flex;align-items:center;gap:.85rem;padding:.8rem 1.2rem;border-bottom:1px solid var(--line)}
.fin-acct__ico{flex:none;width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:.72rem;font-weight:800;color:#fff;background:var(--slate)}
.fin-acct__b{flex:1;min-width:0}
.fin-acct__b b{font-size:.9rem;display:block}
.fin-acct__b span{font-size:.75rem;color:var(--ink-3)}
.fin-acct__val{text-align:right}
.fin-acct__val b{font-family:var(--font-display);font-weight:600;font-size:1rem;font-variant-numeric:tabular-nums;display:block}
.fin-acct__val span{font-size:.7rem;color:var(--ink-3)}
.fin-acct__val span.fin-stale{color:var(--gold)}

/* Spending tab — category drill-down + budget cap overlay */
.fin-cat{border-bottom:1px solid var(--line)}
.fin-cat:last-child{border-bottom:0}
.fin-cat-row[data-cat]{cursor:pointer;padding:.55rem 0;border-radius:var(--r-sm);transition:background .15s}
.fin-cat-row[data-cat]:hover{background:var(--surface-2)}
.fin-cat-row__track{position:relative}
.fin-cat-row__fill.is-under{background:var(--moss)}
.fin-cat-row__fill.is-over{background:var(--clay)}
.fin-cat-row__cap{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink);border-radius:1px}
.fin-cat__chev{flex:none;width:14px;text-align:center;color:var(--ink-3);transition:transform .2s}
.fin-cat.is-open .fin-cat__chev{transform:rotate(90deg)}
.fin-cat__drill{max-height:0;overflow:hidden;transition:max-height .3s ease}
.fin-cat.is-open .fin-cat__drill{max-height:340px;overflow:auto}
.fin-txn{display:flex;justify-content:space-between;gap:1rem;padding:.4rem .2rem .4rem 120px;font-size:.82rem;border-top:1px solid var(--line)}
.fin-txn:first-child{border-top:0}
.fin-txn span{color:var(--ink-2)}
.fin-txn b{font-family:var(--font-display);font-weight:600;font-variant-numeric:tabular-nums}
.fin-txn__d{color:var(--ink-3);font-size:.74rem}
.fin-txn--muted{color:var(--ink-3);justify-content:flex-start}
@media(max-width:560px){.fin-txn{padding-left:.2rem}}

/* Categories tab — merchant learning loop */
.fin-mrow{padding:.8rem 1.2rem;border-bottom:1px solid var(--line)}
.fin-mrow:last-child{border-bottom:0}
.fin-mrow.is-resolved{background:var(--moss-soft)}
/* Optimistic save: the row moves at once, dims while in flight, and turns clay
   with an inline reason if the write failed (audit 2026-08-05). */
.fin-mrow.is-saving{opacity:.55;transition:opacity .15s}
.fin-mrow.is-failed{background:var(--clay-soft)}
.fin-mrow__err{font-size:.76rem;color:var(--clay);padding-top:.35rem}
.fin-mrow__top{display:flex;align-items:center;gap:.7rem}
.fin-mrow__info{flex:1;min-width:0}
.fin-mrow__info b{font-size:.92rem;display:block}
.fin-mrow__info span{font-size:.76rem;color:var(--ink-3)}
.fin-catchip{font-size:.72rem;font-weight:600;border-radius:var(--r-full);padding:.18rem .6rem;white-space:nowrap;
  background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2)}
.fin-catchip.is-guess{background:var(--gold-soft);border-color:transparent;color:#7c581e}
.fin-catchip.is-good{background:var(--moss-soft);border-color:transparent;color:var(--moss)}
.fin-mrow.is-resolved .fin-catchip.is-guess{display:none}
.fin-mrow__done{display:none;font-size:.78rem;color:var(--moss);font-weight:600}
.fin-mrow.is-resolved .fin-mrow__done{display:inline}
/* Confirmed rows keep an edit affordance — hiding the actions entirely left no way
   to change a category once set (audit 2026-08-05). The accept tick is redundant
   once confirmed; the ✎ reopens the same select-and-save row. */
.fin-mrow.is-resolved .fin-icbtn--yes{display:none}
.fin-mrow.is-resolved .fin-icbtn--no{font-size:.85rem}
.fin-mrow__acts{display:flex;gap:.4rem;flex:none}
.fin-icbtn{width:30px;height:30px;border-radius:9px;border:1px solid var(--line);background:var(--surface);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;font-size:.9rem;font-weight:700;transition:transform .1s,background .15s,border-color .15s}
.fin-icbtn:active{transform:scale(.9)}
.fin-icbtn--yes{color:var(--moss)}
.fin-icbtn--yes:hover{background:var(--moss-soft);border-color:transparent}
.fin-icbtn--no{color:var(--clay)}
.fin-icbtn--no:hover{background:var(--clay-soft);border-color:transparent}
.fin-mrow__edit{display:none;margin-top:.7rem;gap:.5rem;align-items:center}
.fin-mrow.is-editing .fin-mrow__edit{display:flex}
/* While the editor is open, Save is the ONE way to commit. Leaving ✓/✕ visible
   alongside it gave two controls that both wrote, and when Save felt slow the tick
   looked like "the one that works" (reported 2026-08-05). */
.fin-mrow.is-editing .fin-mrow__acts{display:none}
.fin-mrow__edit select{flex:1;min-width:0}

/* Custom categories — create + manage */
.fin-catadd{display:flex;gap:.5rem;align-items:center;padding:0 1.2rem}
.fin-catadd .field-input{flex:1;min-width:0}
.fin-catadd .btn{flex:none}
.fin-catadd__err{color:var(--clay);font-size:.78rem;padding:.5rem 1.2rem 0}
.fin-catchips{display:flex;flex-wrap:wrap;gap:.5rem;padding:.9rem 1.2rem 1.1rem}
.fin-catchips:empty{display:none}
.fin-usercat{display:inline-flex;align-items:center;gap:.45rem;font-size:.78rem;font-weight:600;
  border-radius:var(--r-full);padding:.28rem .4rem .28rem .7rem;background:var(--moss-soft);color:var(--moss)}
.fin-usercat__x{width:20px;height:20px;border-radius:50%;border:0;cursor:pointer;line-height:1;
  display:inline-flex;align-items:center;justify-content:center;font-size:.8rem;
  background:rgba(0,0,0,.06);color:inherit;transition:background .15s}
.fin-usercat__x:hover{background:var(--clay-soft);color:var(--clay)}
.fin-catchips .fin-txt-muted{font-size:.78rem;color:var(--ink-3)}

/* Monthly update — reconcile step after a statement saves */
.fin-reconcile{margin-top:.9rem;padding:.9rem 1rem;border:1px solid var(--line);border-radius:var(--r-md);background:var(--moss-soft)}
.fin-reconcile b{font-size:.9rem}
.fin-reconcile__acts{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.8rem;flex-wrap:wrap}

/* ---------- BJJ game map + live roll ---------- */
.bjj-map-wrap{overflow-x:auto;border-top:1px solid var(--line);padding:.8rem;margin-top:.6rem}
.bjj-map-wrap svg{display:block;min-width:1040px;width:100%;height:auto}
.bjj-map-card{padding:1rem 1.3rem 1.2rem;border-top:1px solid var(--line)}
.bjjm-pos rect{fill:var(--surface-2);stroke:var(--ink-3);stroke-width:1.4}
.bjjm-pos text{fill:var(--ink);font-weight:700;font-size:12px;letter-spacing:.05em}
.bjjm-pos.is-flash rect{stroke:var(--ember);stroke-width:2.6}
.bjjm-node{cursor:pointer}
.bjjm-node rect{fill:var(--surface);stroke-width:1.5}
.bjjm-node:hover rect{fill:var(--surface-2)}
.bjjm-node:focus-visible{outline:none}
.bjjm-node:focus-visible rect{stroke:var(--ember);stroke-width:2.4}
.bjjm-node.st-w rect{stroke:var(--moss)}
.bjjm-node.st-t rect{stroke:var(--slate)}
.bjjm-node.st-d rect{stroke:var(--gold)}
.bjjm-node.st-k rect{stroke:var(--ink-3)}
.bjjm-node.st-0 rect{stroke:var(--line);stroke-dasharray:4 3}
.bjjm-node.is-sel rect{stroke-width:2.6;fill:var(--surface-2)}
.bjjm-node text{fill:var(--ink);font-size:11.5px;font-weight:600}
.bjjm-node .cnt{fill:var(--ink-3);font-size:9.5px;font-weight:400}
.bjjm-node.st-0 text{fill:var(--ink-3);font-weight:400}
.bjjm-edge{stroke:var(--ink-3);fill:none;stroke-width:1.3;opacity:.65;marker-end:url(#bjjArrow)}
.bjjm-edge.dashed{stroke-dasharray:4 4;opacity:.45}
.bjjm-elabel{fill:var(--ink-3);font-size:9.5px}
.bjjm-arrowhead{fill:var(--ink-3)}
/* focus mode: picking a move dims everything except the pick + what follows it */
.bjjm-node,.bjjm-pos,.bjjm-edge,.bjjm-elabel{transition:opacity .18s ease}
@media(prefers-reduced-motion:reduce){.bjjm-node,.bjjm-pos,.bjjm-edge,.bjjm-elabel{transition:none}}
#bjjMapSvg.is-focus .bjjm-node,#bjjMapSvg.is-focus .bjjm-pos,#bjjMapSvg.is-focus .bjjm-edge,#bjjMapSvg.is-focus .bjjm-elabel{opacity:.18}
#bjjMapSvg.is-focus .is-src,#bjjMapSvg.is-focus .is-next,#bjjMapSvg.is-focus .is-nexthead{opacity:1}
#bjjMapSvg.is-focus .bjjm-node.is-next rect{stroke-width:2.2}
#bjjMapSvg.is-focus .bjjm-pos.is-nexthead rect{stroke:var(--ember);stroke-width:2.2}
.bjjm-hot{stroke:var(--ember);stroke-width:2.2;fill:none;opacity:1;marker-end:url(#bjjArrowHot)}
.bjjm-arrowhead--hot{fill:var(--ember)}
.lr-chip--sm{font-size:.76rem;padding:.35rem .7rem;display:inline-flex;align-items:center;gap:.4rem}
.lr-chip--menu{border-style:dashed;color:var(--ink-3);font-weight:400}
.lr-k2{font-size:.68rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);display:block;margin-bottom:.5rem;font-weight:600}
.lr-opts{display:flex;flex-direction:column;gap:.45rem}
.lr-opt{display:flex;align-items:center;gap:.65rem;width:100%;text-align:left;font:inherit;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:.6rem .8rem;cursor:pointer;color:inherit}
.lr-opt:hover{background:var(--surface-2)}
.lr-opt:focus-visible{outline:2px solid var(--ember);outline-offset:2px}
.lr-opt.is-menu{border-style:dashed}
.lr-opt.is-menu b{color:var(--ink-3);font-weight:500}
.lr-opt__body{display:flex;flex-direction:column;min-width:0}
.lr-opt__body b{font-size:.9rem}
.lr-opt__body small{font-size:.72rem;color:var(--ink-3)}
.lr-opt .pill{margin-left:auto;flex:none}
.bjjm-hot.dashed{stroke-dasharray:5 4}
.sdot{width:9px;height:9px;border-radius:50%;flex:none}
.sdot--w{background:var(--moss)}
.sdot--t{background:var(--slate)}
.sdot--d{background:var(--gold)}
.sdot--k{background:var(--ink-3)}
.sdot--0{background:none;border:1.5px solid var(--line)}
.lr-crumbs{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;font-size:.8rem;padding:.8rem 1.3rem 0;color:var(--ink-3)}
.lr-crumbs b{color:var(--ink)}
.lr-groups{display:flex;flex-direction:column;gap:1rem}
.lr-groups h4{font-size:.68rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);margin:0 0 .55rem;font-weight:600}
.lr-chips{display:flex;flex-wrap:wrap;gap:.5rem}
.lr-chip{font:inherit;font-size:.84rem;font-weight:600;border:1px solid var(--line);background:var(--surface);color:inherit;border-radius:99px;padding:.5rem .95rem;cursor:pointer}
.lr-chip:hover{background:var(--surface-2)}
.lr-chip:focus-visible{outline:2px solid var(--ember);outline-offset:2px}
.lr-chip--warn{border-color:var(--gold);background:var(--gold-soft)}
.lr-trace{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;font-size:.78rem;color:var(--ink-3);margin-bottom:1rem}
.lr-trace b{color:var(--ink)}
.lr-trace .win{color:var(--moss);font-weight:700}
.lr-trace .loss{color:var(--clay);font-weight:700}
.lr-call{border:1px solid var(--line);border-left:4px solid var(--ember);border-radius:10px;padding:1rem 1.2rem;background:var(--surface-2)}
.lr-call .k{font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ember);font-weight:700}
.lr-call h4{font-size:1.05rem;margin:.3rem 0 .2rem}
.lr-call .why{font-size:.8rem;color:var(--ink-3)}
.lr-call .how{font-size:.86rem;margin-top:.55rem}
.lr-call .alt{font-size:.78rem;color:var(--ink-3);margin-top:.55rem;border-top:1px dashed var(--line);padding-top:.55rem}
.lr-call--dark{border-left-color:var(--gold)}
.lr-call--dark .k{color:var(--gold)}
.lr-out{margin-top:1rem}
.lr-out .k2{font-size:.68rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);display:block;margin-bottom:.5rem;font-weight:600}
.lr-end{border:1px solid var(--line);border-radius:10px;padding:1.1rem 1.2rem;text-align:center}
.lr-end h4{font-size:1.2rem;margin:0 0 .3rem}
.lr-end.win{border-color:var(--moss);background:var(--moss-soft)}
.lr-end.loss{border-color:var(--gold);background:var(--gold-soft)}

/* the view heading receives programmatic focus on navigation (a11y) — it isn't
   interactive, so no focus ring */
#topbarTitle:focus{outline:none}

/* skip link: first tab stop, visually hidden until focused (dashboard has a
   30-link sidebar before the content otherwise) */
.skip-link{position:absolute;left:-9999px;top:0;z-index:200;padding:.6rem 1rem;
  background:var(--surface);color:var(--ink);border:1px solid var(--line-strong);
  border-radius:var(--r-md);font-weight:600}
.skip-link:focus{left:.75rem;top:.75rem}
#content:focus{outline:none}

/* ============================================================
   Admin — command-rail tabs, accounts ledger, agent grid
   ============================================================ */
.tnum{font-variant-numeric:tabular-nums}

/* segmented tab bar with icons (the "command rail", laid out horizontal) */
.admin-seg button{display:inline-flex;align-items:center;justify-content:center;gap:.5rem}
.admin-seg__i{display:inline-flex}
.admin-seg__i svg{width:16px;height:16px}
@media(max-width:560px){.admin-seg__i{display:none}}

/* accounts ledger */
.admin-join-requests{margin-bottom:1.4rem}
.admin-join-request{padding:1rem 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}
.admin-join-request:first-child{padding-top:0}
.admin-join-request__head{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.admin-join-request__head p{margin:.25rem 0 .75rem;color:var(--muted)}
.admin-join-request__head time{font-size:.8rem;color:var(--muted)}
.admin-join-request summary{cursor:pointer;font-size:.85rem}
.admin-join-request__message{white-space:pre-wrap}
.admin-join-requests .ledger-filters{margin:1rem 0 0}
.ledger-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.1rem}
.ledger-table{width:100%;border-collapse:collapse;font-size:.88rem}
.ledger-table th{text-align:left;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;
  color:var(--ink-3);font-weight:700;padding:.7rem 1.1rem;border-bottom:1px solid var(--line);white-space:nowrap}
.ledger-table td{padding:.7rem 1.1rem;border-bottom:1px solid var(--line);vertical-align:middle}
.ledger-table tbody tr:last-child td{border-bottom:0}
.ledger-row{cursor:pointer;transition:background .12s ease}
.ledger-row:hover,.ledger-row:focus-visible{background:var(--surface-2);outline:none}
.ledger-row:focus-visible{box-shadow:inset 3px 0 0 var(--ember)}

/* inspector drawer key/value rows */
.insp-kv{display:flex;justify-content:space-between;align-items:center;gap:1rem;
  padding:.55rem 0;border-bottom:1px solid var(--line);font-size:.86rem}
.insp-kv:last-of-type{border-bottom:0}
.insp-kv > span:first-child{color:var(--ink-3)}

/* agent grid — Rex / Vera / Nova / Atlas */
.agent-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.2rem}
@media(max-width:820px){.agent-grid{grid-template-columns:1fr}}
.agent-head{display:flex;align-items:center;gap:.7rem;margin-bottom:.2rem}
.agent-av{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;
  font-size:1.35rem;background:var(--surface-2);border:1px solid var(--line);flex:none;line-height:1}
.agent-findings{list-style:none;margin:.6rem 0 .2rem;padding:0;display:flex;flex-direction:column;gap:.45rem}
.agent-findings li{font-size:.83rem;color:var(--ink-2);line-height:1.45;display:flex;gap:.55rem;align-items:flex-start}
.agent-findings li::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--ember);flex:none;margin-top:.5rem}
.agent-action{margin:.6rem 0 0;background:var(--ember-ghost);border-radius:10px;padding:.55rem .75rem;color:var(--ink)}

/* admin seg glide sized for 4 tabs (finance uses 5); the highlight slides like finance */
.admin-seg .fin-seg__glide{width:calc(20% - .3rem)}
/* compact admin charts — the raw SVG was rendering at its 2.9:1 viewBox height and
   filling the panel; cap it so the bars read as a small chart, not a hero */
.admin-chart svg{width:100%;height:auto;max-height:130px;display:block}

/* Memory review + the curated profile, at the foot of the Notes & memory card.
   Was a separate Profile → Memory card that re-listed the same facts; the review
   and the profile doc were the only parts that weren't duplicated (2026-08-06). */
.mem-review{border-top:1px solid var(--line)}
.mem-review>summary{cursor:pointer;list-style:none;padding:.8rem 1.3rem;
  font-size:.82rem;font-weight:700;color:var(--ink-2);display:flex;align-items:center;gap:.4rem}
.mem-review>summary::-webkit-details-marker{display:none}
.mem-review>summary::before{content:"▸";color:var(--ink-3)}
.mem-review[open]>summary::before{content:"▾"}
.mem-review>summary:hover{background:var(--surface-2)}
/* Something awaiting a decision earns the eye; a quiet profile doc does not. */
.mem-review.has-pending>summary{color:var(--ember-deep);background:var(--ember-soft)}

/* Typed training measurements remain usable in the narrow session drawer. */
.logrow__measurements{grid-column:1/-1;display:flex;gap:.6rem;padding-bottom:.5rem;border-bottom:1px solid var(--line)}
.logrow__measurements label{min-width:0;flex:1;font-size:.75rem;color:var(--ink-3)}
.logrow__measurements input{width:100%;margin-top:.25rem}
@media(max-width:480px){.logrow:not(.logrow--bjj){grid-template-columns:minmax(0,1fr) 44px 44px 44px 30px;gap:.2rem}.logrow input{min-width:0}}
