/* Sidekick shared theme: tokens, base, buttons, fields, modals, toasts.
   Page-specific layout lives in each page's own <style>. */
/* Light product theme: white cards on a soft off-white, deep green as the single accent.
   The marketing landing page keeps its own dark editorial look; this file skins the app. */
:root{
  /* The brand lime is a FILL colour: on a white page it only works behind dark text
     (lime + --lime-ink is about 14:1). As text or an icon on white it is invisible
     (~1.5:1), so anything that needs to be READ uses --accent, a dark lime that stays
     in the same colour family. Two tones, one identity. */
  --lime:#C7F24C; --lime-ink:#141A0B; --accent:#3F6212;
  --blue:#C7F24C; --blue-deep:#B4E22F; --blue-soft:#F3FBDD; --blue-border:#DCEFA6;
  --ink:#121714; --body:#4B5750; --soft:#6B766F;
  --bg:#F5F7F1; --card:#FFFFFF; --card-2:#F7FAF0; --field:#F6F9EF;
  --border:#E7EADF; --border-2:#D3D9C6;
  --green:#3F6212; --green-soft:#F3FBDD;
  --red:#B3261E; --red-soft:#FCEBE9;
  --hover:rgba(18,23,20,.05);
  --font-display:'Space Grotesk',Inter,system-ui,sans-serif;
  --shadow-sm:0 1px 2px rgba(18,23,20,.05);
  --shadow-md:0 12px 30px -14px rgba(18,23,20,.16);
  --r:16px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; color:var(--ink); background:var(--bg);
  font-family:Inter,system-ui,-apple-system,sans-serif; font-size:15px;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
/* faintest green wash at the top so the off-white isn't dead flat.
   No film grain here: on light surfaces it reads as dirt rather than texture. */
body::before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(1100px 460px at 50% -200px, rgba(199,242,76,.16), transparent 70%)}
button{font-family:inherit;cursor:pointer;color:inherit}
a{color:inherit}
::selection{background:rgba(199,242,76,.45)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(18,23,20,.16);border-radius:8px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:rgba(18,23,20,.26)}

/* ---------- buttons ---------- */
.btn{border:1px solid var(--border);background:var(--card);padding:9px 17px;border-radius:999px;
  font-weight:600;font-size:14px;display:inline-flex;align-items:center;gap:8px;text-decoration:none;
  transition:background .18s,border-color .18s,box-shadow .18s,transform .04s;box-shadow:var(--shadow-sm)}
.btn:hover{background:var(--hover);border-color:var(--border-2)}
.btn:active{transform:translateY(1px)}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.btn svg{width:16px;height:16px;flex:none}
.btn.go{background:var(--blue);color:var(--lime-ink);border-color:transparent;box-shadow:0 6px 16px -8px rgba(154,196,50,.6)}
.btn.go:hover{background:var(--blue-deep)}
.btn.stop{background:var(--red-soft);border-color:transparent;color:var(--red);box-shadow:none}
.btn.stop:hover{background:#F7DAD6}
.btn.ghost{background:transparent;border-color:transparent;color:var(--soft);box-shadow:none}
.btn.ghost:hover{background:var(--hover);color:var(--ink)}
.btn.icon{padding:9px}
.btn.sm{padding:7px 13px;font-size:13px}
/* On light, fading a filled green button leaves unreadable text, so disabled goes grey. */
.btn:disabled{opacity:1;cursor:not-allowed;background:var(--field);color:var(--soft);
  border-color:var(--border);box-shadow:none}
.spacer{flex:1}

/* ---------- fields ---------- */
.field label{display:block;font-size:13.5px;font-weight:600;margin-bottom:8px;color:var(--ink)}
.field label .h{color:var(--soft);font-weight:400;margin-left:7px;font-size:12.5px}
.field label .req{color:var(--accent);margin-left:3px}
textarea,select,input{width:100%;background:var(--field);border:1px solid var(--border);border-radius:12px;color:var(--ink);
  padding:12px 14px;font-size:14px;font-family:inherit;transition:border-color .18s,box-shadow .18s}
textarea::placeholder,input::placeholder{color:var(--soft)}
textarea{resize:vertical;min-height:96px;line-height:1.6}
textarea:focus,select:focus,input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(199,242,76,.45)}

.drop{border:1px dashed var(--border-2);border-radius:13px;padding:20px;text-align:center;background:var(--field);
  transition:border-color .18s,background .18s;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:8px}
.drop:hover,.drop.over{border-color:var(--accent);background:var(--blue-soft)}
.drop svg{width:26px;height:26px;color:var(--soft)}
.drop .t{font-size:14px;color:var(--ink);font-weight:500}
.drop .s{font-size:12.5px;color:var(--soft)}
.drop.done{border-style:solid;border-color:var(--accent)}
.filechip{display:none;align-items:center;gap:9px;margin-top:10px;font-size:13px;color:var(--accent);font-weight:500;
  background:var(--blue-soft);border:1px solid var(--blue-border);border-radius:10px;padding:8px 12px}
.filechip.show{display:inline-flex}
.filechip button{margin-left:auto;background:none;border:none;color:var(--soft);font-size:16px;line-height:1;padding:0 2px}
.or{display:flex;align-items:center;gap:12px;color:var(--soft);font-size:12px;margin:2px 0}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--border)}

.seg{display:flex;gap:5px;background:var(--field);border:1px solid var(--border);border-radius:12px;padding:4px}
.seg button{flex:1;border:none;background:transparent;color:var(--soft);padding:9px 6px;border-radius:9px;font-weight:600;font-size:13px;transition:.18s}
.seg button.on{background:var(--blue);color:var(--lime-ink);box-shadow:0 4px 10px -5px rgba(154,196,50,.55)}

.note{background:var(--blue-soft);border:1px solid var(--blue-border);border-radius:13px;padding:14px 16px;
  font-size:13px;line-height:1.72;color:var(--body)}
.note b{color:var(--accent);font-weight:600}

/* ---------- modal ---------- */
.overlay{position:fixed;inset:0;z-index:50;background:rgba(18,23,20,.34);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;padding:22px}
.overlay.open{display:flex}
.sheet{width:100%;max-width:560px;max-height:92vh;overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:20px;
  box-shadow:0 30px 70px -30px rgba(18,23,20,.28)}
.sheet-head{position:relative;padding:26px 28px 6px}
.sheet-x{position:absolute;top:20px;right:20px;width:34px;height:34px;border-radius:9px;cursor:pointer;
  border:1px solid var(--border);background:var(--field);color:var(--soft);display:grid;place-items:center;
  transition:color .15s,background .15s,border-color .15s}
.sheet-x:hover{color:var(--ink);background:var(--card-2);border-color:var(--border-2)}
.sheet-x svg{width:16px;height:16px}
.sheet-head h1{margin:0;font-family:var(--font-display);font-weight:700;font-size:23px;letter-spacing:-.02em;color:var(--ink)}
.sheet-head p{margin:8px 0 0;color:var(--body);font-size:14px;line-height:1.65}
.sheet-body{padding:20px 28px 6px;display:flex;flex-direction:column;gap:20px}
.sheet-foot{padding:16px 28px 26px;display:flex;gap:12px;align-items:center;justify-content:flex-end}
.sheet-foot .l{flex:1;font-size:12px;color:var(--soft);line-height:1.5}

/* ---------- app shell (shared by the interview + notes views) ----------
   One app, one sidebar. Rendered by assets/shell.js so both pages stay in sync. */
.shell{position:relative;z-index:1;height:100vh;display:grid;grid-template-columns:248px minmax(0,1fr)}
aside{background:var(--card);border-right:1px solid var(--border);display:flex;flex-direction:column;gap:6px;
  padding:18px 14px;min-height:0}
aside .wordmark{display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit;padding:2px 8px 16px}
aside .wordmark .mark{width:32px;height:32px;border-radius:9px;background:var(--lime);display:grid;place-items:center;
  flex:none;box-shadow:0 6px 16px -8px rgba(154,196,50,.6)}
aside .wordmark .mark svg{width:18px;height:18px;color:var(--lime-ink)}
aside .wordmark .name{font-family:var(--font-display);font-weight:700;font-size:16.5px;letter-spacing:-.02em}
.newbtn{width:100%;justify-content:center;margin-bottom:14px}
.navlbl{font-size:10.5px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--soft);padding:12px 10px 6px}
.navitem{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:11px;color:var(--body);font-size:14px;
  font-weight:500;text-decoration:none;background:none;border:none;width:100%;text-align:left;cursor:pointer;
  transition:background .15s,color .15s}
.navitem svg{width:16px;height:16px;flex:none;opacity:.85}
.navitem .ct{margin-left:auto;font-size:11.5px;color:var(--soft);font-variant-numeric:tabular-nums}
.navitem:hover{background:var(--hover);color:var(--ink)}
.navitem:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.navitem.on{background:var(--lime);color:var(--lime-ink);font-weight:600}
.navitem.on .ct{color:var(--lime-ink);opacity:.75}
.acct{margin-top:10px;padding-top:12px;border-top:1px solid var(--border)}
.acct .who{display:flex;align-items:center;gap:6px;padding:0 11px 8px;
  font-size:11.5px;color:var(--soft)}
/* the address is the part that gives way — the badge keeps its full width */
.acct .who .email{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acct .who .plan{flex:none;margin-left:auto;padding:2px 7px;border-radius:999px;
  background:var(--lime);color:var(--lime-ink);font-size:10px;font-weight:700;
  letter-spacing:.04em;text-transform:uppercase;line-height:1.6}
.pane{min-height:0;display:flex;flex-direction:column;overflow:hidden}

/* small screens: the sidebar becomes a scrollable top bar so nothing is unreachable */
@media (max-width:900px){
  .shell{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}
  aside{flex-direction:row;align-items:center;gap:8px;padding:11px 14px;overflow-x:auto;
    border-right:none;border-bottom:1px solid var(--border)}
  aside::-webkit-scrollbar{display:none}
  aside .wordmark{padding:0 4px 0 0;flex:none}
  .newbtn{width:auto;margin:0;flex:none}
  .navitem{width:auto;flex:none;padding:8px 11px;font-size:13.5px}
  .navitem .ct{display:none}
  .navlbl,aside .spacer{display:none}
  .acct{margin:0;padding:0;border-top:none;flex:none;display:flex;align-items:center}
  /* the top bar has no room for an email, but the badge is small and worth keeping */
  .acct .who{padding:0 8px 0 0}
  .acct .who .email{display:none}
  .acct .who .plan{margin-left:0}
  .acct .who:not(:has(.plan:not([hidden]))){display:none}
}

/* ---------- rendered model output ---------- */
.md{font-size:16px;line-height:1.7;color:var(--ink)}
.md h3{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--soft);margin:20px 0 10px;font-weight:700}
.md h3:first-child{margin-top:0}
.md ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:12px}
.md li{position:relative;padding-left:26px}
.md li::before{content:"";position:absolute;left:0;top:6px;width:15px;height:15px;border-radius:50%;
  background:var(--lime) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141A0B' stroke-width='3.4' stroke-linecap='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/10px no-repeat}
.md p{margin:0 0 13px}
.md strong{font-weight:600}
.md ul+h3{margin-top:22px}
.cursor::after{content:"";display:inline-block;width:7px;height:1.05em;vertical-align:-2px;background:var(--blue);margin-left:3px;animation:blink 1.05s steps(1) infinite}
@keyframes blink{50%{opacity:0}}

.think{display:inline-flex;gap:6px;align-items:center;color:var(--soft)}
.think i{width:6px;height:6px;border-radius:50%;background:var(--blue);animation:bb 1.1s infinite}
.think i:nth-child(2){animation-delay:.15s}.think i:nth-child(3){animation-delay:.3s}
@keyframes bb{0%,80%,100%{opacity:.25}40%{opacity:1}}

/* ---------- empty states ---------- */
.empty{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;
  gap:13px;color:var(--soft);max-width:380px;margin:0 auto}
.empty .eic{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;
  background:var(--green-soft);border:1px solid var(--blue-border)}
.empty .eic svg{width:26px;height:26px;color:var(--accent)}
.empty .mk{font-family:var(--font-display);font-size:18px;font-weight:600;color:var(--ink);margin-top:3px}
.empty p{margin:0;font-size:13.5px;line-height:1.72}
.empty b{color:var(--ink);font-weight:600}

/* ---------- live chip + meter ---------- */
.live-chip{display:none;align-items:center;gap:7px;font-size:12px;font-weight:600;
  color:var(--green);padding:5px 12px;border-radius:999px;background:var(--green-soft)}
.live-chip.on{display:inline-flex}
.live-chip .rec{width:7px;height:7px;border-radius:50%;background:var(--green);animation:breathe 1.5s ease-in-out infinite}
.meter{display:none;align-items:flex-end;gap:3px;height:18px;padding:0 2px}
.meter.on{display:inline-flex}
.meter i{width:3px;border-radius:2px;background:rgba(18,23,20,.14);transition:background .1s ease}
.meter i:nth-child(1){height:6px}.meter i:nth-child(2){height:9px}.meter i:nth-child(3){height:12px}
.meter i:nth-child(4){height:15px}.meter i:nth-child(5){height:18px}
.meter i.lit{background:var(--accent)}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:.45}}

/* ---------- toast ---------- */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(16px);opacity:0;z-index:80;
  background:#1B211D;color:#F2F5EF;border:1px solid rgba(255,255,255,.1);padding:11px 18px;border-radius:999px;font-size:13.5px;font-weight:500;
  transition:.28s;pointer-events:none;box-shadow:var(--shadow-md)}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.err{background:#3A1618;color:#FFC9C9;border-color:rgba(255,120,120,.28)}

@media (max-width:520px){
  .sheet-foot .l{display:none}
  .sheet-head{padding:22px 20px 6px}
  .sheet-body{padding:18px 20px 6px}
  .sheet-foot{padding:14px 20px 22px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* the brand name is long; on phones the top bar keeps just the mark so the nav stays reachable */
@media (max-width:600px){aside .wordmark .name{display:none}}
