/* Next Target — the "Persona Leads" design system.
   A deep navy header over a light grey page, white cards with 22px corners
   and a soft lift, one green accent, pill chips and 14px-radius buttons,
   Plus Jakarta Sans throughout. Two themes, light and dark, driven entirely
   by the tokens below; the choice sets data-next-target-theme on <html> and
   is remembered in localStorage. Never hard-code a colour that has a token;
   the only literals sit on fixed fills (white on the brand, on the navy).

   Type: Plus Jakarta Sans for everything (self-hosted, 400–800). JetBrains
   Mono only for genuinely monospaced data — phone numbers, identifiers,
   code, SQL. */

/* ---------- tokens ---------- */
:root{
  --bg:#F4F5F7;            /* page; also input backgrounds */
  --surface:#FFFFFF;       /* cards, panels, menus, modals */
  --surface2:#EBEEF2;      /* soft fills: chips, icon tiles, empty bars */
  --ink:#0F1B2D;--ink-rgb:15,27,45;
  --muted:#5F6B7A;
  --line:rgba(15,27,45,.09);
  --brand:#12A67A;
  --brand-soft:rgba(18,166,122,.12);
  --brand-ink:#FFFFFF;     /* text on a solid --brand fill */
  --shadow:0 10px 30px rgba(15,27,45,.08);
  --nav:#0F1B2D;--nav-ink:#FFFFFF;
  --overlay:rgba(15,27,45,.5);
}
:root[data-next-target-theme="dark"]{
  --bg:#0A1220;--surface:#121C2F;--surface2:#1B2740;
  --ink:#F1F4F8;--ink-rgb:241,244,248;
  --muted:#98A3B5;
  --line:rgba(255,255,255,.09);
  --brand:#2FC495;--brand-soft:rgba(47,196,149,.16);--brand-ink:#06261C;
  --shadow:0 12px 34px rgba(0,0,0,.4);
  --nav:#060B14;--nav-ink:#FFFFFF;
  --overlay:rgba(0,0,0,.6);
}

/* Semantic and categorical colours, tints and the derived names the
   components read. Persona colours are hues: oklch(0.72 0.14 <hue>). */
:root{
  --soft:var(--surface2);
  --ok:#16a34a;--danger:#D64545;--warn:#ea580c;
  --c-purple:#7c3aed;--c-blue:#2563eb;--c-green:#16a34a;--c-orange:#ea580c;
  --navy:linear-gradient(135deg,var(--nav),#1B2740);
  --avatar-grad:linear-gradient(140deg,#12A67A,#2FC495);

  --brand-tint:var(--brand-soft);
  --brand-border:color-mix(in srgb,var(--brand) 40%,var(--surface));
  --brand-hover:color-mix(in srgb,var(--brand) 86%,var(--ink));
  --ok-tint:color-mix(in srgb,var(--ok) 14%,var(--surface));
  --danger-tint:color-mix(in srgb,var(--danger) 12%,var(--surface));
  --danger-border:color-mix(in srgb,var(--danger) 35%,var(--surface));
  --warn-tint:color-mix(in srgb,var(--warn) 12%,var(--surface));
  --purple-tint:color-mix(in srgb,var(--c-purple) 12%,var(--surface));
  /* a colour used as small text on its own tint, pulled toward the ink so it
     reads at 4.5:1 on either paper */
  --ink-mix:76%;

  --focus:0 0 0 3px var(--brand-soft);
  --shadow-card:var(--shadow);
  --shadow-menu:0 8px 24px rgba(15,27,45,.12);
  --shadow-modal:var(--shadow);
  --sidebar-w:230px;--header-h:64px;
}
:root[data-next-target-theme="dark"]{
  --ink-mix:64%;
  --shadow-menu:0 8px 24px rgba(0,0,0,.45);
}

/* ---------- base ---------- */
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--ink);
     font:14px/1.5 'Plus Jakarta Sans',system-ui,sans-serif;
     -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
     transition:background .35s,color .35s}
/* form controls do not inherit the body font by default */
input,select,textarea,button{font-family:inherit}
a{color:var(--brand);text-decoration:none}
a:hover{color:var(--ink)}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
::selection{background:var(--brand-soft)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--surface2);border-radius:8px}
h1,h2,h3{text-wrap:pretty}
.mono{font-family:'JetBrains Mono',monospace}
.muted{color:var(--muted)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);
  white-space:nowrap;border:0}

/* The eyebrow label — card kickers, field labels, table headers. */
.eyebrow{font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}

/* icon sizing (outline Lucide sprite, stroke = currentColor) */
.ic14{width:14px;height:14px}
.ic16{width:16px;height:16px}
.ic18{width:18px;height:18px}
.ic19{width:19px;height:19px}
.ic20{width:20px;height:20px}
.ic22{width:22px;height:22px}
.ic28{width:28px;height:28px}
svg[class^="ic"]{flex:none}

@keyframes rise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes pop{0%{transform:scale(.4);opacity:0}70%{transform:scale(1.12)}100%{transform:scale(1);opacity:1}}
@keyframes drift{0%{transform:translate(0,0) rotate(0)}100%{transform:translate(0,-120vh) rotate(200deg)}}

/* ---------- app shell: navy header, side menu, page column ---------- */
.app{min-height:100vh;display:flex;flex-direction:column}
.topbar-nav{position:sticky;top:0;z-index:30;height:var(--header-h);background:var(--nav);color:var(--nav-ink);
  display:flex;align-items:center;gap:24px;padding:0 24px 0 20px}
.brand{display:flex;align-items:center;gap:10px;color:var(--nav-ink);text-decoration:none;flex:none;
  font-weight:800;font-size:17px;letter-spacing:-.01em}
.brand:hover{color:var(--nav-ink)}
.brand-mark{width:30px;height:30px;border-radius:9px;background:var(--brand);color:#fff;
  display:inline-grid;place-items:center;flex:none}
.brand-mark-lg{width:52px;height:52px;border-radius:14px}
.brand-mark-lg svg{width:28px;height:28px}
.topbar-center{flex:1;min-width:0;display:flex;justify-content:center;align-items:center}
.topbar-right{display:flex;align-items:center;gap:14px;flex:none}

/* the light / dark switch: a pill with a knob carrying the sun or the moon */
.theme-switch{width:52px;height:28px;border-radius:14px;border:none;padding:0;position:relative;cursor:pointer;
  background:rgba(255,255,255,.14);transition:background .3s}
.theme-switch:hover{background:rgba(255,255,255,.22)}
.theme-knob{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;color:#0F1B2D;
  display:grid;place-items:center;transition:left .3s cubic-bezier(.2,.8,.2,1)}
.theme-moon{display:none}
:root[data-next-target-theme="dark"] .theme-knob{left:27px}
:root[data-next-target-theme="dark"] .theme-sun{display:none}
:root[data-next-target-theme="dark"] .theme-moon{display:block}

/* account menu */
details.menu{position:relative}
details.menu > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center}
details.menu > summary::-webkit-details-marker{display:none}
details.menu > summary:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:99px}
.account-trigger{gap:6px;font-size:12.5px;font-weight:600;color:var(--nav-ink);opacity:.8;min-height:34px;
  padding:4px 4px 4px 0}
.account-trigger:hover{opacity:1}
.account-name{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.menu-panel{position:absolute;right:0;top:calc(100% + 8px);min-width:200px;background:var(--surface);
  border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-menu);padding:6px;z-index:40;
  color:var(--ink)}
.user-panel{min-width:230px;padding:12px 12px 6px}
.user-panel-name{font-size:13.5px;font-weight:700}
.user-panel-email{font-size:12px;color:var(--muted);word-break:break-all}
.user-panel-role{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);
  margin-top:6px}
.menu-item{display:flex;align-items:center;gap:8px;margin-top:10px;padding:9px 6px;min-height:44px;
  border-top:1px solid var(--line);color:var(--ink);font-weight:600;font-size:13px;text-decoration:none}
.menu-item:hover{color:var(--brand)}

/* the frame under the header: the side menu and the page */
.frame{flex:1;display:flex;align-items:stretch;min-height:0}
.sidebar{width:var(--sidebar-w);flex:none;position:sticky;top:var(--header-h);height:calc(100vh - var(--header-h));
  overflow-y:auto;background:var(--surface);border-right:1px solid var(--line);padding:22px 14px 24px;
  display:flex;flex-direction:column;gap:22px;scrollbar-width:thin}
.side-nav{display:flex;flex-direction:column;gap:2px}
.side-label{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);
  padding:0 12px 8px}
.side-link{display:flex;align-items:center;gap:10px;min-height:40px;padding:8px 12px;border-radius:12px;
  color:var(--muted);font-size:13.5px;font-weight:600;text-decoration:none;
  transition:background .15s,color .15s}
.side-link:hover{background:var(--surface2);color:var(--ink)}
.side-link.active{background:var(--brand-soft);color:var(--brand)}
.side-count{margin-left:auto;font-size:11px;font-weight:700;color:var(--muted)}
.side-link.active .side-count{color:var(--brand)}
.side-count-bad{color:var(--danger)}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.content{flex:1;max-width:1180px;width:100%;margin:0 auto;padding:44px 32px 80px}
/* Page actions (search, buttons): a row above the page header, rendered only
   when the page fills the page_actions block. */
.topbar{max-width:1180px;margin:0 auto;width:100%;display:flex;align-items:center;gap:16px;padding:28px 32px 0}
.topbar:not(:has(.topbar-actions > *)){display:none}
.topbar:has(.topbar-actions > *) + .content{padding-top:18px}
.topbar-actions{display:flex;align-items:center;gap:10px;margin-left:auto;flex-wrap:wrap;justify-content:flex-end}
.topbar-search{flex:none;width:260px;min-width:0;max-width:none}

.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:28px;flex-wrap:wrap}
.page-head h1{margin:0;font-size:34px;font-weight:800;letter-spacing:-.03em;line-height:1.1}
.page-head .sub{font-size:15px;color:var(--muted);margin-top:8px;max-width:72ch;text-wrap:pretty}
.lead-head{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}

@media (max-width:900px){
  /* the side menu becomes a strip of pills under the header */
  .frame{flex-direction:column}
  .sidebar{position:static;width:auto;height:auto;flex-direction:row;flex-wrap:nowrap;gap:0 18px;
    padding:10px 16px;border-right:none;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
  .sidebar::-webkit-scrollbar{display:none}
  .side-nav{flex-direction:row;flex-wrap:nowrap;gap:4px;align-items:center}
  .side-link{white-space:nowrap}
  .side-label{padding:0 6px 0 0;white-space:nowrap}
  .side-link{min-height:44px;padding:8px 12px;border-radius:99px}
  .topbar-nav{padding:0 16px;gap:12px}
  .account-name{display:none}
  .content{padding:24px 16px 60px}
  .topbar{padding:20px 16px 0}
  .page-head h1{font-size:28px}
}

/* ---------- avatars ---------- */
/* Tone comes from the avatar_color filter as --ac / --at custom props. */
.avatar{border-radius:10px;background:var(--at,var(--brand-tint));color:var(--ac,var(--brand));
  display:flex;align-items:center;justify-content:center;font-weight:700;flex:none}
.avatar-36{width:34px;height:34px;font-size:12px}

/* ---------- buttons ----------
   Every button is a pill. Primary is inked (and so inverts in dark mode),
   secondary is outlined, danger is solid red for destructive confirms, the
   tinted variants carry a colour lightly, and text links end in an arrow. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;
  padding:0 22px;border-radius:14px;border:1px solid var(--line);background:var(--surface);
  color:var(--ink);font:700 14px 'Plus Jakarta Sans',sans-serif;cursor:pointer;white-space:nowrap;
  text-decoration:none;transition:background .2s,color .2s,border-color .2s,transform .2s}
.btn:hover{background:var(--surface2);color:var(--ink);border-color:var(--line)}
.btn-primary{border-color:transparent;background:var(--brand);color:var(--brand-ink)}
.btn-primary:hover{background:var(--brand);color:var(--brand-ink);border-color:transparent;transform:translateY(-2px)}
.btn-pill{border-radius:999px}
.btn-danger{border-color:transparent;background:var(--danger);color:#fff}
.btn-danger:hover{background:color-mix(in srgb,var(--danger) 85%,var(--ink));color:#fff;border-color:transparent}
.btn-tint{background:var(--brand-tint);border-color:var(--brand-border);
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink))}
.btn-tint:hover{background:color-mix(in srgb,var(--brand) 18%,var(--surface));
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink));border-color:var(--brand-border)}
.btn-tint-danger{background:var(--danger-tint);border-color:var(--danger-border);
  color:color-mix(in srgb,var(--danger) var(--ink-mix),var(--ink))}
.btn-tint-danger:hover{background:color-mix(in srgb,var(--danger) 18%,var(--surface));
  color:color-mix(in srgb,var(--danger) var(--ink-mix),var(--ink));border-color:var(--danger-border)}
.btn-on-dark{background:#fff;border-color:transparent;color:#0F1B2D}
.btn-on-dark:hover{background:#EBEEF2;color:#0F1B2D;border-color:transparent}
.btn-sm{min-height:36px;padding:0 16px;font-size:12.5px}
.btn-lg{min-height:48px;padding:0 26px;font-size:15px;font-weight:800}
.btn[disabled],.btn:disabled{background:var(--soft);border-color:transparent;color:var(--muted);
  cursor:not-allowed}
.btn-block{width:100%}
.icon-btn{width:34px;height:34px;border-radius:12px;border:1px solid var(--line);
  background:transparent;color:var(--muted);display:inline-flex;align-items:center;
  justify-content:center;cursor:pointer;flex:none;transition:color .15s,border-color .15s}
.icon-btn:hover{color:var(--ink);border-color:var(--muted);background:transparent}
.icon-btn.small{width:28px;height:28px}
.btn-link{background:none;border:none;padding:0;cursor:pointer;
  font:600 13px 'Plus Jakarta Sans',sans-serif;color:var(--brand)}
.btn-link:hover{color:var(--brand-hover)}
/* a row of actions at the end of a table row or card */
.row-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center}

/* ---------- form controls ---------- */
.input{min-height:46px;padding:0 16px;border-radius:12px;border:1.5px solid var(--line);
  background:var(--bg);color:var(--ink);font:400 14.5px/1.5 'Plus Jakarta Sans',sans-serif;
  outline:none;width:100%;transition:border-color .15s,box-shadow .15s}
.input:focus{border-color:var(--brand);box-shadow:var(--focus)}
.input::placeholder{color:var(--muted)}
select.input{cursor:pointer}
.input[readonly]{background:var(--soft);color:var(--muted);border-style:dashed;cursor:not-allowed}
.input[readonly]:focus{border-color:var(--line);box-shadow:none}
.input[aria-invalid="true"],.input.is-invalid{border-color:var(--danger)}
textarea.input{min-height:66px;padding:13px 15px;resize:vertical;line-height:1.5}
textarea.input.mono{font:400 12.5px/1.6 'JetBrains Mono',monospace}
.w-auto{width:auto}
.lock-badge{display:inline-flex;align-items:center;gap:4px;margin-left:7px;
  padding:2px 8px;border-radius:99px;vertical-align:1px;
  background:var(--soft);color:var(--muted);font:600 10.5px 'Plus Jakarta Sans',sans-serif}

/* Password-manager overlays: LastPass ignores data-lpignore and injects its
   own icon element into the field's label. This app has no password fields —
   sign-in is Google OIDC — so suppress it. (Inline !important on the icon
   root beats stylesheet display:none; hide with inherited properties.) */
div[data-lastpass-icon-root],
div[data-lastpass-root],
[data-lastpass-infield],
com-1password-button{
  visibility:hidden!important;opacity:0!important;pointer-events:none!important;
  width:0!important;height:0!important}
input.input,input.chip-input{background-image:none!important}

.field{display:block;min-width:0}
.field > span:first-child{display:block;font-size:11.5px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);margin-bottom:10px}
.field-hint{display:block;font-size:12px;color:var(--muted);margin-top:10px;line-height:1.5}
.field-error{display:block;font-size:12px;color:var(--danger);margin-top:8px}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;align-items:start}
.form-row{display:flex;gap:10px;align-items:center;margin-top:18px;flex-wrap:wrap}
.form-section{margin-top:26px}
.section-head{display:flex;align-items:center;gap:9px;margin-bottom:12px;
  font:800 14px 'Plus Jakarta Sans',sans-serif;color:var(--ink)}
.section-head .section-head-note{font:500 12px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}

.search-wrap{position:relative;flex:1;min-width:240px;max-width:340px}
.search-wrap svg{position:absolute;left:15px;top:50%;transform:translateY(-50%);color:var(--muted)}
.search-wrap .input{padding-left:40px}
.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.toolbar-count{margin-left:auto;font-size:12px;font-weight:600;color:var(--muted)}

/* choice cards in modals: a checkbox with a title and a line of help */
.cap-option{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);
  border-radius:10px;padding:12px 14px;cursor:pointer;transition:border-color .12s,background .12s}
.cap-option input{margin-top:3px;accent-color:var(--brand)}
.cap-option b{font-size:13px;color:var(--ink)}
.cap-option small{display:block;font-size:12px;color:var(--muted);line-height:1.45;margin-top:2px}
.cap-option:has(input:checked){border-color:var(--brand);background:var(--brand-tint)}
input[type=checkbox],input[type=radio]{accent-color:var(--brand)}

/* toggle switch — a real checkbox, restyled. The input keeps its own focus,
   keyboard and screen-reader behaviour; only its appearance is replaced, and it
   stays in the layout (not display:none) so it is still focusable. */
.switch{display:inline-flex;align-items:center;gap:9px;cursor:pointer;
  min-height:44px;font-size:13px;font-weight:600;color:var(--ink);user-select:none}
.switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0}
.switch-track{position:relative;flex:none;width:34px;height:18px;border-radius:99px;
  background:var(--line);transition:background .16s ease}
.switch-knob{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;
  background:var(--surface);box-shadow:0 1px 2px rgba(0,0,0,.25);transition:transform .16s ease}
.switch input:checked + .switch-track{background:var(--brand)}
.switch input:checked + .switch-track .switch-knob{transform:translateX(16px)}
.switch input:focus-visible + .switch-track{outline:2px solid var(--brand);outline-offset:2px}
.switch:hover .switch-track{background:var(--muted)}
.switch:hover input:checked + .switch-track{background:var(--brand)}

/* range slider */
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;
  background:var(--line);outline:none;margin:0;cursor:pointer}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;
  background:var(--brand);border:3px solid var(--surface);box-shadow:0 1px 4px rgba(13,17,48,.3)}
input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--brand);
  border:3px solid var(--surface)}
input[type=range]:focus-visible{outline:2px solid var(--brand);outline-offset:6px}

/* ---------- cards ---------- */
.card{border:1px solid var(--line);border-radius:22px;background:var(--surface);box-shadow:var(--shadow)}
.card-pad{padding:24px 26px}
.card-title{font-weight:800;font-size:18px;letter-spacing:-.01em;margin:0 0 14px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:16px 20px;border-bottom:1px solid var(--line);font:800 15px 'Plus Jakarta Sans',sans-serif}
.card-head a{font:600 13px 'Plus Jakarta Sans',sans-serif}
.card-lift{box-shadow:var(--shadow-card)}
/* section header inside a page: heavy H2 left, text link right */
.section-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  font-weight:800;font-size:18px;margin:30px 0 14px}
.section-title a{font:600 13px 'Plus Jakarta Sans',sans-serif}
/* Destructive card (the clear-all zone): tinted border only — a filled panel
   would shout louder than an action you rarely want. */
.card-danger{border-color:var(--danger-border)}
.clear-tables{display:grid;gap:10px 32px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.clear-row{display:flex;justify-content:space-between;gap:12px;
  padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}
.clear-row:last-child{border-bottom:none}

/* stat cards: eyebrow over a heavy figure */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;
  margin:0 0 26px}
.stat-tile{display:flex;flex-direction:column;gap:4px;padding:20px 22px;border-radius:20px;
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow)}
.stat-tile .num{font-size:30px;font-weight:800;letter-spacing:-.01em;line-height:1.2;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stat-tile .lbl{font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);order:-1}

/* key / value rows: side panels, receipts, detail views */
.kv{display:flex;justify-content:space-between;gap:12px;font-size:13px}
.kv span{color:var(--muted)}
.kv b{text-align:right}
.kv-list{display:flex;flex-direction:column;gap:10px}
table.kv{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}
table.kv td{padding:9px 0;border-bottom:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere}
table.kv tr:last-child td{border-bottom:none}
table.kv td:first-child{color:var(--muted);width:38%;padding-right:12px}
table.kv td:last-child{font-weight:600}

/* ---------- list cards (data tables) ----------
   The table element stays for its semantics and for htmx, which swaps whole
   rows; the look is the design's list card: a 14px container, eyebrow
   headers, roomy rows, soft hover, no zebra. */
.table-card{overflow:hidden;border-radius:20px}
.table-scroll{overflow-x:auto}
table.data{width:100%;border-collapse:collapse;font-size:13.5px}
table.data th{font:700 11px 'Plus Jakarta Sans',sans-serif;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);text-align:left;padding:12px 20px;border-bottom:1px solid var(--line);
  white-space:nowrap}
table.data td{padding:15px 20px;border-bottom:1px solid var(--line);vertical-align:middle;
  color:var(--ink)}
table.data td:first-child{font-weight:600}
table.data td.mono,table.data td .mono{font-size:12.5px;font-family:'JetBrains Mono',monospace;
  font-weight:400}
table.data td .muted,table.data td.muted{font-weight:400}
table.data tbody tr:hover{background:var(--soft)}
table.data tbody tr:last-child td{border-bottom:none}
table.data tbody tr.is-selected{background:color-mix(in srgb,var(--brand) 6%,var(--surface))}
/* import history: one import is three stacked tiers — when/what, the
   figures under the headings, then source | mapping — with no separator
   between them; the divider falls between imports only */
.ib-table .ib-batch td{border-bottom:none!important}
.ib-table .ib-batch{border-bottom:1px solid var(--line)}
.ib-table .ib-batch:last-child{border-bottom:none}
/* twelve columns have to fit the card: tighter cells and header tracking */
.ib-table th{padding:12px 10px;letter-spacing:.04em}
.ib-table .ib-head td{padding:12px 10px 0;font-weight:400}
.ib-head-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ib-table .ib-actions{text-align:right}
.ib-table .ib-when{font-size:11.5px;color:var(--muted)}
.ib-table .ib-file{color:var(--ink);font-weight:500;overflow-wrap:anywhere}
.ib-table .ib-figures td{padding:4px 10px;white-space:nowrap}
.ib-table .ib-figures td:first-child{font-weight:400}
.ib-table .ib-foot td{padding:0 10px 12px;font-size:12px;font-weight:400;color:var(--muted)}
.ib-table .ib-sep{opacity:.45;margin:0 4px}
.ib-table tbody tr:hover{background:transparent}
.ib-table .ib-batch:hover{background:var(--soft)}
/* whole-row click target (import issues summary) — the row's own button stays
   the keyboard-reachable control */
table.data tbody tr.issue-row{cursor:pointer}
/* same, for the lead explorer's field list — the field name is a button so the
   row stays keyboard-operable, styled to read as the link it replaces */
table.data tbody tr.field-row{cursor:pointer}
/* a field the current filter uses — accent edge and tint, so the filter's
   fields are findable in the list itself, not only in the chips above it */
table.data tbody tr.field-row.is-filtered{background:var(--brand-tint)}
table.data tbody tr.field-row.is-filtered:hover{background:color-mix(in srgb,var(--brand) 18%,var(--surface))}
table.data tbody tr.field-row.is-filtered td:first-child{box-shadow:inset 3px 0 0 var(--brand)}
table.data tbody tr.field-row.is-filtered button{font-weight:700}
table.data tbody tr.field-row.is-filtered .pill{margin-left:8px;vertical-align:1px}
table.data tr.field-row button{background:none;border:none;padding:0;font:inherit;font-weight:600;
  color:var(--brand);cursor:pointer;text-align:left}
table.data tr.field-row:hover button{color:var(--brand-hover)}
/* grouped tables (data dictionary by use type): a full-width band opens each
   group, so the row block underneath reads as one section */
table.data tbody tr.group-row td{padding:0;border-bottom:1px solid var(--line);font-weight:400}
table.data tbody tr.group-row:hover{background:none}
table.data tbody + tbody tr.group-row td{border-top:1px solid var(--line)}
.group-band{display:flex;align-items:center;gap:12px;padding:12px 20px 12px 17px;
  border-left:3px solid var(--brand);background:var(--soft)}
.group-title{font:800 13.5px 'Plus Jakarta Sans',sans-serif;color:var(--ink)}
.group-scope{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);white-space:nowrap}
.group-count{margin-left:auto;font-size:12px;font-weight:600;color:var(--muted);white-space:nowrap}
/* the group with no use type set is a gap in the dictionary, not a vertical */
.group-band.group-band-none{border-left-color:var(--muted)}
/* the lead / user cell: avatar beside a name and a sub-line */
.lead-cell{display:flex;align-items:center;gap:12px;min-width:0}
.cell-main{font-weight:600;font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.cell-sub{font-size:12px;font-weight:400;color:var(--muted);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
/* empty and loading states inside a container */
.empty{padding:40px 24px;text-align:center;color:var(--muted);font-size:12.5px;line-height:1.5}
.empty-icon{width:34px;height:34px;border-radius:50%;background:var(--soft);color:var(--brand);
  display:inline-flex;align-items:center;justify-content:center;margin-bottom:10px}
.empty b{display:block;font-size:14px;font-weight:700;color:var(--ink);margin-bottom:4px}
.load-more{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:13px;
  color:var(--brand);cursor:pointer}
.load-more::after{content:'→'}

/* ---------- filterable field picker (partials/field_picker_js.html) ----------
   Wraps a <select>, which stays in the DOM as the form control. */
.fpick{position:relative}
.fpick-native{display:none}
.fpick-list{position:absolute;z-index:40;left:0;right:0;top:calc(100% + 4px);
  max-height:280px;overflow-y:auto;padding:4px;border-radius:10px;
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-menu)}
.fpick-item{padding:9px 12px;border-radius:8px;cursor:pointer;
  font:600 13px 'Plus Jakarta Sans',sans-serif;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fpick-item:hover,.fpick-item.is-active{background:var(--soft)}
.fpick-item.is-selected{color:var(--brand)}
.fpick-group{padding:8px 12px 4px;font-size:11px;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted)}
.fpick-none{padding:9px 12px;font:400 12.5px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}

/* ---------- status pills ---------- */
.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:99px;
  font:700 11.5px/1.5 'Plus Jakarta Sans',sans-serif;white-space:nowrap;
  color:var(--muted);background:var(--soft);border:none}
/* positive */
.pill-active,.pill-delivered-ok,.pill-delivered,.pill-completed,.pill-ok{
  color:color-mix(in srgb,var(--ok) var(--ink-mix),var(--ink));background:var(--ok-tint)}
/* info / in progress */
.pill-created,.pill-merged,.pill-sold,.pill-info,.pill-preferred{
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink));background:var(--brand-tint)}
/* danger */
.pill-rejected,.pill-rejected_no_phone,.pill-failed,.pill-danger{
  color:color-mix(in srgb,var(--danger) var(--ink-mix),var(--ink));background:var(--danger-tint)}
/* neutral */
.pill-expired,.pill-disabled,.pill-reverted,.pill-neutral{color:var(--muted);background:var(--soft)}
/* warning */
.pill-amber,.pill-issues,.pill-review,.pill-running,.pill-warn{
  color:color-mix(in srgb,var(--warn) var(--ink-mix),var(--ink));background:var(--warn-tint)}
/* clickable metric pills — drill-down links (imports: cleaned / issues) */
a.pill-link{cursor:pointer;text-decoration:none;transition:filter .12s ease}
a.pill-link::after{content:'›';font-size:12px;opacity:.6}
a.pill-link:hover{filter:brightness(.92)}
a.pill-link:hover::after{opacity:1}
/* file-type badge (import history) */
.ftype{display:inline-flex;align-items:center;justify-content:center;padding:3px 8px;
  border-radius:99px;flex:none;font:700 10px 'Plus Jakarta Sans',sans-serif;letter-spacing:.04em}
.ftype-csv{background:var(--brand-tint);color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink))}
.ftype-xlsx{background:var(--purple-tint);color:color-mix(in srgb,var(--c-purple) var(--ink-mix),var(--ink))}
/* DICT pill: marks data-dictionary fields; description appears on hover/focus */
.dict-pill{position:relative;display:inline-block;margin-left:6px;padding:2px 8px;
  border-radius:99px;font:700 10px 'Plus Jakarta Sans',sans-serif;letter-spacing:.06em;line-height:1.4;
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink));background:var(--brand-tint);
  border:none;cursor:help;outline:none;vertical-align:1px;user-select:none}
.dict-pill:hover,.dict-pill:focus{background:var(--brand);color:var(--brand-ink)}
.dict-pill .tip{display:none;position:absolute;bottom:calc(100% + 8px);left:-8px;z-index:60;
  width:max-content;max-width:280px;padding:10px 12px;border-radius:8px;
  background:var(--ink);color:var(--bg);box-shadow:var(--shadow-menu);
  font:400 11.5px/1.5 'Plus Jakarta Sans',sans-serif;letter-spacing:0;text-transform:none;
  white-space:normal;cursor:default}
.dict-pill:hover .tip,.dict-pill:focus .tip{display:block}
.dict-pill .tip-label{display:block;font-size:10.5px;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;color:var(--brand);margin-bottom:4px}
:root[data-next-target-theme="dark"] .dict-pill .tip{background:var(--soft);color:var(--ink)}

/* ---------- chips ----------
   Filters, multi-select options, region pickers. Selected = brand tint. */
.chip{display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:7px 15px;
  border-radius:99px;font-weight:600;font-size:12.5px;border:1px solid var(--line);
  background:var(--surface);color:var(--muted);cursor:pointer;
  transition:border-color .15s,background .15s,color .15s}
.chip .count{font-variant-numeric:tabular-nums;font-weight:700;font-size:12px}
.chip-row{display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap}
a.chip{text-decoration:none}
a.chip:hover,.chip:hover{border-color:var(--muted);color:var(--ink)}
.chip.is-selected{border-color:var(--brand);background:var(--brand-tint);
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink))}
.chip.is-selected:hover{border-color:var(--brand);
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink))}
.chip-lg{padding:8px 18px;font-size:13px;font-weight:700}
/* chips inside a chips editor / rule builder value list: smaller, tinted */
.chip.chip-sm{min-height:28px;padding:4px 10px;font-size:12px;font-weight:600;
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink));background:var(--brand-tint);
  border-color:transparent;cursor:default}
.chip-row-tight{gap:4px}
.chips-editor{display:flex;flex-wrap:wrap;gap:6px;align-items:center;min-height:44px;
  padding:6px 12px;border-radius:10px;border:1px solid var(--line);background:var(--bg)}
.chips-editor:focus-within{border-color:var(--brand);box-shadow:var(--focus)}
.chips-editor .chip-input{flex:1;min-width:140px;border:none;outline:none;background:transparent;
  color:var(--ink);font:inherit;font-size:13px;height:28px;box-shadow:none}
.chip-x{border:none;background:none;color:inherit;cursor:pointer;font-size:13px;line-height:1;
  padding:0 0 0 2px;margin-left:2px;opacity:.7}
.chip-x:hover{opacity:1}
.cond-pill{cursor:pointer;user-select:none}
.cond-pill:hover{color:var(--danger);background:var(--danger-tint);border-color:var(--danger-border)}

/* composite-field editor (mappings): a strip of chips and free-text
   separators that builds a template such as "{first_name} {last_name}" */
.composite-strip{display:flex;flex-wrap:wrap;align-items:center;gap:4px;min-height:44px;
  padding:6px 12px;border-radius:10px;border:1px solid var(--line);background:var(--bg)}
.composite-strip:focus-within{border-color:var(--brand);box-shadow:var(--focus)}
.composite-sep{border:none;outline:none;background:transparent;min-width:6px;padding:2px 1px;
  font:inherit;font-size:13px;color:var(--ink)}
.composite-sep:focus{background:var(--soft);border-radius:4px}
.composite-pill{display:inline-flex;align-items:center;gap:4px}
.composite-x{border:none;background:transparent;cursor:pointer;padding:0 0 0 2px;
  font-size:11px;line-height:1;color:inherit;opacity:.7}
.composite-x:hover{opacity:1}
.composite-insert{display:flex;gap:8px;margin-top:8px}
.composite-insert .composite-pick{flex:1}

/* ---------- tabs — the chip pattern for choose-one navigation ---------- */
.tabs{display:inline-flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}
.tab{display:inline-flex;align-items:center;min-height:36px;padding:7px 15px;border-radius:99px;
  border:1px solid var(--line);background:var(--surface);cursor:pointer;
  font:600 12.5px 'Plus Jakarta Sans',sans-serif;color:var(--muted);
  transition:border-color .15s,background .15s,color .15s}
.tab:hover{color:var(--ink);border-color:var(--muted)}
.tab.active{border-color:var(--brand);background:var(--brand-tint);
  color:color-mix(in srgb,var(--brand) var(--ink-mix),var(--ink))}
/* count beside a tab label ("Existing mappings 3") */
.tab-n{margin-left:6px;padding:1px 7px;border-radius:99px;font:700 11px 'Plus Jakarta Sans',sans-serif;
  background:var(--soft);color:var(--muted)}
.tab.active .tab-n{background:var(--surface);color:inherit}

/* ---------- numbered step cards (exports page) ---------- */
.step-card{padding:22px 24px;margin-bottom:18px}
.step-head{display:flex;align-items:flex-start;gap:12px}
.step-num{flex:none;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;background:var(--ink);color:var(--bg);font:800 13px 'Plus Jakarta Sans',sans-serif}
.step-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  font:800 15px 'Plus Jakarta Sans',sans-serif;color:var(--ink);line-height:30px}
.step-title .step-note{font:500 12px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.step-desc{font-size:12.5px;color:var(--muted);line-height:1.55;margin-top:2px}
.step-body{padding-left:42px;margin-top:16px}
@media (max-width:640px){.step-body{padding-left:0}}
.run-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:18px}
.run-note{flex:1;min-width:240px;font-size:12px;color:var(--muted);line-height:1.5}

/* ---------- progress / proportion bars ---------- */
.bar{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--soft)}
.bar span{display:block;height:100%;transition:width .25s}
.bar-sm{height:8px;border-radius:4px}
.legend{display:flex;flex-wrap:wrap;gap:12px}
.legend > span{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}
.legend i{width:8px;height:8px;border-radius:50%;display:inline-block}

/* ---------- modal dialogs ---------- */
dialog.modal{border:1px solid var(--line);border-radius:22px;padding:0;
  background:var(--surface);color:var(--ink);width:min(560px,92vw);box-shadow:var(--shadow-modal)}
dialog.modal::backdrop{background:var(--overlay)}
dialog.modal.modal-wide{width:min(720px,94vw)}
dialog.modal.modal-confirm{width:min(440px,92vw)}
.confirm-body{display:flex;gap:14px;padding:26px 28px 20px}
.confirm-icon{flex:none;width:38px;height:38px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;color:var(--warn);background:var(--warn-tint)}
.confirm-danger .confirm-icon{color:var(--danger);background:var(--danger-tint)}
.confirm-text{min-width:0}
.confirm-title{font:800 16px 'Plus Jakarta Sans',sans-serif;color:var(--ink);margin-bottom:5px}
.confirm-message{font-size:13px;color:var(--muted);line-height:1.55;white-space:pre-line}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:22px 28px 0;font:800 20px 'Plus Jakarta Sans',sans-serif;color:var(--ink)}
.modal-body{padding:18px 28px 8px;display:flex;flex-direction:column;gap:16px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:18px 28px 26px}
.modal-sub{font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin-top:6px}

/* ---------- export filter-rule builder ---------- */
.rule-card{border:1px solid var(--line);border-radius:18px;background:var(--bg);
  padding:16px 18px;margin-bottom:12px}
.rule-head{display:flex;align-items:center;justify-content:space-between;
  font:600 13px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.rule-tag{padding:4px 10px;border-radius:99px;border:none;background:var(--soft);color:var(--muted);
  font:700 11.5px 'Plus Jakarta Sans',sans-serif}
.rule-or{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin:10px 0 0 14px}
.cond-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
.cond-row > select:nth-child(1){flex:0 0 230px;width:230px}
.cond-row > select:nth-child(2){flex:0 0 160px;width:160px}
.cond-row > .icon-btn{margin-left:auto}
.cond-values{display:flex;gap:6px;align-items:center;flex-wrap:wrap;flex:1;min-width:0}
.cond-values .input{width:auto;flex:0 1 220px;max-width:240px}
.rule-head .btn-link{margin-top:0}

/* ---------- file drop zone ---------- */
.file-drop{position:relative;display:flex;flex-direction:column;align-items:center;gap:11px;
  padding:34px 18px;border:1px dashed var(--brand-border);border-radius:18px;
  background:var(--brand-tint);cursor:pointer;text-align:center;transition:border-color .15s}
.file-drop:hover,.file-drop:focus-within{border-color:var(--brand)}
.file-drop.has-file{border-style:solid;border-color:var(--brand)}
.file-drop input[type=file]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.file-drop .file-drop-icon{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;background:var(--brand);color:var(--brand-ink)}
.file-drop-text{font:500 13.5px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.file-drop-text strong{color:var(--brand);font-weight:700}
.file-drop-name{font-size:12px;color:var(--muted)}
.file-drop.has-file .file-drop-name{color:var(--brand);font-weight:600}

/* ---------- timeline (merge history / audit) ---------- */
.tl-day{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);margin:8px 0 12px}
.timeline{position:relative;margin:0 0 22px 8px;border-left:1px solid var(--line);
  padding-left:24px;display:flex;flex-direction:column;gap:2px}
.tl-item{position:relative;padding:12px 14px;border-radius:10px}
.tl-item:hover{background:var(--soft)}
.tl-icon{position:absolute;left:-40px;top:11px;width:30px;height:30px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;border:2px solid var(--surface)}
.tl-head{display:flex;align-items:baseline;gap:8px}
.tl-text{flex:1;font-size:13px;color:var(--muted);line-height:1.55}
.tl-text b{color:var(--ink);font-weight:700}
.tl-time{font-size:11.5px;font-weight:600;color:var(--muted);white-space:nowrap}
.tl-meta{font-size:12px;color:var(--muted);margin-top:2px}
.field-change{font-size:12.5px;color:var(--muted);padding:2px 0}
.field-change code{font:400 12px 'JetBrains Mono',monospace;color:var(--ink)}

/* ---------- payload viewer ---------- */
details.payload > summary{cursor:pointer;font-size:13px;color:var(--brand);font-weight:600;list-style:none}
details.payload > summary::-webkit-details-marker{display:none}
pre.payload{max-height:20rem;overflow:auto;margin:8px 0 0;border-radius:10px;background:var(--bg);
  border:1px solid var(--line);padding:14px;
  font:400 12px 'JetBrains Mono',monospace;color:var(--ink);line-height:1.7}

/* ---------- notes, toasts, misc ---------- */
.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:18px}
.note{font-size:12.5px;color:var(--muted);margin-top:10px;display:flex;
  align-items:flex-start;gap:8px;line-height:1.55}
.note svg{flex:none;margin-top:2px;color:var(--brand)}
.note-danger{color:var(--danger)}
.note-warn{color:var(--warn)}
/* a toast: inked, with a coloured leading dot for the outcome */
.toast{display:inline-flex;align-items:center;gap:10px;padding:12px 16px;border-radius:12px;
  background:var(--ink);color:var(--bg);font:600 13px 'Plus Jakarta Sans',sans-serif}
.toast::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--brand);flex:none}
.toast-ok::before{background:var(--ok)}
.toast-danger::before{background:var(--danger)}
mark{background:var(--warn-tint);color:color-mix(in srgb,var(--warn) var(--ink-mix),var(--ink));
  padding:2px 8px;border-radius:99px;font-weight:600}

/* ---------- AI field matching (mapping builder) ----------
   Sits between the column count and the table: an offer, not a step — the
   table works untouched without it. */
.ai-map{border:1px solid var(--line);border-radius:16px;background:var(--surface);
  padding:18px 20px;margin:0 0 14px}
.ai-map-head{display:flex;gap:16px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap}
.ai-map-title{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-weight:800;font-size:15px}
.ai-map-sub{margin:0;max-width:68ch;font-size:12.5px;line-height:1.6;color:var(--muted)}
.ai-map-actions{display:flex;gap:8px;flex:none}
.ai-map-actions .btn{flex:none}
.ai-map-status{margin:12px 0 0;font-size:12.5px;font-weight:600;min-height:1.2em}
.ai-map-log{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.ai-map-note{font-size:12px;line-height:1.5;color:var(--muted)}
.ai-map-note-good{color:var(--ok)}
.ai-map-note-bad{color:var(--danger)}
/* The running tally. Three outcomes, one chip each — the middle one is the
   only one that needs a person, so it is the only one that carries a colour. */
.ai-map-summary{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px}
.ai-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:99px;
  font-size:12px;font-weight:600;border:1px solid var(--line);color:var(--muted)}
.ai-chip b{font-weight:800;color:var(--ink)}
.ai-chip-mapped{border-color:var(--ok);color:var(--ok)}
.ai-chip-mapped b{color:var(--ok)}
.ai-chip-review{border-color:var(--warn);background:var(--warn-tint);color:var(--warn)}
.ai-chip-review b{color:var(--warn)}
.ai-map-note-sub{flex-basis:100%;margin:2px 0 0;font-size:12px;line-height:1.6;color:var(--muted)}
/* The suggestion and the reason for it, under the picker it filled in. */
.ai-hint{display:block;margin-top:5px;font-size:11.5px;line-height:1.45;color:var(--muted)}
.ai-hint-low,.ai-hint-review{color:var(--warn)}
/* Outcome per row. A mapped column gets a quiet accent rule; a column with no
   dictionary field is tinted across its full width, because finding those in a
   fifty-row table is the whole point of flagging them. */
tr.is-ai-mapped td:first-child{box-shadow:inset 3px 0 0 var(--brand)}
tr.is-ai-dropped td{opacity:.62}
tr.is-ai-review td{background:var(--warn-tint)}
tr.is-ai-review td:first-child{box-shadow:inset 3px 0 0 var(--warn)}
/* One flash when the summary walks you to a row — colour, not motion. */
tr.is-ai-found td{animation:ai-found 1.4s ease-out 1}
@keyframes ai-found{from{background:var(--warn);color:#fff}to{background:var(--warn-tint)}}
@media (prefers-reduced-motion:reduce){
  tr.is-ai-found td{animation:none;outline:2px solid var(--warn);outline-offset:-2px}
}
@media (max-width:640px){
  .ai-map-actions{width:100%}
  .ai-map-actions .btn{flex:1}
}
/* Mapping builder: name + Save on one row. The button aligns to the bottom of
   the field so it sits on the input's baseline, not the label's, and the field
   takes the spare width up to a readable maximum. */
.builder-save-row{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.builder-save-row .field{flex:1 1 260px;max-width:420px}
.builder-save-row .btn{flex:0 0 auto}

/* ---------- mapping rule panels ----------
   One card per decision (mapped / unmapped / do not transfer), each colour-
   coded down its left edge so the three are told apart at a glance rather than
   by reading the FieldName column. */
.rule-panel{border-left:3px solid var(--line)}
.rule-panel.is-mapped{border-left-color:var(--brand)}
.rule-panel.is-unmapped{border-left-color:var(--warn)}
.rule-panel.is-dropped{border-left-color:var(--muted)}
.rule-panel-head{padding:18px 20px 12px}
.rule-panel-head .card-title{display:flex;align-items:center;gap:8px;margin:0}
.rule-panel-n{font:700 11px 'Plus Jakarta Sans',sans-serif;padding:2px 8px;border-radius:99px;
  color:var(--muted);background:var(--soft)}
.rule-panel-blurb{margin:6px 0 0;font:400 12.5px/1.5 'Plus Jakarta Sans',sans-serif;color:var(--muted);max-width:70ch}
.rule-seen td{background:var(--warn-tint)}

/* ---------- login (standalone page) ---------- */
/* Signed out, the navy hero gradient takes the whole page and the card is the surface. */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:var(--nav);padding:24px}
.login-card{width:380px;max-width:100%;text-align:center;padding:32px;box-shadow:var(--shadow-modal)}
.login-brand{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:20px}
.login-brand .brand-name{font-weight:800;font-size:22px;letter-spacing:-.01em;color:var(--ink)}
.brand-sub{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin-top:-6px}

/* ---------- personas page — "the book" — and the dashboard ----------
   An editorial header (eyebrow, heavy title, sub, actions) beside a share
   panel, a row of stat cards, then a grid of persona cards. Each card carries
   its accent in --pa and --pa-ink is that accent pulled toward the ink for
   type. A persona's accent comes from its stored hue: .hued sets --pa to the
   same oklch(0.72 0.14 hue) the customer cards use, and a darker --pa-ink
   that clears 4.5:1 as small type on the paper. The dashboard tells the
   pipeline on the same card system with the theme's fixed accents. */
.hued{--pa:oklch(0.72 0.14 var(--hue));--pa-ink:oklch(0.5 0.14 var(--hue))}
:root[data-next-target-theme="dark"] .hued{--pa-ink:oklch(0.82 0.11 var(--hue))}
.content:has(.pb) .page-head{display:none}
.pb{display:flex;flex-direction:column}
.pb-hero{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(300px,1fr);gap:28px 40px;
  align-items:start;margin-bottom:30px}
.pb-head{display:flex;flex-direction:column;min-width:0}
.pb-eyebrow{margin:0;font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted)}
.pb-title{margin:6px 0 0;font:800 32px/1.15 'Plus Jakarta Sans',sans-serif;letter-spacing:-.01em;text-wrap:pretty}
.pb-title em{font-style:normal;color:var(--brand)}
.pb-sub{margin:12px 0 0;font:400 14px/1.5 'Plus Jakarta Sans',sans-serif;color:var(--muted);max-width:520px;
  text-wrap:pretty}
.pb-empty{display:flex;flex-direction:column;align-items:flex-start;gap:16px;padding:20px 0 40px}

/* the header's right column — a share panel over a stacked mix bar */
.pb-aside{display:flex;flex-direction:column;gap:12px;min-width:0}
.pb-aside-head{display:flex;justify-content:space-between;align-items:baseline;
  font-size:15px;font-weight:800}
.pb-aside-head .n{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted)}
.pb-panel{background:var(--surface);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);
  padding:20px 22px;display:flex;flex-direction:column;gap:14px}
.pb-bar{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--soft)}
.pb-bar span{display:block;min-width:2px}
.pb-share-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--line)}
.pb-share-row:last-child{border-bottom:none;padding-bottom:0}
.pb-share-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--pa)}
.pb-share-name{flex:1;min-width:0;font-size:13px;font-weight:700;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.pb-share-n{font-size:12px;font-weight:600;color:var(--muted)}
.pb-share-pct{width:52px;text-align:right;font-size:13px;font-weight:800}
.pb-share-row.is-rest .pb-share-dot{background:var(--line)}
.pb-share-row.is-rest .pb-share-name,.pb-share-row.is-rest .pb-share-pct{font-weight:600;color:var(--muted)}
/* The "no criteria yet" note and the outcome line a run redirects back with */
.pb-head-note{margin:0;font:400 12.5px/1.5 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.pb-runbar{margin:0;padding:10px 14px;border-radius:10px;background:var(--brand-tint);
  border:1px solid var(--brand-border);font:600 13px/1.5 'Plus Jakarta Sans',sans-serif;color:var(--ink)}

/* hero actions: the primary pill and a text link, then a trust line */
.hero-actions{display:flex;gap:14px;margin-top:22px;align-items:center;flex-wrap:wrap}
.btn-link-arrow::after{content:' →'}
.trust-line{display:flex;gap:10px;align-items:flex-start;margin-top:22px;max-width:440px;
  font-size:12.5px;color:var(--muted);text-wrap:pretty;line-height:1.5}
.trust-line::before{content:'';width:9px;height:9px;border-radius:2px;background:var(--brand);
  margin-top:4px;flex:none}

.pb-body{padding:6px 0 12px}
/* cards in a row share the row's height (the stats sit at every card's foot);
   the dashed panel takes its own */
.pb-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px}
.pb-card:not(.hued){--pa-ink:color-mix(in srgb,var(--pa) var(--ink-mix),var(--ink))}
.pb-card{background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--pa);
  border-radius:22px;box-shadow:var(--shadow);padding:20px 24px 22px;display:flex;flex-direction:column;min-width:0}
/* the bar's search hides non-matching cards; display:flex above beats [hidden] */
.pb-card[hidden],.pb-outside[hidden]{display:none}
.pb-card-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pb-num{font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--pa-ink);white-space:nowrap;
  background:color-mix(in srgb,var(--pa) 12%,var(--surface));padding:3px 9px;border-radius:99px}
.pb-kicker{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
/* the persona's icon, on its own tint, as the customer card shows it */
.pb-icon{display:grid;place-items:center;width:28px;height:28px;border-radius:9px;
  background:var(--pa);color:#fff;flex:none}
.pb-edit{margin-left:auto;background:none;border:none;padding:2px 0;cursor:pointer;
  font:600 13px 'Plus Jakarta Sans',sans-serif;color:var(--brand);text-decoration:none}
.pb-edit:hover{color:var(--brand-hover)}

/* Card actions (Run, Edit): tinted pills in the card's own accent, the same
   visual weight as each other because neither is the obvious default and Run
   on a criteria-less persona CLEARS it. */
.pb-action{display:inline-flex;align-items:center;gap:5px;min-height:32px;
  padding:5px 12px;border-radius:99px;cursor:pointer;
  border:1px solid color-mix(in srgb,var(--pa) 35%,var(--surface));
  background:color-mix(in srgb,var(--pa) 8%,var(--surface));
  color:var(--pa-ink);font:700 11.5px/1 'Plus Jakarta Sans',sans-serif;white-space:nowrap;
  transition:background .12s ease,border-color .12s ease}
.pb-action:hover{background:color-mix(in srgb,var(--pa) 16%,var(--surface))}
.pb-action:focus-visible{outline:2px solid var(--pa);outline-offset:2px}
/* A run reconciles the persona against the whole book, which takes a moment
   and ends in a page load. Until it comes back the card says so — the button
   becomes a spinner, a sliver sweeps the card's top rule, and every action on
   the page is disabled so the same run cannot be started twice. */
.pb-run-busy{display:none;align-items:center;gap:6px}
.pb-card.is-running .pb-run-idle{display:none}
.pb-card.is-running .pb-run-busy{display:inline-flex}
.pb-action .spinner{width:11px;height:11px;border-width:2px;
  border-color:color-mix(in srgb,var(--pa) 25%,transparent);border-top-color:var(--pa)}
.pb-action[disabled]{cursor:default;opacity:.45}
.pb-card.is-running .pb-run-form .pb-action[disabled]{opacity:1;cursor:progress}
.pb-card.is-running{position:relative}
.pb-card.is-running::after{content:'';position:absolute;left:0;right:0;top:-3px;height:3px;
  background:linear-gradient(90deg,transparent 20%,
    color-mix(in srgb,var(--pa) 45%,var(--surface)) 50%,transparent 80%);
  background-size:220% 100%;animation:pb-sweep 1.3s linear infinite}
@keyframes pb-sweep{from{background-position:120% 0}to{background-position:-120% 0}}
@media (prefers-reduced-motion:reduce){
  .pb-card.is-running::after{animation:none;background:var(--pa);opacity:.55}
}
/* Whichever action comes first is pushed to the right of the card head; the
   rest follow it. Without the reset the pair would split to opposite ends. */
.pb-card-top > .pb-action{margin-left:auto}
.pb-run-form{margin-left:auto;display:flex}
.pb-run-form ~ .pb-action{margin-left:0}
.pb-name{margin:14px 0 0;font:800 21px/1.2 'Plus Jakarta Sans',sans-serif;letter-spacing:-.01em}
.pb-quote{margin:6px 0 0;font:italic 400 13.5px/1.4 'Plus Jakarta Sans',sans-serif;color:var(--pa-ink);text-wrap:pretty}
/* the kicker — the label above the name, in the persona's own accent */
.pb-label-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:14px 0 -10px}
.pb-label{margin:0;font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--pa-ink)}
.pb-card .pcard-uses{margin:12px 0 0}
/* the persona's sales categories, under the copy */
.pb-cats{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:12px 0 0}
.pb-cats > span:first-child{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin-right:2px}
.pb-cats-none{font-size:12px;color:var(--muted)}
.pb-blurb{margin:10px 0 0;font:400 13px/1.55 'Plus Jakarta Sans',sans-serif;color:var(--muted);text-wrap:pretty}
.pb-stats{display:grid;grid-template-columns:1fr 1fr;gap:14px 10px;margin-top:auto;
  border-top:1px solid var(--line);padding-top:16px}
.pb-stat{display:flex;flex-direction:column;gap:3px}
.pb-stat-val{font:800 22px/1.1 'Plus Jakarta Sans',sans-serif;letter-spacing:-.01em;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pb-stat-val.pb-accent{color:var(--pa-ink)}
.pb-stat-lbl{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.pb-where{display:flex;flex-direction:column;gap:9px;margin-top:18px}
.pb-where-head{margin:0 0 1px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted)}
/* 30px is the design's column, sized for a state code; auto lets the pipeline's
   word labels ("Rejected", "Cleaned") past it without running into the bar. */
.pb-state{display:grid;grid-template-columns:minmax(30px,auto) 1fr auto;align-items:center;
  gap:10px;font:700 12px 'Plus Jakarta Sans',sans-serif}
.pb-track{display:block;height:6px;border-radius:3px;background:var(--soft);overflow:hidden}
.pb-fill{display:block;height:100%;border-radius:3px;background:var(--pa)}
.pb-state-pct{text-align:right;font-size:12px;font-weight:600;color:var(--muted)}

/* the leads that land outside the cards — last cell of the grid */
.pb-outside{align-self:start;display:flex;flex-direction:column;justify-content:center;
  min-height:200px;background:var(--surface);border:1px dashed var(--brand-border);
  border-radius:22px;padding:22px 24px}
.pb-outside-head{margin:0;font:800 15px/1.35 'Plus Jakarta Sans',sans-serif;color:var(--brand)}
.pb-outside-sub{margin:8px 0 0;font:400 13px/1.55 'Plus Jakarta Sans',sans-serif;color:var(--muted);text-wrap:pretty}
.pb-outside-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}

/* dashboard-only pieces: bar rows whose label is a source, client or persona
   name, and the activity feed in the closing panel */
.db-rows{display:flex;flex-direction:column;gap:11px;margin-top:16px}
.db-row{display:flex;flex-direction:column;gap:6px}
.db-row-top{display:grid;grid-template-columns:1fr auto auto;align-items:baseline;gap:10px;
  font:600 12.5px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.db-row-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.db-row-n{font:800 12.5px 'Plus Jakarta Sans',sans-serif;color:var(--ink)}
.db-row-pct{min-width:46px;text-align:right;font-size:11.5px;font-weight:600;color:var(--muted)}
.db-note{margin:2px 0 0;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted)}
.db-empty{margin:14px 0 0;padding:14px;border:1px dashed var(--line);border-radius:10px;
  font:400 12.5px/1.55 'Plus Jakarta Sans',sans-serif;color:var(--muted);text-wrap:pretty}
.db-danger{color:var(--danger)}
.db-warn{color:var(--warn)}
.db-fill-danger{background:var(--danger)}
.db-fill-warn{background:var(--warn)}
/* persona mix, sized by share — pinned to the foot of the personas card */
.db-gradient{display:block;height:6px;border-radius:3px;margin-top:16px}
.db-acts{display:flex;flex-direction:column;gap:9px;margin-top:14px}
.db-arow{display:grid;grid-template-columns:52px 1fr auto;align-items:center;gap:10px;
  font:500 12.5px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.db-arow-date{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.db-arow-src{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}
.db-pill{display:inline-flex;align-items:center;gap:5px;font:700 11px 'Plus Jakarta Sans',sans-serif;
  color:color-mix(in srgb,var(--oc) var(--ink-mix),var(--ink));
  background:color-mix(in srgb,var(--oc) 12%,var(--surface));border-radius:99px;padding:4px 10px;
  white-space:nowrap}
.db-pill-dot{width:5px;height:5px;border-radius:50%;background:var(--oc)}

@media (max-width:900px){
  .pb-hero{grid-template-columns:1fr}
  .pb-grid{grid-template-columns:1fr}
}

/* the persona edit dialog — persona accent via --pa */
dialog.pf-modal{width:940px;max-width:94vw;background:var(--surface);border:1px solid var(--line);
  border-radius:22px;padding:26px 28px;color:var(--ink);box-shadow:var(--shadow-modal)}
dialog.pf-modal::backdrop{background:var(--overlay)}
.pf-modal-form{display:flex;flex-direction:column;gap:16px}
.pf-modal-kicker{margin:0;font-size:11.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--pa-ink)}
.pf-modal-title{margin:0;font:800 20px/1.2 'Plus Jakarta Sans',sans-serif}
.pf-field{display:flex;flex-direction:column;gap:8px;font-size:11.5px;font-weight:800;
  letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.pf-field input,.pf-field textarea{background:var(--bg);border:1px solid var(--line);
  border-radius:10px;padding:12px 15px;color:var(--ink);
  font:400 14px/1.5 'Plus Jakarta Sans',sans-serif;letter-spacing:0;text-transform:none;outline:none}
.pf-field input:focus,.pf-field textarea:focus{border-color:var(--brand);box-shadow:var(--focus)}
.pf-field input.pf-input-quote{font-weight:600}
.pf-field textarea{resize:vertical;min-height:66px}
/* a hint under a field is plain sentence copy, not another uppercase label */
.pf-field .field-hint{margin-top:0;font-weight:400;letter-spacing:0;text-transform:none}
/* AI drafting block — sits above the copy fields it fills in, tinted with the
   persona's own accent so it reads as part of the card being edited */
/* the form's two columns: the operator's fields, and the read-only panel of
   what the model produced, on the persona's tint */
.pf-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,330px);gap:24px;align-items:start}
.pf-col{display:flex;flex-direction:column;gap:16px;min-width:0}
.pf-aside{display:flex;flex-direction:column;gap:12px;padding:16px;border-radius:14px;min-width:0;
  background:color-mix(in srgb,var(--pa) 7%,var(--surface));
  border:1px solid color-mix(in srgb,var(--pa) 25%,var(--surface))}
.pf-aside-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.pf-aside-head .btn{gap:5px}
.pf-aside-empty{margin:0;font-size:12.5px;line-height:1.5;color:var(--muted);text-wrap:pretty}
.pf-ai-result{display:flex;flex-direction:column;gap:12px}
.pf-ai-kv > span{display:block;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted)}
.pf-ai-kv > p{margin:4px 0 0;font:400 13px/1.5 'Plus Jakarta Sans',sans-serif;color:var(--ink);
  letter-spacing:0;text-transform:none;text-wrap:pretty;word-break:break-word}
.pf-ai-kv .pf-ai-chips{margin-top:6px}
.pf-modal-head{display:flex;flex-direction:column;gap:6px}
@media (max-width:760px){.pf-cols{grid-template-columns:1fr}}
/* the brief dialog: it stacks over the persona modal; the status line keeps
   the operator company while the model works */
.pf-ai-modal .modal-body{gap:14px}
.pf-ai-progress{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink);
  padding:12px 14px;border-radius:10px;background:var(--surface2)}
.pf-ai-progress .spinner{width:14px;height:14px;border-width:2px;flex:none}
.pf-ai-match{margin:0;font:600 13px 'Plus Jakarta Sans',sans-serif;color:var(--ink);letter-spacing:0;text-transform:none}
.pf-ai-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pf-ai-chip{padding:4px 10px;border-radius:99px;font:600 12px 'Plus Jakarta Sans',sans-serif;letter-spacing:0;
  text-transform:none;color:var(--ink);background:color-mix(in srgb,var(--pa) 16%,var(--surface))}
.pf-ai-and,.pf-ai-or{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted)}
.pf-ai-or{flex-basis:100%}
.pf-ai-sql summary{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);cursor:pointer}
.pf-ai-sql pre{margin:8px 0 0;padding:12px;border-radius:10px;overflow-x:auto;background:var(--bg);
  font:400 12px/1.6 'JetBrains Mono',monospace;color:var(--ink);white-space:pre-wrap;
  word-break:break-word;letter-spacing:0;text-transform:none}
.pf-swatch-field{border:none;margin:0;padding:0;min-width:0}
.pf-swatch-field legend{padding:0;margin-bottom:8px}
.pf-swatches{display:flex;flex-wrap:wrap;gap:9px}
.pf-swatch{position:relative;cursor:pointer}
.pf-swatch input{position:absolute;inset:0;opacity:0;cursor:pointer}
.pf-swatch span{display:block;width:26px;height:26px;border-radius:50%;background:var(--sw);
  border:2px solid transparent;box-shadow:inset 0 0 0 2px var(--surface);transition:transform .15s}
.pf-swatch:hover span{transform:scale(1.15)}
.pf-swatch input:checked+span{border-color:var(--ink);transform:scale(1.1)}
.pf-swatch input:focus-visible+span{border-color:var(--brand)}
/* the category picker: chosen categories as pills in the persona's accent
   above a type-to-filter input (the field picker's list styles) */
.pf-catpick{display:flex;flex-direction:column;gap:10px}
.pf-cat-chosen{display:flex;flex-wrap:wrap;gap:6px}
.pf-pill{text-transform:none;letter-spacing:0;font-weight:600;cursor:default;min-height:32px;
  padding:5px 6px 5px 12px;border-color:var(--pa);color:var(--pa-ink);
  background:color-mix(in srgb,var(--pa) 14%,var(--surface))}
.pf-pill .chip-x{margin-left:2px;width:24px;height:24px;border-radius:50%;display:grid;place-items:center}
.pf-pill .chip-x:hover,.pf-pill .chip-x:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}
.pf-catpick .fpick-input{text-transform:none;letter-spacing:0;font-weight:500}
.pf-catpick .fpick-none,.pf-catpick .fpick-item{text-transform:none;letter-spacing:0}
/* the icon picker: the same radio pattern, a tile per icon that takes the
   persona's accent when chosen */
.pf-icon span{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;
  background:var(--surface2);color:var(--ink);box-shadow:none}
.pf-icon input:checked+span{background:var(--pa);color:#fff;border-color:var(--ink)}
.pf-modal-foot{display:flex;align-items:center;gap:10px;margin-top:8px;flex-wrap:wrap}
.pf-foot-gap{flex:1}

/* htmx request indicator. htmx's built-in rule only fades opacity, which
   leaves the element taking up space while hidden. */
.htmx-indicator{display:none}
.htmx-request.htmx-indicator,.htmx-request .htmx-indicator{display:block}

/* A button that is working: it swaps its icon for a spinner and its label for
   the present participle, so the state is visible in the control the user just
   pressed rather than somewhere else on the page. htmx adds .htmx-request for
   the life of the request; hx-disabled-elt stops a second click landing. */
.btn .btn-idle{display:inline-flex;align-items:center;gap:7px}
.btn .btn-busy{display:none;align-items:center;gap:7px}
/* .is-running is the same state for a plain form POST, which has no htmx
   request to hang it on (the personas page's "Run all"). */
.btn.htmx-request .btn-idle,.btn.is-running .btn-idle{display:none}
.btn.htmx-request .btn-busy,.btn.is-running .btn-busy{display:inline-flex}
.btn[disabled]{cursor:progress;opacity:.75}
.spinner{width:13px;height:13px;flex:none;border-radius:50%;
  border:2px solid var(--line);border-top-color:var(--brand);
  animation:spin .6s linear infinite}
.btn-primary .spinner{border-color:rgba(255,255,255,.35);border-top-color:var(--brand-ink)}
@keyframes spin{to{transform:rotate(360deg)}}
/* Reduced motion still needs the state to READ as busy, so the ring stays and
   only the rotation goes. */
@media (prefers-reduced-motion:reduce){
  .spinner{animation:none;border-top-color:var(--brand);opacity:.8}
  .btn{transition:none}
}

/* ---------- field explorer skeleton ---------- */
/* A filter change recounts every lead, which takes a moment on a big book.
   While the request is in flight the skeleton REPLACES the explorer — the
   stale counts are hidden rather than left dimmed, so they can't be read as
   the new ones. `is-static` is the same skeleton used as placeholder content
   (first tab open), visible until htmx swaps it away. */
.explorer-skeleton{display:none}
.explorer-skeleton.htmx-request,.explorer-skeleton.is-static{display:block}
.explorer-skeleton.htmx-request~*{display:none}
.skel-note{display:flex;align-items:center;gap:9px;margin:2px 0 16px;
  font:600 13px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.skel-card{border:1px solid var(--line);border-radius:16px;background:var(--surface);
  padding:20px 18px;display:flex;flex-direction:column;gap:15px}
.skel-line{height:12px;border-radius:6px;background:linear-gradient(90deg,
  var(--soft) 25%,var(--line) 37%,var(--soft) 63%);
  background-size:400% 100%;background-position:100% 0;
  animation:skel-shimmer 1.4s ease infinite}
.skel-bar{height:28px;border-radius:6px;max-width:420px;margin-bottom:18px}
/* a field row whose values are loading (the row is its own hx-indicator) */
table.data tr.htmx-request{cursor:progress}
table.data tr.htmx-request td{opacity:.55}
/* Counting one field's distinct values takes a moment, so the values panel is
   replaced by a skeleton for as long as a field row's request is in flight.
   The row is the request's indicator; :has() carries that state across the
   grid to the panel, which keeps it CSS-only and needs no second indicator. */
.values-skeleton{display:none}
.grid-2:has(tr.field-row.htmx-request) .values-skeleton{display:block}
.grid-2:has(tr.field-row.htmx-request) #field-values{display:none}
@keyframes skel-shimmer{to{background-position:0 0}}
@media (prefers-reduced-motion:reduce){.skel-line{animation:none}}

/* Creating a persona from the field explorer waits on a third-party model,
   so the indicator narrates the stages: the step lines are stacked in one
   grid cell and fade through on a CSS loop — no JS, and the loop simply
   stops when the response swaps in. */
.persona-progress{align-items:center;gap:10px;margin:0 0 18px;padding:12px 16px;
  border:1px dashed var(--line);border-radius:10px;
  font:600 12.5px 'Plus Jakarta Sans',sans-serif;color:var(--muted)}
.persona-progress.htmx-request{display:flex}
.pp-steps{display:grid}
.pp-steps>span{grid-area:1/1;opacity:0;animation:pp-cycle 12s linear infinite}
.pp-steps>span:nth-child(2){animation-delay:3s}
.pp-steps>span:nth-child(3){animation-delay:6s}
.pp-steps>span:nth-child(4){animation-delay:9s}
@keyframes pp-cycle{0%{opacity:0}4%{opacity:1}24%{opacity:1}29%{opacity:0}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){
  .pp-steps>span{animation:none}
  .pp-steps>span:first-child{opacity:1}
}

/* ---------- 3rd party data: a dataset's details beside its figures ---------- */
.tp-list{display:grid;gap:18px}
.tp-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(280px,1fr);gap:28px;padding:24px 26px}
.tp-name{margin:6px 0 8px;font-size:22px;font-weight:800;letter-spacing:-.02em}
.tp-desc{margin:0;font-size:13.5px;line-height:1.55;color:var(--muted);max-width:60ch;text-wrap:pretty}
.tp-meta{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:14px;font-size:12.5px;color:var(--muted)}
.tp-meta code{font-size:12px;color:var(--ink)}
.tp-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:18px}
.tp-synced{font-size:12.5px;color:var(--muted)}
.tp-note{margin-top:12px}
/* the dataset's join to leads: the two fields, then the clause as written */
.tp-join{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.tp-join-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin:8px 0 0;font-size:13px}
.tp-join-line code{font-size:12px;padding:2px 7px;border-radius:6px;background:var(--surface2);color:var(--ink)}
.tp-join-arrow{color:var(--muted)}
.tp-join-scope{font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.tp-join-sql{display:block;margin-top:8px;padding:8px 10px;border-radius:8px;background:var(--surface2);
  font-size:12px;color:var(--ink);white-space:pre-wrap;word-break:break-word;font-variant-ligatures:none}
.tp-join-note{margin:8px 0 0;font-size:12.5px;line-height:1.5;color:var(--muted);text-wrap:pretty}
.tp-stats{background:var(--surface2);border-radius:16px;padding:18px 20px}
.tp-stats .kv-list{margin-top:12px;gap:9px}
.tp-stats .kv b{font-variant-numeric:tabular-nums}
@media (max-width:900px){.tp-row{grid-template-columns:1fr}}

/* ---------- the Next Target product: dashboard, personas, Get Leads ---------- */
/* the design's page opening: a green kicker with an icon, a 44px title, a lede */
.gl-kicker{display:flex;align-items:center;gap:8px;color:var(--brand);font-weight:700;font-size:13px;
  letter-spacing:.06em;text-transform:uppercase}
.gl-h1{font-size:44px;line-height:1.05;letter-spacing:-.03em;margin:12px 0 14px;font-weight:800;text-wrap:pretty}
.gl-lede{margin:0 0 36px;font-size:17px;line-height:1.55;color:var(--muted);max-width:620px;text-wrap:pretty}
.gl-head{display:flex;justify-content:space-between;align-items:flex-end;gap:32px;flex-wrap:wrap}
.gl-intro{max-width:620px}
.gl-intro .gl-lede{margin-bottom:0}
/* a catalogue with nothing in it yet */
.gl-empty{margin-top:40px;color:var(--muted)}
.gl-empty p{margin:0}

/* drifting dots in a persona's hue (partials/crowd_js.html fills them) */
.crowd{position:absolute;inset:0;display:block;overflow:hidden;pointer-events:none}
.crowd i{position:absolute;display:block;border-radius:50%;animation:bob 3s ease-in-out infinite}

/* persona portrait cards */
.pcards{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:40px}
.pcard{--pc:oklch(0.72 0.14 var(--hue));--pc-tint:oklch(0.72 0.14 var(--hue) / .14);--pc-glow:oklch(0.72 0.14 var(--hue) / .45);
  position:relative;display:flex;flex-direction:column;text-align:left;padding:0;margin:0;min-width:0;
  background:var(--surface);border-radius:22px;border:2px solid transparent;box-shadow:var(--shadow);overflow:hidden;
  color:var(--ink);font:inherit;
  transition:transform .35s cubic-bezier(.2,.8,.2,1),border-color .3s,box-shadow .3s}
.pcard:hover{transform:translateY(-6px)}
.pcard-select{cursor:pointer}
.pcard-select.on{border-color:var(--pc);transform:translateY(-4px)}
.pcard-art{display:block;height:170px;position:relative;background:var(--pc-tint);overflow:hidden;flex:none}
.pcard-icon{position:absolute;left:18px;bottom:16px;width:54px;height:54px;border-radius:18px;background:var(--pc);
  color:#fff;display:grid;place-items:center;box-shadow:0 8px 20px var(--pc-glow)}
.pcard-check{position:absolute;right:14px;top:14px;width:28px;height:28px;border-radius:50%;background:transparent;
  border:2px solid rgba(128,128,128,.35);color:#fff;display:grid;place-items:center;transition:all .3s}
.pcard-select.on .pcard-check{background:var(--pc);border-color:var(--pc)}
.pcard-body{display:flex;flex-direction:column;padding:18px 20px 20px;flex:1}
.pcard-kicker{font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--pc)}
.pcard-name{font-size:22px;font-weight:800;letter-spacing:-.02em;margin:4px 0 8px;line-height:1.2}
.pcard-desc{margin:0;font-size:13.5px;line-height:1.5;color:var(--muted);min-height:60px}
.pcard-uses{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 6px}
.pcard-uses span{font-size:11.5px;font-weight:600;padding:4px 9px;border-radius:999px;background:var(--surface2);color:var(--ink)}
.pcard-cta{margin-top:auto;align-self:flex-start;margin-top:16px}
.pcard-art-kicker{display:none;position:absolute;left:16px;bottom:14px;font-size:11px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:var(--pc)}
.pcard-side{display:none}

/* Portraits or tickets. The toggle sits at the end of the page opening; in
   ticket mode each card becomes a row — art, copy, then the check or the
   button — by letting the body's children join the card's own grid. */
.gl-style{display:flex;gap:6px;background:var(--surface);border:1px solid var(--line);padding:5px;
  border-radius:12px;flex:none}
.gl-style button{padding:7px 12px;border-radius:8px;border:none;background:transparent;color:var(--muted);
  font:600 12.5px 'Plus Jakarta Sans',sans-serif;cursor:pointer;min-height:36px;transition:all .25s}
.gl-style button:hover{color:var(--ink)}
.gl-style button.on{background:var(--nav);color:#fff}
.pcards[data-style="ticket"]{grid-template-columns:1fr;gap:14px}
.pcards[data-style="ticket"] .pcard{display:grid;grid-template-columns:200px 1fr auto;
  grid-template-areas:"art name side" "art desc side" "art uses side";grid-template-rows:auto auto 1fr;
  align-items:center;border-radius:20px}
.pcards[data-style="ticket"] .pcard:hover{transform:translateX(6px)}
.pcards[data-style="ticket"] .pcard-select.on{transform:translateX(6px)}
.pcards[data-style="ticket"] .pcard-art{grid-area:art;height:100%;min-height:132px;
  border-right:2px dashed var(--line)}
.pcards[data-style="ticket"] .pcard-icon{left:16px;top:16px;bottom:auto;width:44px;height:44px;
  border-radius:14px;box-shadow:none}
.pcards[data-style="ticket"] .pcard-check,.pcards[data-style="ticket"] .pcard-kicker{display:none}
.pcards[data-style="ticket"] .pcard-art-kicker{display:block}
.pcards[data-style="ticket"] .pcard-body{display:contents}
.pcards[data-style="ticket"] .pcard-name{grid-area:name;margin:0;padding:20px 26px 0;align-self:end}
.pcards[data-style="ticket"] .pcard-desc{grid-area:desc;padding:6px 26px 0;min-height:0;max-width:560px;font-size:14px}
.pcards[data-style="ticket"] .pcard-uses{grid-area:uses;margin:0;padding:10px 26px 20px;align-self:start}
.pcards[data-style="ticket"] .pcard-cta{grid-area:side;margin:0 26px;align-self:center}
.pcards[data-style="ticket"] .pcard-side{grid-area:side;display:flex;flex-direction:column;align-items:center;
  gap:8px;padding:0 26px}
.pcard-side-check{width:44px;height:44px;border-radius:50%;border:2px solid rgba(128,128,128,.35);
  background:transparent;color:#fff;display:grid;place-items:center;transition:all .3s}
.pcard-select.on .pcard-side-check{background:var(--pc);border-color:var(--pc)}
.pcard-side-text{font-size:11.5px;font-weight:600;color:var(--muted)}
.pcard-side-in{display:none}
.pcard-select.on .pcard-side-add{display:none}
.pcard-select.on .pcard-side-in{display:inline}

/* the Get Leads flow */
.gl-panel{animation:rise .5s cubic-bezier(.2,.8,.2,1) both}
.gl-card{padding:24px 26px}
.gl-card-title{font-weight:700;font-size:14px;margin-bottom:14px}
.gl-card-title small{font-weight:500;color:var(--muted);font-size:12.5px}
.gl-card-title-icon{display:flex;align-items:center;gap:8px;margin:0}
.gl-card-title-icon svg{color:var(--brand)}
.gl-card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.gl-card-head .gl-card-title{margin:0}
.gl-hint{font-size:12.5px;color:var(--muted)}
.gl-stack{display:grid;gap:20px;min-width:0}
.gl-two{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));gap:24px;align-items:start}
.gl-two-wide{grid-template-columns:repeat(auto-fit,minmax(min(100%,400px),1fr))}
.gl-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.gl-sticky{position:sticky;top:calc(var(--header-h) + 24px)}

/* step pills in the header */
.gl-steps{display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
.gl-step{display:flex;align-items:center;gap:6px;padding:5px 9px;border-radius:999px;border:none;cursor:pointer;
  font:600 12px 'Plus Jakarta Sans',sans-serif;white-space:nowrap;background:transparent;color:var(--nav-ink);
  opacity:.45;transition:all .3s;min-height:30px}
.gl-step:disabled{cursor:default}
.gl-step.is-done{opacity:.85}
.gl-step.is-current{opacity:1;background:rgba(255,255,255,.12)}
.gl-step-n{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:11px;
  background:rgba(255,255,255,.18);color:#fff}
.gl-step.is-done .gl-step-n,.gl-step.is-current .gl-step-n{background:var(--brand)}
.gl-step-gap{width:8px;height:1px;background:rgba(255,255,255,.2)}

/* 1 · the blend */
.gl-blend{margin-top:32px;padding:26px 28px;animation:rise .5s cubic-bezier(.2,.8,.2,1) both}
.gl-blend-head{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}
.gl-blend-title{font-size:18px;font-weight:800;letter-spacing:-.01em}
.gl-blend-sub{font-size:13.5px;color:var(--muted);margin-top:3px}
.bar{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--surface2)}
.bar span{display:block;height:100%;transition:width .4s cubic-bezier(.2,.8,.2,1)}
.gl-bar-mix{height:14px;border-radius:7px;margin:20px 0 22px}
.gl-sliders{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px 32px}
.gl-slider-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.gl-slider-name{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px}
.gl-slider-name i{width:10px;height:10px;border-radius:50%;display:inline-block}
.gl-slider-head b{font-weight:800;font-size:15px}
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;
  background:var(--surface2);outline:none;margin:0;cursor:pointer}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;
  background:var(--surface);border:3px solid var(--brand);box-shadow:0 2px 8px rgba(0,0,0,.2)}
input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--surface);
  border:3px solid var(--brand)}
input[type=range]:focus-visible{outline:2px solid var(--brand);outline-offset:6px}

/* 2 · location */
.gl-countries{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.gl-country{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:16px;border:2px solid var(--line);
  background:transparent;color:var(--ink);cursor:pointer;text-align:left;font:inherit;transition:all .25s}
.gl-country:hover{transform:translateY(-2px)}
.gl-country.on{border-color:var(--brand);background:var(--brand-soft)}
.gl-flag{width:44px;height:44px;border-radius:50%;background:oklch(0.55 0.12 var(--hue));color:#fff;
  display:grid;place-items:center;font-weight:800;font-size:13px;flex:none}
.gl-country b{display:block;font-weight:800;font-size:16px}
.gl-country small{display:block;font-size:12.5px;color:var(--muted)}
.gl-country-check{margin-left:auto;color:var(--brand);opacity:0;transition:opacity .25s}
.gl-country.on .gl-country-check{opacity:1}
.gl-regions{display:flex;flex-wrap:wrap;gap:10px}
.gl-region{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:999px;border:2px solid var(--line);
  background:transparent;color:var(--ink);font:600 13.5px 'Plus Jakarta Sans',sans-serif;cursor:pointer;
  transition:all .25s;min-height:44px}
.gl-region:hover{transform:translateY(-2px)}
.gl-region svg{opacity:0;margin-right:-2px;transition:opacity .25s}
.gl-region.on{border-color:var(--brand);background:var(--brand);color:#fff}
.gl-region.on svg{opacity:1}
.gl-region small{font-size:11px;opacity:.7;font-weight:600}
.gl-tiers{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}
.gl-tier{padding:9px 16px;border-radius:12px;border:2px solid var(--line);background:transparent;color:var(--ink);
  font:700 13.5px 'Plus Jakarta Sans',sans-serif;cursor:pointer;transition:all .2s;min-height:44px}
.gl-tier.on{border-color:var(--brand);background:var(--brand);color:#fff}
.gl-size-row{display:flex;align-items:center;gap:20px}
.gl-size-out{min-width:120px;text-align:right;font-size:30px;font-weight:800;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums}
.gl-audience{position:sticky;top:calc(var(--header-h) + 24px);background:var(--nav);color:#fff;border-radius:22px;
  padding:26px;overflow:hidden}
.gl-audience .crowd{opacity:.5}
.gl-audience-body{position:relative}
.gl-audience-kicker{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.6}
.gl-audience-n{font-size:48px;font-weight:800;letter-spacing:-.03em;margin:8px 0 2px;font-variant-numeric:tabular-nums}
.gl-audience-line{font-size:14px;opacity:.75}
.gl-audience-bar{height:10px;border-radius:5px;margin:20px 0 10px;background:rgba(255,255,255,.15)}
.gl-audience-rows{display:grid;gap:8px}
.gl-audience-rows > div{display:flex;justify-content:space-between;font-size:13.5px}
.gl-audience-rows span{display:flex;align-items:center;gap:8px}
.gl-audience-rows i{width:9px;height:9px;border-radius:50%;display:inline-block}
.gl-audience-rows b{font-weight:700;font-variant-numeric:tabular-nums}

/* 3 · channels */
.gl-channels{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.gl-channel{position:relative;display:flex;flex-direction:column;align-items:flex-start;text-align:left;
  background:var(--surface);border:2px solid transparent;border-radius:24px;padding:28px 26px;cursor:pointer;
  box-shadow:var(--shadow);color:var(--ink);font:inherit;transition:all .3s cubic-bezier(.2,.8,.2,1)}
.gl-channel:hover{transform:translateY(-6px)}
.gl-channel.on{border-color:var(--brand);transform:translateY(-4px)}
.gl-channel-check{position:absolute;right:18px;top:18px;width:28px;height:28px;border-radius:50%;background:transparent;
  border:2px solid rgba(128,128,128,.35);color:#fff;display:grid;place-items:center;transition:all .3s}
.gl-channel.on .gl-channel-check{background:var(--brand);border-color:var(--brand)}
.gl-channel-icon{width:64px;height:64px;border-radius:20px;background:var(--brand-soft);color:var(--brand);
  display:grid;place-items:center;transition:all .3s}
.gl-channel.on .gl-channel-icon{background:var(--brand);color:#fff}
.gl-channel-name{font-size:24px;font-weight:800;letter-spacing:-.02em;margin:20px 0 6px}
.gl-channel-desc{margin:0 0 18px;font-size:14px;line-height:1.5;color:var(--muted);min-height:42px}
.gl-channel-price{display:flex;align-items:baseline;gap:6px;font-size:30px;font-weight:800;letter-spacing:-.02em}
.gl-channel-price small{font-size:13px;font-weight:400;color:var(--muted)}
.gl-channel-fields{margin-top:14px;font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px}
.gl-bundle{margin-top:22px;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;
  background:var(--surface);border:2px solid var(--line);border-radius:20px;padding:20px 26px;transition:all .35s}
.gl-bundle.on{background:var(--brand-soft);border-color:var(--brand)}
.gl-bundle-text{display:flex;align-items:center;gap:14px}
.gl-bundle-text > svg{color:var(--brand)}
.gl-bundle-title{font-weight:800;font-size:16px}
.gl-bundle-sub{font-size:13.5px;color:var(--muted)}

/* 4 · review */
.gl-review-personas{display:flex;gap:14px;flex-wrap:wrap}
.gl-review-persona{display:flex;align-items:center;gap:12px;padding:12px 16px 12px 12px;border-radius:16px;
  background:var(--surface2)}
.gl-review-persona-icon{width:40px;height:40px;border-radius:12px;color:#fff;display:grid;place-items:center;flex:none}
.gl-review-persona b{display:block;font-weight:800;font-size:14.5px}
.gl-review-persona small{display:block;font-size:12.5px;color:var(--muted)}
.gl-review-big{font-size:24px;font-weight:800;letter-spacing:-.02em}
.gl-review-channels{display:flex;gap:8px;flex-wrap:wrap}
.gl-review-channel{display:flex;align-items:center;gap:6px;padding:8px 12px;border-radius:999px;background:var(--brand-soft);
  color:var(--brand);font-weight:700;font-size:13px}
.gl-columns{display:flex;flex-wrap:wrap;gap:6px}
.gl-columns code{font:400 12px 'JetBrains Mono',monospace;padding:5px 9px;border-radius:7px;background:var(--surface2)}
.gl-summary-title{font-weight:800;font-size:18px;letter-spacing:-.01em}
.gl-summary-rows{margin:20px 0;font-size:14px;gap:12px}
.gl-total{border-top:1px solid var(--line);padding-top:18px;display:flex;justify-content:space-between;align-items:baseline}
.gl-total span{font-weight:700}
.gl-total b{font-size:32px;font-weight:800;letter-spacing:-.02em}
.gl-total-tight{border-top:none;padding-top:0;margin-top:12px}
.gl-total-tight b{font-size:28px}
.gl-total-note{margin-top:4px;text-align:right;font-size:12px}
.gl-cta{min-height:52px;font-size:15px;font-weight:800;margin-top:22px}
.gl-trust{margin-top:14px;font-size:12px;color:var(--muted);line-height:1.5;display:flex;gap:8px}
.gl-trust svg{color:var(--brand);flex:none;margin-top:2px}

/* 5 · payment */
.gl-pay{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:24px;align-items:start}
.gl-pay-form{padding:28px;min-width:0}
.gl-pay-form .gl-card-title{display:block;margin-bottom:12px}
.gl-input{width:100%;padding:14px 16px;border-radius:12px;border:1.5px solid var(--line);background:var(--bg);
  color:var(--ink);font-size:15px;outline:none;transition:border-color .2s}
.gl-input:focus{border-color:var(--brand)}
.gl-input::placeholder{color:var(--muted);opacity:.7}
.gl-check{display:flex;align-items:center;gap:10px;margin:14px 0 28px;font-size:13.5px;color:var(--muted);cursor:pointer}
.gl-check input{position:absolute;width:1px;height:1px;opacity:0;margin:0}
.gl-check-box{width:20px;height:20px;border-radius:6px;border:2px solid var(--line);background:transparent;color:#fff;
  display:grid;place-items:center;flex:none;transition:all .2s}
.gl-check input:checked + .gl-check-box{border-color:var(--brand);background:var(--brand)}
.gl-check input:focus-visible + .gl-check-box{outline:2px solid var(--brand);outline-offset:2px}
.gl-schemes{display:flex;gap:6px}
.gl-schemes span{padding:3px 8px;border-radius:5px;background:var(--surface2);font-size:10.5px;font-weight:800;letter-spacing:.05em}
.gl-pay-fields{display:grid;gap:12px}
.gl-input-icon{position:relative}
.gl-input-icon .gl-input{padding-left:48px;letter-spacing:.06em;font-variant-numeric:tabular-nums}
.gl-input-icon svg{position:absolute;left:16px;top:14px;color:var(--muted)}
.gl-pay-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);gap:12px}
.gl-pay-grid .gl-input{min-width:0}
.gl-pay-error{margin-top:14px;padding:12px 14px;border-radius:12px;background:var(--danger-tint);color:var(--danger);
  font-size:13.5px;font-weight:600;display:flex;gap:8px;align-items:center}
.gl-pay-note{margin-top:14px;display:flex;align-items:center;justify-content:center;gap:6px;font-size:12px}
.gl-pay-side{min-width:0;perspective:1000px}
.gl-plastic{background:linear-gradient(135deg,oklch(0.35 0.08 200),oklch(0.55 0.14 160));color:#fff;border-radius:18px;
  padding:22px 24px;aspect-ratio:1.586;width:100%;position:relative;overflow:hidden;display:flex;flex-direction:column;
  justify-content:space-between;box-shadow:0 20px 50px rgba(0,0,0,.25);transform:rotateY(-4deg);
  transition:transform .5s cubic-bezier(.2,.8,.2,1)}
.gl-plastic.is-tilted{transform:rotateY(6deg)}
.gl-plastic-glow{position:absolute;right:-40px;top:-60px;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.12)}
.gl-plastic-top{display:flex;justify-content:space-between;align-items:center}
.gl-plastic-chip{width:44px;height:32px;border-radius:7px;background:linear-gradient(135deg,#F5D56B,#C99A2E)}
.gl-plastic-no{font-size:19px;letter-spacing:.1em;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}
.gl-plastic-foot{display:flex;justify-content:space-between;gap:12px;font-size:12px;text-transform:uppercase;letter-spacing:.06em}
.gl-plastic-foot span:first-child{font-weight:600;opacity:.95;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gl-pay-side .gl-card{margin-top:20px}

/* 6 · done */
.gl-done{text-align:center;padding-top:20px;position:relative}
.gl-confetti{position:absolute;inset:-60px 0 0;pointer-events:none;overflow:hidden}
.gl-confetti i{position:absolute;bottom:-20px;display:block;border-radius:3px;opacity:.8;animation:drift 7s linear infinite}
.gl-done-tick{width:110px;height:110px;border-radius:50%;background:var(--brand);color:#fff;margin:0 auto;
  display:grid;place-items:center;animation:pop .7s cubic-bezier(.2,.8,.2,1) both;box-shadow:0 20px 50px var(--brand-soft)}
.gl-done-tick svg{width:60px;height:60px}
.gl-done-title{font-size:48px;margin:30px 0 12px}
.gl-done-lede{margin:0 auto;max-width:560px}
.gl-done-lede strong{color:var(--ink)}
.gl-file{display:inline-flex;align-items:center;gap:18px;margin-top:36px;background:var(--surface);border:1px solid var(--line);
  border-radius:22px;padding:18px 18px 18px 22px;box-shadow:var(--shadow);text-align:left;max-width:100%;flex-wrap:wrap}
.gl-file-icon{width:52px;height:52px;border-radius:14px;background:var(--brand-soft);color:var(--brand);
  display:grid;place-items:center;flex:none}
.gl-file-name{font-weight:800;font-size:15px}
.gl-file-btn{margin-left:14px}
.gl-done-meta{display:flex;justify-content:center;gap:12px;margin-top:22px;font-size:13.5px;color:var(--muted);flex-wrap:wrap}
.gl-done-meta span{display:flex;align-items:center;gap:6px}
.gl-done-meta svg{color:var(--brand)}
.gl-tips{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;max-width:860px;margin:48px auto 0;text-align:left}
.gl-tip{padding:22px;border-radius:20px}
.gl-tip > svg{color:var(--brand)}
.gl-tip b{display:block;font-weight:800;margin:12px 0 4px}
.gl-tip p{margin:0;font-size:13.5px;color:var(--muted);line-height:1.5}

/* the bar along the foot for steps 1–3 */
.gl-foot{position:fixed;left:var(--sidebar-w);right:0;bottom:0;z-index:20;background:var(--surface);
  border-top:1px solid var(--line);box-shadow:0 -10px 30px rgba(0,0,0,.06);
  display:flex;align-items:center;gap:20px;padding:14px 32px}
body.has-gl-foot .content{padding-bottom:140px}
.gl-back{display:flex;align-items:center;gap:6px;font:700 14px 'Plus Jakarta Sans',sans-serif;color:var(--muted);
  background:none;border:none;cursor:pointer;padding:12px 6px;min-height:44px}
.gl-back:disabled{opacity:.3;cursor:default}
.gl-foot-hint{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;font-size:13.5px;color:var(--muted)}
.gl-foot-hint svg{color:var(--brand)}
.gl-foot-total{text-align:right}
.gl-foot-total-label{font-size:11.5px;color:var(--muted);font-weight:600;letter-spacing:.04em;text-transform:uppercase}
.gl-foot-total-n{font-size:22px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.gl-foot .gl-cta{margin-top:0;padding:0 22px}

/* the product dashboard */
.cx-grid-3{display:grid;grid-template-columns:1.6fr 1fr 1fr;gap:20px;margin:36px 0 34px}
.cx-card{background:var(--surface);border:1px solid var(--line);border-radius:22px;padding:24px 26px;
  display:flex;flex-direction:column;gap:4px;box-shadow:var(--shadow)}
.cx-kicker{font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.cx-big{font-size:34px;font-weight:800;letter-spacing:-.02em;line-height:1.2}
.cx-note{font-size:13px;color:var(--muted)}
.cx-card-deep{position:relative;background:var(--nav);color:#fff;border:none;padding:26px 28px;overflow:hidden}
.cx-card-deep .crowd{opacity:.5}
.cx-deep-body{position:relative;display:flex;flex-direction:column;gap:10px;flex:1}
.cx-card-deep .cx-kicker{color:rgba(255,255,255,.7)}
.cx-deep-lede{margin:0;font-size:21px;font-weight:700;line-height:1.3;text-wrap:pretty}
.cx-deep-foot{margin-top:auto;padding-top:12px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  font-size:12.5px;opacity:.9}
.cx-section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px}
.cx-section-head h2{margin:0;font-size:18px;font-weight:800}
.cx-table{background:var(--surface);border:1px solid var(--line);border-radius:20px;overflow:hidden;
  margin-bottom:34px;box-shadow:var(--shadow)}
.cx-tr{display:grid;grid-template-columns:2fr 1.6fr 1fr 1fr .9fr;gap:14px;padding:15px 22px;font-size:13.5px;
  align-items:center;border-bottom:1px solid var(--line)}
.cx-tr:last-child{border-bottom:none}
.cx-th{padding:12px 22px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.cx-td-name{font-weight:700}
.cx-blend{display:flex;height:8px;border-radius:4px;overflow:hidden;max-width:150px}
.cx-blend span{display:block;height:100%}
.cx-status{display:inline-block;background:var(--surface2);color:var(--muted);font-size:11.5px;font-weight:700;
  padding:4px 10px;border-radius:99px}
.cx-status.is-active{background:var(--brand-soft);color:var(--brand)}

/* "Powered by the Persona Engine" strip */
.cx-engine{background:var(--surface);border:1px solid var(--line);border-radius:22px;padding:20px 22px;
  display:grid;grid-template-columns:auto repeat(4,minmax(0,1fr));gap:20px;align-items:start;box-shadow:var(--shadow);
  margin-top:24px}
.cx-engine-brand{display:flex;align-items:center;gap:12px;padding-right:20px;border-right:1px solid var(--line);
  align-self:stretch;white-space:nowrap}
.cx-engine-by{font-size:10.5px;font-weight:600;color:var(--muted);letter-spacing:.02em}
.cx-engine-name{font-size:14.5px;font-weight:800;line-height:1.2}
.cx-engine-point{display:flex;flex-direction:column;gap:8px}
.cx-engine-point p{margin:0;font-size:12px;color:var(--muted);line-height:1.5;text-wrap:pretty}
.cx-engine-head{display:flex;align-items:center;gap:9px;font-size:11.5px;font-weight:800;letter-spacing:.04em;
  text-transform:uppercase;line-height:1.3}
.cx-engine-icon{flex:none;width:34px;height:34px;border-radius:50%;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center}

@media (max-width:1100px){
  .pcards{grid-template-columns:repeat(2,1fr)}
  .gl-channels{grid-template-columns:1fr}
  .gl-tips{grid-template-columns:1fr}
  .gl-pay{grid-template-columns:1fr}
  .cx-engine{grid-template-columns:1fr 1fr}
  .cx-engine-brand{grid-column:1/-1;border-right:none;padding-right:0;border-bottom:1px solid var(--line);padding-bottom:14px}
}
@media (max-width:900px){
  .gl-foot{left:0;padding:12px 16px;gap:12px}
  .gl-foot-hint{display:none}
  .gl-h1{font-size:32px}
  .gl-done-title{font-size:34px}
  .gl-steps{display:none}
  .cx-grid-3,.gl-grid-2,.cx-engine{grid-template-columns:1fr}
  .gl-countries{grid-template-columns:1fr}
  .gl-pay-grid{grid-template-columns:1fr}
  .gl-sticky,.gl-audience{position:static}
  .cx-tr{grid-template-columns:1fr 1fr;gap:8px 14px}
  .cx-th{display:none}
  .cx-td-name{grid-column:1/-1}
}
@media (max-width:640px){
  .pcards{grid-template-columns:1fr}
  .pcards[data-style="ticket"] .pcard{grid-template-columns:1fr;
    grid-template-areas:"art" "name" "desc" "uses" "side";grid-template-rows:auto}
  .pcards[data-style="ticket"] .pcard-art{min-height:132px;border-right:none;border-bottom:2px dashed var(--line)}
  .pcards[data-style="ticket"] .pcard-side,.pcards[data-style="ticket"] .pcard-cta{padding:0 26px 20px;margin:0 26px 20px}
}
@media (prefers-reduced-motion:reduce){
  .gl-panel,.gl-blend,.gl-done-tick{animation:none}
  .crowd i,.gl-confetti i{animation:none}
  .pcard,.gl-channel,.gl-country,.gl-region,.btn{transition:none}
  .pcard:hover,.gl-channel:hover,.gl-country:hover,.gl-region:hover,.btn-primary:hover{transform:none}
}

/* ---------- landing page (/ for visitors) ----------
   The public page from the Claude Design "NextTarget Landing" canvas. It is
   dark in both themes by design, so its colours are its own tokens on .lp
   rather than the app's theme tokens; nothing outside body.lp reads them. */
.lp{
  --lp-bg:#0b0f1a;--lp-ink:#e8ecf3;--lp-muted:#9aa4b8;--lp-placeholder:#6b7589;
  --lp-green:#2ec48f;--lp-green-hover:#3fd39e;--lp-on-green:#0b1a14;
  --lp-lime:#b5c94a;--lp-orange:#f0a13a;--lp-coral:#f07a6a;
  --lp-card:#0f1522;--lp-card2:#131a2b;--lp-chip:#1c2438;
  --lp-line:rgba(255,255,255,.08);--lp-line-soft:rgba(255,255,255,.06);
  --lp-line-strong:rgba(255,255,255,.12);--lp-hover:rgba(255,255,255,.06);
  --lp-green-tint:rgba(46,196,143,.12);--lp-green-ring:rgba(46,196,143,.35);
  --lp-shadow:0 30px 80px rgba(0,0,0,.45);
  margin:0;min-height:100vh;background:var(--lp-bg);color:var(--lp-ink);
  font:14px 'Plus Jakarta Sans',system-ui,sans-serif;-webkit-font-smoothing:antialiased}
.lp a{color:var(--lp-green);text-decoration:none}
.lp a:hover{color:#5fd9ad}
.lp .lp-container{max-width:1160px;margin:0 auto;padding-left:24px;padding-right:24px}
.lp .lp-green{color:var(--lp-green)}

/* header */
.lp-header{position:sticky;top:0;z-index:20;background:rgba(11,15,26,.85);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--lp-line-soft)}
.lp-header-row{padding-top:14px;padding-bottom:14px;display:flex;align-items:center;gap:24px}
.lp .lp-brand{display:flex;align-items:center;gap:10px;color:var(--lp-ink)}
.lp .lp-brand:hover{color:var(--lp-ink)}
.lp-brand-mark{width:34px;height:34px;border-radius:9px;background:var(--lp-green);display:grid;place-items:center;color:var(--lp-on-green);font-weight:800;font-size:15px}
.lp-brand-mark-sm{width:26px;height:26px;border-radius:7px;font-size:11px}
.lp-brand-name{font-weight:700;font-size:16px;letter-spacing:-.01em}
.lp-nav{display:flex;gap:22px;margin-left:auto;font-size:14px}
.lp .lp-nav a{color:var(--lp-muted)}
.lp .lp-nav a:hover{color:var(--lp-ink)}
.lp-header-actions{display:flex;gap:10px;align-items:center}
@media (max-width:760px){
  .lp-nav{display:none}
  .lp-header-actions{margin-left:auto}
}
/* the canvas has no phone rule for its header: keep the mark and both
   buttons, drop the wordmark, so nothing scrolls sideways at 360px */
@media (max-width:480px){
  .lp-header-row{gap:12px}
  .lp-brand-name{display:none}
  .lp .lp-btn-sm{padding:9px 12px;font-size:13px}
  .lp .lp-btn-green.lp-btn-sm{padding:9px 14px}
}

/* buttons: the canvas's pill-less rounded buttons, three sizes */
.lp .lp-btn{display:inline-flex;align-items:center;gap:8px;font-weight:600;border-radius:10px;white-space:nowrap}
.lp .lp-btn-sm{font-size:14px;padding:10px 14px}
.lp .lp-btn-md{font-size:14px;font-weight:700;padding:12px 18px;border-radius:11px}
.lp .lp-btn-lg{font-size:15px;padding:14px 18px;border-radius:12px}
.lp .lp-btn-green{background:var(--lp-green);color:var(--lp-on-green);font-weight:700}
.lp .lp-btn-green.lp-btn-sm{padding:10px 16px}
.lp .lp-btn-green.lp-btn-lg{padding:14px 22px}
.lp .lp-btn-green:hover{background:var(--lp-green-hover);color:var(--lp-on-green)}
.lp .lp-btn-outline{color:var(--lp-ink);border:1px solid var(--lp-line-strong)}
.lp .lp-btn-outline:hover{background:var(--lp-hover);color:var(--lp-ink)}
.lp button.lp-btn{border:0;cursor:pointer;font-family:inherit}

/* retail notice */
.lp-notice{background:rgba(46,196,143,.08);border-bottom:1px solid rgba(46,196,143,.18);text-align:center;padding:9px 24px;font-size:13px;color:var(--lp-muted)}
.lp-notice-tag{color:var(--lp-green);font-weight:700;letter-spacing:.08em;text-transform:uppercase;font-size:11px;margin-right:10px}

/* type */
.lp-eyebrow{color:var(--lp-green);font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}
.lp-hero .lp-eyebrow{margin-bottom:18px}
.lp-eyebrow-sm{margin-bottom:12px}
.lp-eyebrow-lime{color:var(--lp-lime)}
.lp-eyebrow-orange{color:var(--lp-orange)}
.lp-eyebrow-dot{display:flex;align-items:center;gap:8px}
.lp-h1{margin:0 0 20px;font-size:clamp(40px,5.2vw,64px);line-height:1.02;letter-spacing:-.035em;font-weight:800;text-wrap:pretty}
.lp-lede{margin:0 0 30px;font-size:18px;line-height:1.55;color:var(--lp-muted);max-width:520px;text-wrap:pretty}
.lp-h2{margin:0 0 12px;font-size:clamp(30px,3.6vw,44px);line-height:1.08;letter-spacing:-.03em;font-weight:800;text-wrap:pretty}
.lp-h2-contact{font-size:clamp(28px,3.4vw,40px)}
.lp-sub{margin:0 0 36px;color:var(--lp-muted);font-size:17px;line-height:1.55}
.lp-sub-pretty{text-wrap:pretty}
.lp-w760{max-width:760px}.lp-w720{max-width:720px}.lp-w680{max-width:680px}.lp-w620{max-width:620px}.lp-w600{max-width:600px}
.lp-sub-tight{margin-bottom:0}
.lp-sub-24{margin-bottom:24px}
.lp-label{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--lp-muted)}
.lp-label-xs{font-size:10px;letter-spacing:.08em}
.lp-dot{width:7px;height:7px;border-radius:50%;display:inline-block;background:var(--lp-green)}
.lp-dot-8{width:8px;height:8px}

/* layout */
.lp-section{padding-top:56px;padding-bottom:56px}
.lp-section-pair{padding-top:24px;padding-bottom:56px}
.lp-hero{padding-top:72px;padding-bottom:48px;display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:40px;align-items:center}
.lp-grid-150{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.lp-grid-240{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
.lp-grid-280{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
.lp-grid-300{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px}
.lp-section-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;margin-bottom:32px}
@media (max-width:368px){.lp-hero,.lp-grid-300,.lp-industries{grid-template-columns:1fr}}

/* cards */
.lp-card{background:var(--lp-card);border:1px solid var(--lp-line);border-radius:18px}
.lp-card2{background:var(--lp-card2);border:1px solid var(--lp-line);border-radius:18px}
.lp-pad-28{padding:28px}
.lp-card-title{font-size:22px;font-weight:700;letter-spacing:-.02em;margin-bottom:10px}
.lp-card-text{margin:0 0 22px;color:var(--lp-muted);font-size:14px;line-height:1.55}
.lp-dots{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.lp-dots span{position:absolute;border-radius:50%;display:block}

/* hero stats and the builder preview */
.lp-hero-actions{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.lp-stats{margin-top:34px;display:flex;gap:28px;flex-wrap:wrap}
.lp-stat-num{font-size:26px;font-weight:800;letter-spacing:-.02em}
.lp-stat-lbl{font-size:13px;color:var(--lp-muted)}
.lp-preview{position:relative;background:var(--lp-card);border:1px solid var(--lp-line);border-radius:20px;padding:24px;overflow:hidden;box-shadow:var(--lp-shadow)}
.lp-preview-body{position:relative}
.lp-preview-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;gap:12px;flex-wrap:wrap}
.lp-preview-steps{font-size:12px;color:var(--lp-muted)}
.lp-preview-rows{display:grid;gap:10px}
.lp-tile{background:var(--lp-card2);border:1px solid var(--lp-line);border-radius:12px;padding:14px 16px}
.lp-tile-row{display:flex;justify-content:space-between;align-items:center;gap:12px}
.lp-tile .lp-label{letter-spacing:.08em}
.lp-tile-value{font-size:15px;font-weight:600;margin-top:4px}
.lp-tile-pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.lp-tile-sm{border-color:rgba(255,255,255,.1);border-radius:10px;padding:10px 12px}
.lp-tile-value-sm{font-size:14px;font-weight:600;margin-top:3px}
.lp-tile-pair:has(.lp-tile-sm){gap:8px}
.lp-pill-live{font-size:12px;color:var(--lp-green);background:var(--lp-green-tint);padding:4px 10px;border-radius:999px;font-weight:600}
.lp-blend-bar{display:flex;height:8px;border-radius:999px;overflow:hidden;margin:10px 0;background:var(--lp-chip)}
.lp-chips{display:flex;gap:8px;flex-wrap:wrap}
.lp-chip{font-size:12px;padding:5px 10px;border-radius:999px;background:var(--lp-chip);color:var(--lp-ink);display:inline-block}
.lp-chip-dot{display:inline-flex;align-items:center;gap:6px}
.lp-persona .lp-chips{gap:6px}
.lp-preview-foot{display:flex;justify-content:space-between;align-items:center;margin-top:18px;gap:12px;flex-wrap:wrap}
.lp-preview-est{font-size:12px;color:var(--lp-muted)}
.lp-preview-num{font-size:28px;font-weight:800;letter-spacing:-.02em}

/* outcomes */
.lp-window{padding:28px;display:flex;flex-direction:column;gap:16px}
.lp-window-num{font-size:clamp(48px,6vw,72px);font-weight:800;letter-spacing:-.04em;line-height:1;color:var(--lp-green)}
.lp-window-lead{margin:0;font-size:16px;line-height:1.5;font-weight:600}
.lp-window-body{margin:0;color:var(--lp-muted);font-size:14px;line-height:1.55;flex:1}
.lp-market{display:flex;gap:4px;flex-wrap:wrap}
.lp-market span{width:14px;height:14px;border-radius:50%;background:var(--lp-chip);display:block}
.lp-market span.is-ready{background:var(--lp-green)}
.lp-outcome-list{display:grid;gap:16px}
.lp-outcome{padding:24px;display:flex;gap:16px;align-items:flex-start}
.lp-outcome-icon{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;font-weight:800;font-size:14px;color:var(--lp-on-green);flex:none}
.lp-bg-green{background:var(--lp-green)}.lp-bg-lime{background:var(--lp-lime)}.lp-bg-orange{background:var(--lp-orange)}
.lp-outcome-title{font-size:18px;font-weight:700;letter-spacing:-.01em;margin-bottom:6px}
.lp-outcome p{margin:0;color:var(--lp-muted);font-size:14px;line-height:1.55}

/* how it works */
/* how it works: a timeline. Each step sets --step (its accent); the rail, the
   markers and every pressed tile take their colour from it. */
.lp-how-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px 48px;flex-wrap:wrap;margin-bottom:56px}
.lp-how-eyebrow{display:flex;align-items:center;gap:10px}
.lp-how-eyebrow span{width:8px;height:8px;border-radius:50%;background:var(--lp-green);box-shadow:0 0 12px var(--lp-green)}
.lp .lp-how-h2{font-size:clamp(34px,4.6vw,60px);line-height:1.04;margin-bottom:18px}
.lp-how-shimmer{background:linear-gradient(90deg,var(--lp-ink) 0%,var(--lp-ink) 40%,var(--lp-green-hover) 50%,var(--lp-ink) 60%,var(--lp-ink) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:lp-shimmer 6s linear infinite}
.lp-how-sub{margin-bottom:0;max-width:600px}
.lp-how-try{display:flex;align-items:center;gap:10px;padding:12px 18px;border:1px solid var(--lp-line-strong);border-radius:999px;background:var(--lp-card);font-size:14px;color:var(--lp-muted)}
.lp-how-try svg{color:var(--lp-green);flex:none}

.lp-how-line{position:relative;display:flex;flex-direction:column;gap:36px}
.lp-how-rail{position:absolute;left:47px;top:28px;bottom:60px;width:2px;border-radius:2px;background:var(--lp-chip)}
.lp-how-rail::before{content:"";position:absolute;inset:0;border-radius:2px;background:linear-gradient(180deg,var(--lp-green) 0%,var(--lp-lime) 33%,var(--lp-orange) 62%,var(--lp-coral) 88%,var(--lp-green) 100%);transform-origin:top}
.lp-how-rail span{position:absolute;left:-3px;top:-6%;width:8px;height:90px;border-radius:8px;opacity:0;background:linear-gradient(180deg,transparent,rgba(255,255,255,.95),transparent);filter:blur(1px);box-shadow:0 0 18px 4px rgba(255,255,255,.35);animation:lp-travel 5s cubic-bezier(.5,0,.5,1) 2.6s infinite}
.lp-how-step{display:grid;grid-template-columns:96px minmax(0,1fr)}
/* above the rail, which is positioned and would otherwise paint over the static markers */
.lp-how-marker{position:relative;z-index:1;width:56px;height:56px;margin:28px 0 0 20px}
.lp-how-marker::after{content:"";position:absolute;left:56px;top:27px;width:20px;height:2px;background:var(--step)}
.lp-how-num{position:absolute;inset:0;border-radius:16px;background:var(--step);color:var(--lp-on-green);display:grid;place-items:center;font-size:22px;font-weight:800;box-shadow:0 0 0 6px var(--lp-bg),0 0 30px color-mix(in srgb,var(--step) 50%,transparent)}
.lp-how-ping{position:absolute;inset:0;border-radius:16px;border:2px solid var(--step);animation:lp-ping 2.6s cubic-bezier(0,0,.2,1) 1s infinite}
.lp-how-card{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:40px;padding:32px;border-radius:20px;transition:transform .35s cubic-bezier(.2,.7,.2,1),border-color .35s,box-shadow .35s}
.lp-how-card:hover{transform:translateY(-4px);border-color:var(--lp-line-strong);box-shadow:0 30px 60px -30px rgba(0,0,0,.8)}
.lp-how-copy{display:flex;flex-direction:column;gap:12px}
.lp-how-tag{font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--step)}
.lp-how-title{margin:0;font-size:clamp(22px,2.4vw,28px);font-weight:700;letter-spacing:-.02em}
.lp-how-body{margin:0;font-size:15px;line-height:1.65;color:var(--lp-muted)}
.lp-how-demo{display:flex;flex-direction:column;gap:14px;justify-content:center}
.lp-how-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px}
.lp-how-industries{display:flex;flex-wrap:wrap}
.lp-how-industries .lp-how-tile{flex:1 1 130px}
.lp .lp-how-tile{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:14px;padding:18px;min-height:116px;text-align:left;font:inherit;color:var(--lp-ink);border:1px solid var(--lp-line-strong);background:var(--lp-card);border-radius:14px;transition:transform .2s,border-color .25s,background-color .25s,box-shadow .25s}
.lp button.lp-how-tile,.lp .lp-how-state{cursor:pointer}
.lp button.lp-how-tile:hover,.lp .lp-how-state:hover{transform:translateY(-2px)}
.lp .lp-how-tile:focus-visible,.lp .lp-how-state:focus-visible{outline:2px solid var(--lp-green);outline-offset:2px}
.lp .lp-how-tile.is-on,.lp .lp-how-tile[aria-pressed="true"]{border-color:var(--step);background:color-mix(in srgb,var(--step) 8%,transparent);box-shadow:0 14px 34px -16px color-mix(in srgb,var(--step) 60%,transparent)}
.lp-how-tile-text{display:flex;flex-direction:column;gap:3px}
.lp-how-tile-text b{font-size:16px;font-weight:700}
.lp-how-tile-text small{font-size:13px;color:var(--lp-muted)}
.lp-how-icon{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;background:var(--lp-chip);color:var(--lp-muted)}
.lp-how-icon svg{width:20px;height:20px}
.is-on>.lp-how-icon,[aria-pressed="true"]>.lp-how-icon{background:var(--step);color:var(--lp-on-green)}
.lp-how-bars{display:flex;align-items:flex-end;gap:3px;height:22px}
.lp-how-bars span{width:6px;border-radius:2px;background:var(--lp-chip)}
.lp-how-bars span:nth-child(1){height:10px}
.lp-how-bars span:nth-child(2){height:16px}
.lp-how-bars span:nth-child(3){height:22px}
.lp-how-bars .is-lit{background:var(--lp-placeholder)}
[aria-pressed="true"] .lp-how-bars .is-lit{background:var(--step)}
.lp-how-check{position:absolute;top:12px;right:12px;width:22px;height:22px;border-radius:50%;background:var(--step);color:var(--lp-on-green);display:none;place-items:center}
.lp-how-check svg{width:12px;height:12px}
.is-on>.lp-how-check,[aria-pressed="true"]>.lp-how-check{display:grid;animation:lp-pop .4s cubic-bezier(.3,1.6,.5,1) both}
.lp-how-more{flex:2 1 260px;display:flex;align-items:center;justify-content:center;gap:12px;min-height:116px;padding:12px 14px;border:1px dashed var(--lp-line-strong);border-radius:14px;color:var(--lp-muted);font-size:14px;background:repeating-linear-gradient(135deg,rgba(255,255,255,.015) 0 10px,transparent 10px 20px)}
.lp-how-more-sm{min-height:0;border-radius:12px;background:none;gap:8px}
.lp-how-note{display:flex;align-items:center;gap:12px;padding:12px 16px;border:1px solid var(--lp-line-strong);border-radius:12px;background:var(--lp-card);font-size:14px;color:var(--lp-muted)}
.lp-how-note svg{color:var(--step);flex:none}
.lp-how-note strong{color:var(--lp-ink);font-weight:700}
.lp-how-label{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--lp-muted)}
.lp-how-states{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:8px}
.lp .lp-how-state{height:44px;border-radius:10px;font:inherit;font-size:14px;font-weight:700;color:var(--lp-ink);border:1px solid var(--lp-line-strong);background:var(--lp-card);transition:transform .2s,border-color .25s,background-color .25s}
.lp .lp-how-state[aria-pressed="true"]{color:var(--lp-on-green);border-color:var(--step);background:var(--step)}
.lp-how-refine{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.lp-how-field{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--lp-line-strong);border-radius:12px;background:var(--lp-card)}
.lp-how-field svg{color:var(--step);flex:none}
.lp-how-field span{display:flex;flex-direction:column;gap:2px}
.lp-how-field small{font-size:12px;color:var(--lp-muted)}
.lp-how-field b{font-size:15px;font-weight:700}
.lp-how-result .lp-how-marker{margin-top:22px}
.lp-how-result .lp-how-marker::after{display:none}
.lp-how-result .lp-how-num,.lp-how-result .lp-how-ping{border-radius:50%}
.lp-how-result .lp-how-num{background:var(--lp-bg);border:2px solid var(--step);color:var(--step)}
.lp-how-result .lp-how-num svg{width:22px;height:22px}
.lp-how-list{display:flex;align-items:center;justify-content:space-between;gap:20px 32px;flex-wrap:wrap;padding:26px 32px;border-radius:20px;border:1px solid var(--lp-green-ring);background:linear-gradient(90deg,var(--lp-green-tint),transparent);box-shadow:0 20px 60px -30px var(--lp-green-ring)}
.lp-how-summary{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.lp-how-summary>span{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;background:var(--lp-card2);border:1px solid var(--lp-line-strong);font-size:14px;font-weight:600}
.lp-how-summary>span::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--dot);flex:none}
.lp-how-cta{transition:transform .2s,box-shadow .2s}
.lp .lp-how-cta:hover{transform:translateY(-2px);box-shadow:0 12px 30px -10px var(--lp-green-ring)}
/* set by the script only when motion is welcome: the steps wait below, then rise as they scroll in */
.lp-how.is-anim .lp-how-head,.lp-how.is-anim .lp-how-step{opacity:0}
.lp-how.is-anim .is-in{animation:lp-rise .9s cubic-bezier(.2,.7,.2,1) both}
.lp-how.is-anim .lp-how-rail::before{transform:scaleY(0)}
.lp-how.is-anim .lp-how-rail.is-in{animation:none}
.lp-how.is-anim .lp-how-rail.is-in::before{animation:lp-grow 2.2s cubic-bezier(.6,0,.2,1) .3s both}
@keyframes lp-rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes lp-grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes lp-travel{0%{top:-6%;opacity:0}8%{opacity:1}92%{opacity:1}100%{top:100%;opacity:0}}
@keyframes lp-ping{0%{transform:scale(1);opacity:.7}80%,100%{transform:scale(1.9);opacity:0}}
@keyframes lp-pop{0%{transform:scale(0) rotate(-30deg)}70%{transform:scale(1.2)}100%{transform:scale(1)}}
@keyframes lp-shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@media (max-width:900px){.lp-how-card{grid-template-columns:1fr;gap:24px}}
@media (max-width:600px){
  .lp-how-head{margin-bottom:40px}
  .lp-how-line{gap:24px}
  .lp-how-rail{left:19px}
  .lp-how-step{grid-template-columns:52px minmax(0,1fr)}
  .lp-how-marker{width:40px;height:40px;margin:20px 0 0}
  .lp-how-marker::after{left:40px;top:19px;width:12px}
  .lp-how-num{font-size:16px;border-radius:12px;box-shadow:0 0 0 4px var(--lp-bg)}
  .lp-how-ping{border-radius:12px}
  .lp-how-card{padding:20px}
  .lp-how-states{grid-template-columns:repeat(4,minmax(0,1fr))}
  .lp-how-list{padding:20px}
  .lp-how-result .lp-how-marker{margin-top:20px}
}
@media (prefers-reduced-motion:reduce){
  .lp-how-shimmer,.lp-how-ping,.lp-how-rail span,.lp-how-check{animation:none}
  .lp-how-ping,.lp-how-rail span{display:none}
  .lp-how-shimmer{color:var(--lp-ink);background:none}
  .lp-how-card,.lp .lp-how-tile,.lp .lp-how-state,.lp-how-cta{transition:none}
}
.lp-shot{background:var(--lp-card);border:1px solid var(--lp-line);border-radius:20px;padding:10px;box-shadow:var(--lp-shadow)}
/* the same gap two stacked sections leave between them (56px + 56px) */
.lp-shot-builder{margin-top:112px}
.lp-shot-bar{display:flex;gap:6px;padding:6px 8px 12px}
/* the macOS close, minimise and zoom colours, so the frame reads as a real window */
.lp-shot-bar span{width:10px;height:10px;border-radius:50%;background:#ff5f57;display:block}
.lp-shot-bar span:nth-child(2){background:#febc2e}
.lp-shot-bar span:nth-child(3){background:#28c840}
/* product screenshots (app/static/screenshots): captured from the Get Leads flow on seed personas and a made-up user */
.lp-shot-img{display:block;width:100%;height:auto;border-radius:12px;background:var(--lp-chip)}
/* min-height keeps the link a 44px+ tap target whatever the logo's height */
.lp .lp-logo{display:flex;align-items:center;min-height:56px;opacity:.85;transition:opacity .15s}
.lp .lp-logo:hover,.lp .lp-logo:focus-visible{opacity:1}
.lp-logo img{display:block;height:auto;max-width:100%}

/* personas */
.lp-segment{display:inline-flex;background:var(--lp-card2);border:1px solid var(--lp-line);border-radius:12px;padding:4px}
.lp-segment span{padding:8px 16px;border-radius:9px;color:var(--lp-muted);font-size:14px}
.lp-segment span.is-on{background:var(--lp-bg);color:var(--lp-ink);font-weight:700}
.lp-persona{overflow:hidden;display:flex;flex-direction:column}
.lp-persona-art{position:relative;height:150px;overflow:visible}
.lp-persona-art .lp-dots{overflow:hidden}
.lp-persona-icon{position:absolute;left:18px;bottom:-22px;width:52px;height:52px;border-radius:12px;display:grid;place-items:center;z-index:1}
.lp-persona-icon span{width:18px;height:18px;border-radius:50%;border:2.5px solid var(--lp-on-green);display:block}
.lp-persona-body{padding:34px 20px 22px;display:flex;flex-direction:column;gap:10px;flex:1}
.lp-persona-title{font-size:21px;font-weight:700;letter-spacing:-.02em;line-height:1.15}
/* the description is the persona's own (data_dictionary-length copy); the
   canvas budgets four lines, so anything longer ends in an ellipsis */
.lp-persona-text{margin:0 0 auto;color:var(--lp-muted);font-size:14px;line-height:1.55;display:-webkit-box;-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.lp-persona-foot{display:flex;justify-content:space-between;align-items:baseline;margin-top:8px;padding-top:12px;border-top:1px solid var(--lp-line-soft)}
.lp-persona-count{font-size:22px;font-weight:800;letter-spacing:-.02em}
.lp-persona-share{font-size:12px;color:var(--lp-muted)}

/* blend + narrow */
.lp-blend-list{display:grid;gap:8px}
.lp-blend-row{display:flex;align-items:center;gap:12px;font-size:14px}
.lp-blend-row.is-off{color:var(--lp-muted)}
.lp-blend-name{flex:1}
.lp-blend-count{color:var(--lp-muted);font-size:13px}
.lp-check{width:18px;height:18px;border-radius:5px;border:1.5px solid rgba(255,255,255,.2);display:grid;place-items:center;font-size:12px;font-weight:800;flex:none}
.lp-check.is-on{background:var(--lp-green);border:0;color:var(--lp-on-green)}
.lp-states{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.lp-state{font-size:13px;font-weight:600;padding:7px 12px;border-radius:999px;background:var(--lp-card2);color:var(--lp-muted);border:1px solid rgba(255,255,255,.1)}
.lp-state.is-on{background:rgba(46,196,143,.15);color:var(--lp-green);border-color:rgba(46,196,143,.5)}

/* channels */
.lp-channels-intro{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:40px;align-items:center}

/* persona engine strip */
.lp-engine{border-radius:20px;padding:28px;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:28px;align-items:start}
.lp-engine-brand{display:flex;align-items:center;gap:14px;min-height:34px}
.lp-engine-mark{width:52px;height:52px;border-radius:12px;background:var(--lp-green);display:grid;place-items:center;flex:none}
.lp-engine-mark span{width:20px;height:20px;border-radius:50%;border:2.5px solid var(--lp-on-green);display:block}
.lp-engine-by{font-size:12px;color:var(--lp-muted)}
.lp-engine-name{font-weight:700;font-size:16px;line-height:1.2}
.lp-engine-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.lp-ring-dot{width:34px;height:34px;border-radius:50%;border:1px solid var(--lp-green-ring);display:grid;place-items:center;flex:none}
.lp-ring-dot span{width:9px;height:9px;border-radius:50%;background:var(--lp-green);display:block}
.lp-engine-title{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.lp-engine-text{margin:0;color:var(--lp-muted);font-size:13px;line-height:1.55}

/* industries */
.lp-industries{gap:40px;align-items:start}
/* who can buy: the live route carries the green; the coming one is the same card, dashed and quiet */
.lp-buy{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.lp-buy-card{padding:32px;display:flex;flex-direction:column;align-items:flex-start}
.lp-buy-now{border-color:var(--lp-green-ring);background:linear-gradient(160deg,var(--lp-green-tint),var(--lp-card) 55%)}
.lp-buy-soon{border-style:dashed;border-color:var(--lp-line-strong);background:transparent}
.lp-buy-status{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:6px 12px;border-radius:999px;color:var(--lp-muted);background:var(--lp-chip)}
.lp-buy-now .lp-buy-status{color:var(--lp-green);background:var(--lp-green-tint)}
.lp-buy-dot{width:8px;height:8px;border-radius:50%;background:var(--lp-green);box-shadow:0 0 0 4px var(--lp-green-tint)}
.lp-buy-title{margin:20px 0 8px;font-size:clamp(24px,2.6vw,30px);line-height:1.15;letter-spacing:-.02em;font-weight:800}
.lp-buy-text{margin:0 0 20px;color:var(--lp-muted);font-size:16px;line-height:1.55}
.lp-buy-list{list-style:none;margin:0 0 28px;padding:0;display:grid;gap:10px;font-size:15px;line-height:1.5}
.lp-buy-list li{position:relative;padding-left:26px}
.lp-buy-list li::before{content:"";position:absolute;left:4px;top:.5em;width:10px;height:5px;border-left:2px solid var(--lp-green);border-bottom:2px solid var(--lp-green);transform:rotate(-45deg)}
.lp-buy-soon .lp-buy-list{color:var(--lp-muted)}
.lp-buy-soon .lp-buy-list li::before{border-color:var(--lp-muted)}
.lp-buy-actions{margin-top:auto;display:flex;flex-wrap:wrap;gap:12px}
@media (max-width:760px){.lp-buy{grid-template-columns:1fr}.lp-buy-card{padding:24px}}
.lp-industry{border-radius:14px;padding:18px;min-height:120px;display:flex;flex-direction:column;justify-content:space-between;gap:12px}
.lp-industry.is-coming{opacity:.7}
/* the live industry: a breathing glow, a pulsing dot, a sheen that sweeps across and an activity meter */
.lp-industry.is-live{position:relative;overflow:hidden;border-color:var(--lp-green-ring);background:linear-gradient(160deg,var(--lp-green-tint),var(--lp-card2) 70%);animation:lp-breathe 3.2s ease-in-out infinite}
.lp-industry.is-live::before{content:"";position:absolute;top:0;bottom:0;left:-60%;width:50%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.09),transparent);transform:skewX(-18deg);animation:lp-sheen 4.5s ease-in-out infinite;pointer-events:none}
.lp-industry.is-live .lp-industry-badge{display:inline-flex;align-items:center;gap:8px}
.lp-live-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--lp-green);box-shadow:0 0 10px var(--lp-green)}
.lp-live-dot::after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid var(--lp-green);animation:lp-ping 1.8s cubic-bezier(0,0,.2,1) infinite}
.lp-industry-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.lp-live-bars{display:flex;align-items:flex-end;gap:3px;height:20px;flex:none}
.lp-live-bars span{width:4px;height:100%;border-radius:2px;background:var(--lp-green);transform-origin:bottom;animation:lp-meter 1.1s ease-in-out infinite}
.lp-live-bars span:nth-child(2){animation-delay:-.35s;animation-duration:.9s}
.lp-live-bars span:nth-child(3){animation-delay:-.7s;animation-duration:1.3s}
.lp-live-bars span:nth-child(4){animation-delay:-.2s;animation-duration:1s}
@keyframes lp-breathe{0%,100%{border-color:var(--lp-green-ring);box-shadow:0 0 0 0 transparent,0 0 18px -6px var(--lp-green-ring)}50%{border-color:var(--lp-green);box-shadow:0 0 0 4px var(--lp-green-tint),0 0 42px -4px var(--lp-green)}}
@keyframes lp-sheen{0%,55%{left:-60%}100%{left:130%}}
@keyframes lp-meter{0%,100%{transform:scaleY(.3)}50%{transform:scaleY(1)}}
@media (prefers-reduced-motion:reduce){
  .lp-industry.is-live,.lp-live-dot::after,.lp-live-bars span{animation:none}
  .lp-industry.is-live{border-color:var(--lp-green);box-shadow:0 0 30px -8px var(--lp-green)}
  .lp-industry.is-live::before,.lp-live-dot::after{display:none}
  .lp-live-bars span:nth-child(odd){transform:scaleY(.55)}
}
.lp-industry-badge{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--lp-muted)}
.lp-industry-name{font-size:15px;font-weight:700;line-height:1.25}

/* trusted by */
.lp-trusted-wrap{padding-top:24px;padding-bottom:16px}
.lp-trusted{border-top:1px solid var(--lp-line-soft);border-bottom:1px solid var(--lp-line-soft);padding:32px 0;display:flex;flex-direction:column;gap:24px;align-items:center}
.lp-trusted p{margin:0;text-align:center;font-size:14px;color:var(--lp-muted);letter-spacing:.02em}
.lp-trusted p span{color:var(--lp-ink);font-weight:600}
.lp-logos{display:flex;flex-wrap:wrap;justify-content:center;gap:20px 48px;width:100%;align-items:center}

/* contact */
.lp-contact-wrap{padding-top:56px;padding-bottom:80px}
/* Two fixed columns, not auto-fit, and no row gap: a password manager or
   autofill extension can inject an element into the card when a field takes
   focus, and an auto-fit grid gave that stray element a third column. */
.lp-contact{position:relative;border-radius:24px;padding:40px;overflow:hidden;display:grid;grid-template-columns:1fr 1fr;column-gap:40px}
.lp-contact>.lp-contact-copy{grid-column:1}
.lp-contact>.lp-form{grid-column:2}
.lp-contact-copy{position:relative}
.lp-contact-text{margin:0 0 20px;color:var(--lp-muted);font-size:16px;line-height:1.55}
.lp .lp-contact-mail{font-size:15px;font-weight:600}
.lp-form{position:relative;display:grid;gap:12px}
.lp-form-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.lp .lp-input{background:var(--lp-card2);border:1px solid var(--lp-line-strong);border-radius:11px;padding:13px 14px;color:var(--lp-ink);font-size:14px;outline:none;width:100%;font-family:inherit;box-sizing:border-box}
.lp input.lp-input:focus,.lp textarea.lp-input:focus{border-color:var(--lp-green)}
.lp .lp-input::placeholder{color:var(--lp-placeholder)}
.lp .lp-textarea{resize:vertical}
.lp-form-foot{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.lp-form-status{font-size:13px;color:var(--lp-muted)}
.lp-form-status-ok{color:var(--lp-green)}
.lp-form-status-error{color:var(--lp-coral)}
.lp .lp-input[aria-invalid],.lp .lp-input[aria-invalid]:focus{border-color:var(--lp-coral)}
.lp .lp-btn:disabled{opacity:.6;cursor:progress}
@media (max-width:760px){
  .lp-contact{grid-template-columns:1fr}
  .lp-contact>.lp-form{grid-column:1;margin-top:40px}
}
@media (max-width:480px){.lp-contact{padding:24px}.lp-form-pair{grid-template-columns:1fr}}

/* footer */
.lp-footer{border-top:1px solid var(--lp-line-soft)}
.lp-footer-row{padding-top:28px;padding-bottom:28px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--lp-muted)}
.lp-footer-brand{display:flex;align-items:center;gap:10px;color:var(--lp-ink);font-weight:700}
.lp-footer-meta{color:var(--lp-muted);margin-left:8px;font-weight:400}
.lp-footer-links{display:flex;gap:20px;flex-wrap:wrap}
.lp .lp-footer-links a,.lp .lp-footer-links a:hover{color:var(--lp-muted)}
