/* Eggnio design system.
 * Shared by public/index.html (marketing + wizard) and public/app.html (dashboard).
 * Dark mode is mode-scoped: body[data-mode="startup"] redefines the same tokens.
 * Use the tokens - never hardcode a colour, or the Creative/Startup flip breaks.
 */

:root{
  --bg:#fdf8f3; --ink:#1f1a17; --muted:#6b6259;
  --accent:#c2410c; --soft:#fef3ec; --card:#ffffff;
  --border:#ece2d6; --err:#a8261b;
  --err-bg:#fdecea; --err-border:#f3c2bd;
  /* used for prominent dark surfaces (buttons, logo, highlight, selected chip) */
  --solid:#1f1a17; --solid-fg:#ffffff;
  --field:#ffffff;
  /* focus ring — derived from the accent so it follows the mode flip */
  --ring:color-mix(in srgb, var(--accent) 22%, transparent);
  --ok:#1a7f4b; --warn:#b45309;
}
body{transition:background-color .25s ease, color .25s ease}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  line-height:1.5;-webkit-font-smoothing:antialiased;
}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:18px 28px;max-width:1240px;margin:0 auto;}
.brand{display:flex;align-items:center;gap:10px;font-weight:600}
.brand .logo{width:34px;height:34px;border-radius:9px;background:var(--solid);color:var(--solid-fg);display:grid;place-items:center;font-size:18px;}
.ver{font-size:11px;font-weight:600;color:var(--muted);background:var(--card);border:1px solid var(--border);border-radius:999px;padding:2px 7px;letter-spacing:.02em;line-height:1.4}
.pill{display:inline-flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:999px;padding:6px 12px;font-size:13px;color:var(--muted);}
.pill b{color:var(--ink);font-weight:600}
.top-links{display:flex;align-items:center;gap:18px;font-size:14px;color:var(--muted)}
.bmc-top{display:inline-flex;align-items:center;gap:8px;background:var(--card);color:var(--ink);text-decoration:none;font-weight:600;border:1.5px solid var(--ink);border-radius:10px;padding:8px 14px;font-size:14px;}
.bmc-top:hover{background:var(--soft)}

.hero{position:relative;max-width:1100px;margin:0 auto;padding:48px 28px 80px;text-align:center;}
/* keep all text content above the floating example cards */
.hero h1,
.hero .lede,
.hero .cta-row,
.hero .cta-sub,
.mode-toggle-wrap{position:relative;z-index:2}
.mode-toggle-wrap{display:flex;justify-content:center;margin-bottom:26px}
.hero h1{font-size:clamp(32px,5.4vw,60px);font-weight:700;letter-spacing:-.02em;line-height:1.05;margin:0 auto 18px;max-width:18ch;}
.hero h1 .hl{
  background:var(--solid);color:var(--solid-fg);
  padding:.05em .3em;border-radius:12px;display:inline-block;
  transform:rotate(-2.5deg);transform-origin:center;
  box-shadow:0 8px 24px -14px rgba(0,0,0,.35);
}
.hero .lede{font-size:18px;color:var(--muted);max-width:46ch;margin:0 auto 28px;}
.cta-row{display:flex;justify-content:center;align-items:center;gap:10px;flex-wrap:wrap;}
.cta-row .start{background:var(--solid);color:var(--solid-fg);border:0;font:inherit;font-weight:600;font-size:16px;padding:14px 24px;border-radius:12px;cursor:pointer;transition:transform .05s, filter .15s;}
.cta-row .start:hover{filter:brightness(.92)}
.cta-row .start:active{transform:translateY(1px)}
.cta-sub{font-size:13px;color:var(--muted);margin-top:14px}

/* ---------- mode toggle (segmented) ---------- */
.mode-toggle{
  display:inline-flex;background:var(--card);border:1px solid var(--border);
  border-radius:999px;padding:3px;gap:2px;position:relative;
}
.mode-toggle button{
  background:transparent;border:0;font:inherit;font-size:13px;font-weight:600;
  color:var(--muted);padding:6px 12px;border-radius:999px;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px;transition:color .15s, background .15s;
}
.mode-toggle button.on{background:var(--solid);color:var(--solid-fg)}
.mode-toggle button:not(.on):hover{color:var(--ink)}

/* ---------- mode-aware palette ---------- */
body[data-mode="startup"]{
  --bg:#0e0e14;
  --ink:#f3eee7;
  --muted:#9aa0ad;
  --card:#181820;
  --border:#2a2a35;
  --accent:#7aa2ff;      /* startup blue (light variant for dark bg) */
  --soft:#1e2538;
  --err:#ff8a80;
  --err-bg:#2a1014; --err-border:#5a2a30;
  --solid:#7aa2ff;       /* primary surfaces use accent in dark mode */
  --solid-fg:#0b0b11;
  --field:#13131b;
  --ok:#4ade80; --warn:#fbbf24;
}
body[data-mode="creative"] .float[data-modes="startup"]{display:none}
body[data-mode="startup"] .float[data-modes="creative"]{display:none}

.floats{position:absolute;inset:0;pointer-events:none}
.float{position:absolute;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:16px 18px;box-shadow:0 12px 32px -18px rgba(0,0,0,.45);font-size:13px;color:var(--ink);min-width:170px;}
.float .ftype{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.float .fname{font-weight:700;line-height:1.25;margin-bottom:8px}
.float .fmeta{font-size:12px;color:var(--muted)}
.float .deadline{display:inline-block;background:var(--soft);color:var(--accent);font-weight:600;border-radius:6px;padding:2px 7px;font-size:11px;margin-top:8px}
.float.f1{left:6%;top:30px;transform:rotate(-5deg)}
.float.f2{right:5%;top:10px;transform:rotate(4deg)}
.float.f3{right:10%;bottom:30px;transform:rotate(-3deg)}
.spark{position:absolute;font-size:22px;color:var(--ink);opacity:.45}
.spark.s1{left:42%;top:54%}
.spark.s2{right:32%;top:36%}
@media (max-width:880px){.float,.spark{display:none}}

.wizard{max-width:640px;margin:0 auto;padding:32px 20px 64px;display:none}
.wizard.show{display:block}
.progress{display:flex;align-items:center;gap:8px;margin-bottom:20px;font-size:13px;color:var(--muted);}
.progress .bars{display:flex;gap:6px;flex:1}
.progress .bar{flex:1;height:5px;border-radius:3px;background:var(--border)}
.progress .bar.on{background:var(--ink)}
.progress .step-n{font-variant-numeric:tabular-nums}

.card{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:28px;box-shadow:0 1px 0 rgba(0,0,0,.02),0 8px 24px -18px rgba(31,26,23,.12);}
.step h2{font-size:24px;font-weight:700;letter-spacing:-.01em;margin:0 0 6px}
.step .sub{color:var(--muted);font-size:15px;margin:0 0 22px}

fieldset{border:0;padding:0;margin:0 0 4px}
legend{font-weight:600;font-size:15px;margin-bottom:8px;padding:0}
label.lbl{display:block;font-size:14px;font-weight:500;margin-bottom:6px}
.field{margin-bottom:18px}
.help{font-size:13px;color:var(--muted);margin:-2px 0 6px}
input[type=text],input[type=email],select,textarea{
  width:100%;font:inherit;color:var(--ink);background:var(--field);
  border:1px solid var(--border);border-radius:10px;padding:11px 13px;
  transition:border-color .15s, box-shadow .15s;
}
textarea{min-height:90px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--ring);}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:520px){.grid-2{grid-template-columns:1fr}}

.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{position:relative}
.chip input{position:absolute;opacity:0;pointer-events:none}
.chip span{display:inline-block;padding:8px 13px;border-radius:999px;border:1.5px solid var(--border);background:var(--card);color:var(--ink);font-size:14px;cursor:pointer;transition:all .12s;}
.chip input:checked + span{background:var(--solid);color:var(--solid-fg);border-color:var(--solid);}
.chip span:hover{border-color:var(--ink)}

.honey{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.nav{display:flex;align-items:center;justify-content:space-between;margin-top:22px;gap:10px}
button.primary{background:var(--solid);color:var(--solid-fg);border:0;padding:12px 22px;border-radius:11px;font:inherit;font-weight:600;cursor:pointer;transition:filter .15s,transform .05s;}
button.primary:hover{filter:brightness(.92)}
button.primary:active{transform:translateY(1px)}
button.primary[disabled]{opacity:.65;cursor:wait}
button.ghost{background:transparent;border:0;color:var(--muted);font:inherit;cursor:pointer;padding:10px 6px;border-radius:9px;}
button.ghost:hover{color:var(--ink)}
.spinner{display:inline-block;width:14px;height:14px;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;opacity:.9;animation:spin .8s linear infinite;vertical-align:-2px;margin-right:8px;}
@keyframes spin{to{transform:rotate(360deg)}}
.error{background:var(--err-bg);border:1px solid var(--err-border);color:var(--err);border-radius:10px;padding:10px 12px;font-size:14px;margin-bottom:14px;display:none;}

/* ---------- generating screen (sponsor takeover, WeTransfer-style) ---------- */
.generating{display:none}
.generating.show{display:flex;position:fixed;inset:0;z-index:50;flex-direction:column;align-items:center;justify-content:center;padding:24px;overflow:auto}
.gen-bg{position:absolute;inset:0;z-index:0;background:var(--card);background-size:cover;background-position:center}
.gen-orb{
  width:80px;height:80px;border-radius:50%;margin:0 auto 24px;
  background:conic-gradient(from 0deg, var(--accent), var(--ink), var(--accent));
  animation:spin 2.4s linear infinite;
  mask:radial-gradient(circle at center, transparent 50%, #000 52%);
  -webkit-mask:radial-gradient(circle at center, transparent 50%, #000 52%);
}
.gen-inner{
  position:relative;z-index:2;width:100%;max-width:460px;text-align:center;
  background:color-mix(in srgb, var(--card) 82%, transparent);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  border:1px solid var(--border);border-radius:20px;
  padding:44px 28px;box-shadow:0 24px 60px -28px rgba(0,0,0,.5);
}
.gen-title{font-size:24px;font-weight:700;margin:0 0 8px}
.gen-tip{color:var(--muted);min-height:48px;font-size:15px}
.gen-meta{font-size:13px;color:var(--muted);margin-top:24px}
/* sponsor chip — funds the free tier, sits out of the user flow */
.gen-sponsor{
  position:absolute;left:50%;transform:translateX(-50%);bottom:26px;z-index:3;
  display:inline-flex;align-items:center;gap:10px;max-width:min(92vw,520px);
  text-decoration:none;color:var(--ink);font-size:13px;
  background:color-mix(in srgb, var(--card) 88%, transparent);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  border:1px solid var(--border);border-radius:999px;padding:9px 14px;
  box-shadow:0 8px 28px -12px rgba(0,0,0,.45);transition:transform .08s, box-shadow .15s;
}
.gen-sponsor:hover{transform:translateX(-50%) translateY(-1px);box-shadow:0 12px 32px -12px rgba(0,0,0,.5)}
.gen-sponsor-tag{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);background:var(--soft);border-radius:999px;padding:3px 8px;flex:none}
.gen-sponsor-text{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gen-sponsor-text b{color:var(--ink);font-weight:600}
.gen-sponsor-cta{color:var(--accent);font-weight:700;flex:none}
@media (max-width:520px){.gen-sponsor-text{white-space:normal}}

/* ---------- gate (email + tiers) ---------- */
.gate{display:none;max-width:780px;margin:0 auto;padding:32px 20px 64px}
.gate.show{display:block}
.gate h2{font-size:26px;font-weight:700;margin:0 0 6px;letter-spacing:-.01em}
.gate .sub{color:var(--muted);margin:0 0 22px}
.gate .email-field{margin-bottom:24px}
.gate .email-field label{display:block;font-size:14px;font-weight:500;margin-bottom:6px}

/* free tier — its own prominent row */
.free-tier{
  position:relative;display:flex;align-items:center;gap:16px;
  background:var(--card);border:2px solid var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent);
  border-radius:14px;padding:18px 20px;cursor:pointer;
  margin-bottom:28px;text-align:left;width:100%;font:inherit;color:var(--ink);
}
.free-tier .emoji{font-size:32px;line-height:1}
.free-tier .body{flex:1}
.free-tier .title-row{display:flex;align-items:center;gap:10px;margin-bottom:4px}
.free-tier .title{font-size:16px;font-weight:700}
.free-tier .free-badge{
  background:var(--accent);color:#fff;font-size:10px;font-weight:700;
  padding:3px 7px;border-radius:999px;letter-spacing:.04em;
}
.free-tier .desc{font-size:13px;color:var(--muted)}
.free-tier .price{font-size:18px;font-weight:700;color:var(--ink)}

/* upsell divider + heading */
.recurring-intro{margin-bottom:14px}
.recurring-intro h3{font-size:18px;font-weight:700;margin:0 0 4px;letter-spacing:-.01em}
.recurring-intro p{font-size:14px;color:var(--muted);margin:0}
.includes{list-style:none;padding:12px 14px;margin:12px 0 0;display:flex;flex-direction:column;gap:8px;background:var(--soft);border:1px solid var(--border);border-radius:12px}
.includes li{font-size:14px;color:var(--ink);display:flex;gap:8px;align-items:flex-start;line-height:1.45;font-weight:500}
.includes li strong{color:var(--accent)}

.tiers{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:22px;
}
@media (max-width:780px){.tiers{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:420px){.tiers{grid-template-columns:1fr}}
.tier{
  position:relative;background:var(--card);border:2px solid var(--border);
  border-radius:14px;padding:18px 14px;cursor:pointer;text-align:center;
  transition:border-color .15s, transform .08s, box-shadow .15s;
  display:flex;flex-direction:column;gap:6px;
}
.tier:hover{border-color:var(--ink)}
.tier.locked{cursor:not-allowed;opacity:.78}
.tier.locked:hover{border-color:var(--border)}
.tier .emoji{font-size:28px;line-height:1}
.tier .cadence{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.tier .price{font-size:18px;font-weight:700;color:var(--ink)}
.tier .term{font-size:11px;color:var(--muted);font-style:italic;margin-top:-2px}
.tier .label{font-size:12px;color:var(--muted)}
.tier .cadence-sub{font-size:11px;color:var(--muted);margin-top:-2px;line-height:1.2}
.recurring-note{font-size:13px;color:var(--ink);background:var(--soft);border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin:12px 0 0}
.recurring-note strong{color:var(--accent)}
.tier .lock-badge{
  position:absolute;top:8px;right:8px;background:var(--soft);color:var(--accent);
  font-size:10px;font-weight:700;padding:3px 7px;border-radius:999px;letter-spacing:.04em;
}
.gate-msg{
  display:none;background:var(--soft);border:1px solid var(--border);
  border-radius:10px;padding:12px 14px;font-size:14px;color:var(--ink);margin-bottom:18px;
}
.gate-msg.show{display:block}
.gate-msg a{color:var(--accent);font-weight:600}

/* password unlock for the advanced (paid) preview */
.unlock-box{background:var(--soft);border:1px solid var(--border);border-radius:14px;padding:16px 18px;margin-bottom:22px}
.unlock-head{font-weight:700;font-size:15px;margin-bottom:4px}
.unlock-sub{font-size:13px;color:var(--muted);margin:0 0 12px}
.unlock-row{display:flex;gap:8px;flex-wrap:wrap}
.unlock-row input{flex:1;min-width:180px}
.unlock-row .primary{white-space:nowrap}
.unlock-box[hidden]{display:none}
.unlock-support{font-size:13px;color:var(--muted);margin:10px 0 0}
.unlock-support a{color:var(--accent);font-weight:600;text-decoration:none}
.tier.sel{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}

/* ---------- result screen ---------- */
.result{display:none;max-width:760px;margin:0 auto;padding:32px 20px 80px}
.result.show{display:block}
.result h2{font-size:26px;font-weight:700;margin:0 0 6px;letter-spacing:-.01em}
.result .sub{color:var(--muted);margin:0 0 18px}
.result-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.result-actions button{background:var(--card);color:var(--ink);border:1.5px solid var(--ink);border-radius:10px;padding:9px 14px;font:inherit;font-weight:600;font-size:14px;cursor:pointer;}
.result-actions button:hover{background:var(--soft)}
.result-actions button.copied{background:var(--solid);color:var(--solid-fg)}
.preview{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:28px;box-shadow:0 1px 0 rgba(0,0,0,.02),0 8px 24px -18px rgba(0,0,0,.35);}
.preview h2,.preview h3{margin-top:1.2em}
.preview a{color:var(--accent)}
.restart{display:inline-block;margin-top:22px;color:var(--muted);background:none;border:0;cursor:pointer;font:inherit;text-decoration:underline}

/* ---------- sponsor card (result + footer placements) ---------- */
.spcard{margin:24px 0 0}
.spcard[hidden]{display:none}
.spcard-link{display:flex;align-items:center;gap:14px;text-decoration:none;color:var(--ink);
  background:var(--card);border:1px solid var(--border);border-radius:14px;padding:14px 16px;
  box-shadow:0 1px 0 rgba(0,0,0,.02),0 8px 24px -20px rgba(0,0,0,.3);transition:border-color .15s, transform .08s}
.spcard-link:hover{border-color:var(--ink);transform:translateY(-1px)}
.spcard-thumb{flex:none;width:52px;height:52px;border-radius:10px;background:var(--soft)}
.spcard-body{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.spcard-tag{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}
.spcard-name{font-weight:700;font-size:15px}
.spcard-tagline{font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.spcard-cta{flex:none;color:var(--accent);font-weight:700;font-size:18px}
.spcard--mini{margin:18px auto 0;max-width:440px}
.spcard--mini .spcard-thumb{width:40px;height:40px}
.spcard--mini .spcard-name{font-size:14px}
.spcard-network{min-height:90px;display:flex;align-items:center;justify-content:center}

footer{max-width:900px;margin:0 auto;padding:32px 28px 56px;text-align:center;color:var(--muted);font-size:14px;border-top:1px solid var(--border);}
footer p{margin:0 0 14px}
.bmc{display:inline-flex;align-items:center;gap:8px;background:#ffdd00;color:#0d0c22;text-decoration:none;font-weight:600;border-radius:11px;padding:11px 18px;border:1px solid #e6c800;}
.bmc:hover{background:#ffe53d}
.req{color:var(--accent)}

/* ==========================================================================
   Dashboard (public/app.html)
   Everything below is used only by the logged-in area. It reuses the tokens
   above, so it follows the Creative/Startup palette flip automatically.
   ========================================================================== */

/* ---------- app shell ---------- */
.app-topbar{display:flex;align-items:center;gap:16px;padding:14px 24px;border-bottom:1px solid var(--border);background:var(--card);position:sticky;top:0;z-index:30;flex-wrap:wrap}
.app-topbar .brand{margin-right:auto}
.app-topbar .brand a{color:inherit;text-decoration:none;display:flex;align-items:center;gap:10px}
.app-main{max-width:1100px;margin:0 auto;padding:28px 24px 80px}
.app-nav{display:flex;gap:4px;overflow-x:auto;padding:0 24px;border-bottom:1px solid var(--border);background:var(--card);position:sticky;top:57px;z-index:29;-webkit-overflow-scrolling:touch}
.app-nav a{flex:none;padding:12px 14px;font-size:14px;font-weight:600;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;white-space:nowrap}
.app-nav a:hover{color:var(--ink)}
.app-nav a.on{color:var(--ink);border-bottom-color:var(--accent)}
.view{display:none}
.view.on{display:block}
.view-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.view-head h1{font-size:26px;font-weight:700;letter-spacing:-.01em;margin:0 0 4px}
.view-head .sub{color:var(--muted);font-size:15px;margin:0}
.view-head .actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}

/* ---------- account menu ---------- */
.acct{position:relative}
.acct-btn{display:inline-flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:999px;padding:5px 12px 5px 5px;font:inherit;font-size:13px;color:var(--ink);cursor:pointer}
.acct-btn:hover{border-color:var(--ink)}
.avatar{width:26px;height:26px;border-radius:50%;background:var(--solid);color:var(--solid-fg);display:grid;place-items:center;font-size:12px;font-weight:700;flex:none}
.acct-menu{position:absolute;right:0;top:calc(100% + 8px);min-width:220px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 32px -18px rgba(0,0,0,.45);padding:6px;display:none;z-index:40}
.acct-menu.on{display:block}
.acct-menu .who{padding:10px 12px;font-size:13px;color:var(--muted);border-bottom:1px solid var(--border);margin-bottom:4px;word-break:break-all}
.acct-menu button,.acct-menu a{display:block;width:100%;text-align:left;background:none;border:0;font:inherit;font-size:14px;color:var(--ink);text-decoration:none;padding:9px 12px;border-radius:8px;cursor:pointer}
.acct-menu button:hover,.acct-menu a:hover{background:var(--soft)}

/* ---------- data table -> stacked cards on mobile ---------- */
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:14px;background:var(--card)}
table.data{width:100%;border-collapse:collapse;font-size:14px}
table.data th{text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:12px 14px;border-bottom:1px solid var(--border);white-space:nowrap}
table.data td{padding:13px 14px;border-bottom:1px solid var(--border);vertical-align:middle}
table.data tr:last-child td{border-bottom:0}
table.data tbody tr{cursor:pointer;transition:background .12s}
table.data tbody tr:hover{background:var(--soft)}
table.data .venue{font-weight:600}
table.data .dim{color:var(--muted);font-size:13px}
@media (max-width:760px){
  .table-wrap{border:0;border-radius:0;background:transparent;overflow:visible}
  table.data,table.data tbody,table.data tr,table.data td{display:block;width:100%}
  table.data thead{display:none}
  table.data tr{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:14px;margin-bottom:10px}
  table.data td{border:0;padding:3px 0;display:flex;gap:12px;align-items:baseline}
  table.data td::before{content:attr(data-label);flex:none;width:96px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
  table.data td:empty{display:none}
}

/* ---------- status + match badges ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:3px 9px;font-size:11px;font-weight:700;letter-spacing:.03em;white-space:nowrap;border:1px solid transparent}
.badge--neutral{background:var(--soft);color:var(--muted);border-color:var(--border)}
.badge--live{background:var(--soft);color:var(--accent);border-color:var(--accent)}
.badge--ok{background:color-mix(in srgb,var(--ok) 14%,transparent);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.badge--warn{background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent)}
.badge--err{background:var(--err-bg);color:var(--err);border-color:var(--err-border)}
.match{display:inline-flex;align-items:baseline;gap:3px;font-weight:700;font-size:15px;color:var(--accent);font-variant-numeric:tabular-nums}
.match small{font-size:11px;font-weight:600}
.match-bar{height:4px;border-radius:2px;background:var(--border);overflow:hidden;margin-top:5px;width:70px}
.match-bar span{display:block;height:100%;background:var(--accent)}

/* ---------- opportunity / project cards ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.ocard{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:18px;display:flex;flex-direction:column;gap:10px}
.ocard:hover{border-color:var(--ink)}
.ocard-top{display:flex;align-items:flex-start;gap:12px}
.ocard h3{margin:0;font-size:16px;font-weight:700;line-height:1.3;flex:1}
.ocard h3 a{color:inherit;text-decoration:none}
.ocard h3 a:hover{text-decoration:underline}
.ocard .meta{font-size:13px;color:var(--muted);display:flex;flex-wrap:wrap;gap:4px 10px}
.ocard .why{font-size:13px;color:var(--muted);background:var(--soft);border-radius:10px;padding:9px 11px}
.ocard .why b{color:var(--ink);font-weight:600}
.ocard-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:4px}
.ocard-actions button{background:var(--card);color:var(--ink);border:1.5px solid var(--border);border-radius:9px;padding:7px 11px;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.ocard-actions button:hover{border-color:var(--ink)}
.ocard-actions button.on{background:var(--solid);color:var(--solid-fg);border-color:var(--solid)}
.eligible{display:flex;flex-direction:column;gap:3px;font-size:13px}
.eligible span{display:flex;gap:7px;align-items:baseline}
.eligible .yes{color:var(--ok)}
.eligible .no{color:var(--err)}

/* ---------- project summary line ---------- */
.pstats{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.pstats b{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}

/* ---------- next actions ---------- */
.actions-list{display:flex;flex-direction:column;gap:8px}
.action{display:flex;align-items:flex-start;gap:12px;background:var(--card);border:1px solid var(--border);border-left:3px solid var(--border);border-radius:12px;padding:13px 15px;text-decoration:none;color:inherit}
.action:hover{border-color:var(--ink)}
.action.sev-red{border-left-color:var(--err)}
.action.sev-amber{border-left-color:var(--warn)}
.action.sev-green{border-left-color:var(--ok)}
.action .dot{flex:none;font-size:13px;line-height:1.5}
.action .txt{flex:1}
.action .txt b{display:block;font-weight:600;font-size:14px}
.action .txt span{font-size:13px;color:var(--muted)}

/* ---------- detail workspace ---------- */
.detail-grid{display:grid;grid-template-columns:1fr 300px;gap:20px;align-items:start}
@media (max-width:880px){.detail-grid{grid-template-columns:1fr}}
.panel{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px;margin-bottom:14px}
.panel h2{font-size:15px;font-weight:700;margin:0 0 14px;letter-spacing:-.01em}
.timeline{display:flex;flex-direction:column;gap:2px}
.tl-row{display:flex;align-items:center;gap:11px;padding:9px 0;border-bottom:1px solid var(--border)}
.tl-row:last-child{border-bottom:0}
.tl-row .tl-label{flex:1;font-size:14px}
.tl-row .tl-date{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.tl-row.done .tl-label{color:var(--muted);text-decoration:line-through}
.tl-check{flex:none;width:18px;height:18px;border-radius:5px;border:1.5px solid var(--border);background:var(--field);cursor:pointer;display:grid;place-items:center;padding:0;font-size:11px;color:var(--solid-fg)}
.tl-check.on{background:var(--solid);border-color:var(--solid)}
.linklist{display:flex;flex-direction:column;gap:7px}
.linklist a{font-size:14px;color:var(--accent);text-decoration:none;word-break:break-all}
.linklist a:hover{text-decoration:underline}

/* ---------- calendar ---------- */
.cal-months{display:flex;flex-direction:column;gap:22px}
.cal-month h3{font-size:15px;font-weight:700;margin:0 0 10px;position:sticky;top:0}
.cal-day{display:flex;gap:14px;padding:10px 0;border-bottom:1px solid var(--border);align-items:baseline}
.cal-day:last-child{border-bottom:0}
.cal-date{flex:none;width:78px;font-size:13px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
.cal-item{flex:1;font-size:14px}
.cal-item .dim{color:var(--muted);font-size:13px}

/* ---------- empty states ---------- */
.empty{text-align:center;padding:52px 24px;background:var(--card);border:1px dashed var(--border);border-radius:14px;color:var(--muted)}
.empty .em{font-size:34px;display:block;margin-bottom:12px}
.empty h3{margin:0 0 6px;font-size:17px;font-weight:700;color:var(--ink)}
.empty p{margin:0 auto 18px;font-size:14px;max-width:42ch}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;z-index:60;display:none;align-items:flex-start;justify-content:center;padding:24px;overflow-y:auto;background:rgba(0,0,0,.42)}
.modal.on{display:flex}
.modal-inner{background:var(--card);border:1px solid var(--border);border-radius:16px;width:100%;max-width:560px;margin:auto;padding:24px;box-shadow:0 24px 60px -28px rgba(0,0,0,.5)}
.modal-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:18px}
.modal-head h2{margin:0;font-size:19px;font-weight:700;flex:1}
.modal-x{background:none;border:0;font:inherit;font-size:20px;line-height:1;color:var(--muted);cursor:pointer;padding:2px 6px;border-radius:8px}
.modal-x:hover{color:var(--ink);background:var(--soft)}
.modal-foot{display:flex;gap:10px;justify-content:flex-end;margin-top:20px;flex-wrap:wrap}

/* ---------- toast ---------- */
.toasts{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:70;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{background:var(--solid);color:var(--solid-fg);border-radius:11px;padding:11px 18px;font-size:14px;font-weight:600;box-shadow:0 12px 32px -16px rgba(0,0,0,.6);animation:toast-in .18s ease}
.toast--err{background:var(--err);color:#fff}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- contextual cheat-sheet help ---------- */
.cheat{background:var(--soft);border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin-top:14px}
.cheat-head{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:8px}
.cheat details{border-top:1px solid var(--border);padding-top:8px;margin-top:8px}
.cheat details:first-of-type{border-top:0;padding-top:0;margin-top:0}
.cheat summary{cursor:pointer;font-size:14px;font-weight:600;padding:4px 0;list-style:none}
.cheat summary::-webkit-details-marker{display:none}
.cheat summary::before{content:"▸ ";color:var(--accent)}
.cheat details[open] summary::before{content:"▾ "}
.cheat .cheat-body{font-size:14px;color:var(--muted);padding:4px 0 8px}
.cheat .cheat-body p{margin:0 0 8px}
.cheat .cheat-body ul{margin:0 0 8px;padding-left:20px}
.cheat .cheat-body table{width:100%;border-collapse:collapse;font-size:13px;margin:8px 0}
.cheat .cheat-body th,.cheat .cheat-body td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:top}
.cheat .cheat-body th{color:var(--ink);font-weight:700}

/* ---------- sign-in ---------- */
.signin{max-width:420px;margin:64px auto;text-align:center}
.signin h1{font-size:27px;font-weight:700;letter-spacing:-.02em;margin:0 0 8px}
.signin p{color:var(--muted);font-size:15px;margin:0 0 24px}
.signin form{text-align:left}

/* ---------- portfolio ---------- */
.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:12px;margin-bottom:22px}
.stat{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:16px 18px}
.stat .n{font-size:28px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.1}
.stat .l{font-size:12px;color:var(--muted);margin-top:3px}

/* ---------- utilities ---------- */
.muted{color:var(--muted)}
.small{font-size:13px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.spacer{flex:1}
[hidden]{display:none !important}
.loading{text-align:center;padding:48px;color:var(--muted);font-size:14px}

/* ---------- print (portfolio export, application detail) ---------- */
@media print{
  .app-topbar,.app-nav,.view-head .actions,.ocard-actions,.modal,.toasts,footer,.cheat{display:none !important}
  body{background:#fff;color:#000}
  .app-main{max-width:none;padding:0}
  .panel,.stat,.table-wrap{border-color:#ccc;box-shadow:none;break-inside:avoid}
  table.data tbody tr{cursor:auto}
  a{color:#000;text-decoration:none}
}
