/* Seller pages: /intake and /portal. Sits on top of /poly.css and /assets/app/app.css.
   Only seller-specific pieces live here; shared components stay in app.css. */

/* app.css's .f{display:block} and this file's own .oauth{display:grid} are author rules
   with the same specificity as the browser's built-in [hidden]{display:none}, and author
   beats user-agent at a tie regardless of source order: a [hidden] label with class .f
   (sponsor name, physical-ops notes) or #oauth rendered visible instead of hidden. Force it. */
[hidden]{display:none!important}

.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.f .err{font-style:normal}
.f.narrow{max-width:340px}
.linkbtn{background:none;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:4px 0;
  font:inherit;font-size:14px;color:var(--ink2);cursor:pointer;line-height:1.3}
.linkbtn:hover{color:var(--ink);border-bottom-color:var(--ink)}
.linkbtn:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.notice + .notice{margin-top:10px}
.notice a{border-bottom:1px solid var(--line)}
/* appbar "Talk to Polyshares" link: shown here on desktop; on phone it moves to the
   footer line instead (.talk-footer below), so the appbar stays brand + Sign out only. */
.talk-footer{display:none}

/* ---------- intake: static intro and flow shell ---------- */
.intake{padding-bottom:64px}
.intake-top{max-width:760px}
.intake-top h1{font-size:clamp(31px,4.3vw,50px);font-weight:300;margin-top:16px;max-width:20ch}
.intake-top h1{font-size:var(--t-hero);line-height:1.02;font-weight:300}
.lede{margin-top:12px;max-width:60ch;color:var(--ink2);font-size:var(--t-body)}
.nojs-cta{margin-top:18px}
/* the flow lives in the same card the homepage picker uses, so /intake reads as the next step of the homepage, not a new site */
.flowbox{max-width:none;margin-top:0;padding:28px;border:1px solid var(--line);background:var(--paper2);border-radius:10px}
.flowbox .step h2{font-size:var(--t-h3);line-height:1.2;font-weight:400}
.flowbox .step{padding:0}
.wrap.flow.intake{padding-top:56px;padding-bottom:96px}
/* One centred column (Nathan, 2026-09-15: the copy-left, card-right split read as lopsided
   next to a tall form). Heading and one line above the card; the step list folds into a
   compact inline row since the card already carries "Step n of m". */
.intake-grid{display:block;max-width:680px;margin:0 auto}
.intake-top{max-width:none;margin-bottom:22px}
.intake-top h1{font-size:clamp(30px,3.6vw,42px);max-width:none}
.intake-top .lede{margin-top:8px}

.intake-top .asklist li{align-items:center;gap:9px}
.intake-top .asklist .step-txt{white-space:nowrap}
.intake-top .asklist .step-txt b{font-weight:500}
.intake-top .asklist-after{display:none}
.intake-top .asklist .step-desc{display:none}
.wrap.flow.intake{padding-top:44px}
/* progress list: numbered circles, current step ink-filled, done steps get a CSS-drawn
   check, upcoming stays muted. intake.js only ever toggles aria-current on the li
   itself, so "done" is derived with :has() from position relative to that li. */
.intake-top .asklist{list-style:none;margin:24px 0 0;padding:0;display:flex;flex-direction:column;gap:12px}
.intake-top .asklist li{display:flex;align-items:flex-start;gap:14px;color:var(--muted);font-size:var(--t-small);line-height:1.5}
.intake-top .asklist .step-mark{
  position:relative;flex:none;width:28px;height:28px;margin-top:1px;border-radius:50%;
  display:grid;place-items:center;font:500 13px var(--sans);color:var(--muted);
  border:1px solid var(--line);background:var(--paper2);
}
.intake-top .asklist .step-txt b{color:var(--ink);font-weight:500}
.intake-top .asklist li[aria-current]{color:var(--ink2)}
.intake-top .asklist li[aria-current] .step-mark{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.intake-top .asklist li:has(~li[aria-current]){color:var(--ink2)}
.intake-top .asklist li:has(~li[aria-current]) .step-mark{background:var(--ink);border-color:var(--ink);color:transparent}
.intake-top .asklist li:has(~li[aria-current]) .step-mark::after{
  content:"";position:absolute;left:8px;top:6px;width:5px;height:10px;
  border:solid var(--paper);border-width:0 1.6px 1.6px 0;transform:rotate(40deg);
}
.guidenote{margin-top:16px;font-size:var(--t-small);color:var(--ink2)}
@media (max-width:900px){.intake-grid{grid-template-columns:1fr}.intake-top .asklist{display:none}}
.flowbox .flow-head{margin-bottom:26px;min-width:0}
.savestate{font-size:12.5px;color:var(--muted);white-space:nowrap;min-width:0}
.savestate[data-s="error"]{color:#8c2f24}
/* "Not saved" after 3 failures, and "session expired": both carry a control (Retry / Sign in
   again), so they need to wrap like normal text instead of the one-line status above them. */
.savestate[data-s="failed"],.savestate[data-s="expired"]{color:#8c2f24;white-space:normal;display:block}
.savestate[data-s="failed"] .linkbtn,.savestate[data-s="expired"] .linkbtn{font-size:12.5px;padding:0;border-bottom-color:#8c2f24}
.whoami{margin:-12px 0 20px}
#flownotice{margin-bottom:22px}
#flownotice:empty{display:none}
.flowbox .step h2{outline:none}
/* design brief: 48px inputs inside the flow; Continue right-aligned with Back as a
   quiet text button on the left, same row, vertically centered (poly.css's .flow-nav
   already gives the row flex + align-items:center; this just pushes .btn to the end,
   including on a step with no Back button). */
.flowbox .f input,.flowbox .f select,.flowbox .f textarea{min-height:48px;padding:13px 15px;font-size:16px;line-height:1.2}
/* Year selector: the design-system chevron, sized and inset for the 48px intake control. */
.flowbox #i-year{appearance:none;-webkit-appearance:none;padding-right:42px;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="9" height="9" viewBox="0 0 9 9"><path d="M1 3l3.5 4L8 3" fill="none" stroke="%233D3B37" stroke-width="1.6"/></svg>');background-repeat:no-repeat;background-position:right 15px center;background-size:12px 12px;cursor:pointer}
.flowbox .f textarea{min-height:96px}
/* Design v2 pass, rule 2: single-column forms on /intake steps and portal tasks -- the
   two-column .fgrid pairing on the company/account/profile steps is gone, so every field now
   stacks full width; cap that width at 440px rather than let it stretch to the flow column's
   full ~500px so a line of text stays a comfortable measure to scan and edit. */
.flowbox .f{max-width:440px}
.flow-nav .btn{margin-left:auto}
/* spec rule 7: body text 18px desktop / 17px mobile minimum. poly.css's shared
   .step .hint is 16px; override it here for the intake flow specifically
   rather than touching poly.css (owned by the foundation pass). */
.flowbox .step .hint{font-size:var(--t-body)}

/* fieldsets */
.fs{border:0;margin-top:30px;min-width:0;padding:0}
.fs legend{font-size:13px;color:var(--ink2);font-weight:500;padding:0;margin-bottom:6px}
.fs-err{display:none;color:#8c2f24;font-size:13px;margin-top:8px}
.fs[data-invalid] > .fs-err,.sys-err[data-invalid]{display:block}
.fgrid.two-narrow{grid-template-columns:repeat(2,minmax(0,1fr));max-width:440px}
.fgrid.two-narrow .f{margin-top:4px}
.ynq{margin-top:10px}
.ynq .qcard{padding:14px 16px}
.fs[data-invalid] .qcard{border-color:#8c2f24}
.qgrid.yn{grid-template-columns:repeat(2,minmax(0,1fr));max-width:440px}
.echo{display:block;font-size:14px;color:var(--ink2);margin-top:6px;min-height:1.3em}

/* account */
.oauth{display:grid;gap:10px;margin-top:22px;max-width:440px}
.oauth .btn{justify-content:center;width:100%}
.oauth-or{font-size:13px;color:var(--muted);margin-top:6px;text-align:center}
#acct-form .f{max-width:440px}
.acct-msg{margin-top:12px;color:var(--ink2);min-height:1.2em}
.acct-msg[data-bad]{color:#8c2f24}
.acct-links{display:flex;gap:20px;flex-wrap:wrap;margin-top:6px}

/* password field (#a-pass): a quiet Show/Hide text button inside the field,
   right-aligned, 44px tap target tall (matches the 48px .flowbox input) -- no
   icon library. Same pattern as /login's .pwfield (login.css), duplicated here
   since intake.html doesn't load that stylesheet. */
.pwfield{position:relative}
/* .flowbox .f input's own padding shorthand (13px 15px, set above) matches this
   selector's specificity -- .flowbox .pwfield input, not the weaker .pwfield
   input -- so this wins on source order instead of losing to it. */
.flowbox .pwfield input{padding-right:66px}
.pwtoggle{position:absolute;top:0;right:0;bottom:0;width:58px;min-height:44px;
  background:none;border:0;padding:0;margin:0;font:500 13px var(--sans);color:var(--ink2);cursor:pointer}
.pwtoggle:hover{color:var(--ink)}
.pwtoggle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:6px}

/* headcount rows */
#hc-rows{margin-top:6px}
.hc-row{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr) minmax(0,1fr) 44px;gap:0 10px;
  align-items:end;padding:4px 0 14px;border-bottom:1px solid var(--line2)}
.hc-row .f{margin-top:10px}
.hc-row .f > span{font-size:12.5px}
.iconbtn{width:44px;height:44px;border:1px solid var(--line);border-radius:7px;background:var(--paper);cursor:pointer;
  font-size:20px;line-height:1;color:var(--ink2)}
.iconbtn:hover{border-color:var(--ink);color:var(--ink)}
.iconbtn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
#hc-add{margin-top:16px}
.totals{margin-top:14px;font-size:15px;color:var(--ink2);font-variant-numeric:tabular-nums}
.totals b{font-weight:500;color:var(--ink)}
.totals .warn{display:block;color:#6b4f12;font-size:13.5px;margin-top:4px}

/* systems */
.sys-err{margin-top:14px}
.sys-cards{display:grid;gap:14px;margin-top:24px}
/* "See all tools" is 18 category cards in one column beside a ~500px left column (FB-06). This
   sits inside .intake-grid's own two-column split, so the column itself never gets wider than
   about 428px regardless of viewport (--maxw:1080px, halved, minus the flowbox's own padding) --
   a real multi-column grid here would just cram the cards, not fix anything. Capping the height
   and scrolling within the list is the fix that actually works at every width the column has.               */
#sys-cards{max-height:620px;overflow-y:auto;overflow-x:hidden;padding-right:6px}
.sys-card{background:var(--paper2);border:1px solid var(--line);border-radius:10px;padding:18px}
.sys-card h3{font:500 17px/1.3 var(--sans);letter-spacing:-.005em}
.sys-hint{font-size:14px;color:var(--muted);margin-top:4px}
.sys-card[data-unused]{background:var(--paper)}
.sys-card[data-unused] .sys-body{display:none}
.sys-card:not([data-unused]) .sys-nonemsg{display:none}
.sys-nonemsg{margin-top:10px;font-size:14px;color:var(--muted);display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.sys-card[data-picked]{border-color:var(--ink2)}
.sys-row{border-top:1px solid var(--line2);margin-top:16px;padding-top:12px}
.sys-row-head{display:flex;justify-content:space-between;align-items:center;gap:8px 14px;flex-wrap:wrap}
.sys-row-head > b{font-weight:500;font-size:15.5px}
.sys-row-head .f{margin-top:0;flex:1 1 220px;min-width:0}
.sys-row-links{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.sys-row-links .tlink{font-size:14px}
.sys-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr) minmax(0,1.2fr) minmax(0,.8fr);gap:0 10px;align-items:end}
.sys-grid .f{margin-top:10px}
.sys-grid .f > span{font-size:12.5px;line-height:1.3}
.sys-foot{display:flex;gap:20px;flex-wrap:wrap;margin-top:14px}

/* review */
.rv-sec{border-top:1px solid var(--line);margin-top:22px;padding:14px 0 0} /* padding shorthand: the marketing section{padding:80px 0} rule otherwise leaves an 80px hole under each block */
.rv-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.rv-head h3{font:500 17px/1.3 var(--sans)}
.rv-dl > div{display:grid;grid-template-columns:minmax(0,210px) minmax(0,1fr);gap:2px 18px;padding:9px 0;
  border-bottom:1px solid var(--line2);font-size:15px}
.rv-dl dt{color:var(--muted);font-size:13.5px;padding-top:1px}
.rv-dl dd{color:var(--ink);overflow-wrap:anywhere}
.rv-dl dd.missing{color:#8c2f24}
.rv-note{margin-top:16px;min-height:1.3em}
/* rv-state is usually empty (it only carries a submit-in-progress message); its reserved
   min-height otherwise leaves dead air before Submit. Collapse it when empty and set the
   review step's own nav gap to a plain 24px under the last section. */
.rv-note:empty{margin-top:0;min-height:0}
.step[data-step="7"] .flow-nav{margin-top:24px}

/* static AEO content under the flow */
.intake-info{padding:40px 0 72px;border-top:1px solid var(--line2);margin-top:56px}
.info-block{max-width:760px;padding-top:60px}
.info-block h2{font-size:clamp(26px,3.4vw,36px);font-weight:300}
.asklist{margin-top:22px;padding-left:22px;color:var(--ink2)}
.asklist li{margin-top:12px;padding-left:4px}
.asklist b{color:var(--ink);font-weight:500}
.prose-p{margin-top:16px;color:var(--ink2)}
.guidelist{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 24px;margin-top:20px}
.guidelist a{display:inline-block;padding:4px 0}
.intake-info .faq{margin-top:24px}

/* loading skeleton: grey blocks standing in for the head, stage tracker and next-step panel
   while the portal's first fetch is in flight. CSS only -- portal.js already hides #p-loading
   (setView() sets loading.hidden=true) the same way it hid the old plain-text placeholder. */
.p-skeleton{margin-top:36px}
.sk{background:var(--paper3);border-radius:8px;position:relative;overflow:hidden}
.sk-head{height:36px;max-width:340px}
.sk-tracker{height:46px;margin-top:36px;border-radius:2px}
.sk-panel{height:240px;margin-top:28px;border-radius:var(--r-card)}
.sk::after{
  content:"";position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);
  animation:ps-shimmer 1.4s ease-in-out infinite;
}
@keyframes ps-shimmer{100%{transform:translateX(100%)}}
@media (prefers-reduced-motion:reduce){.sk::after{animation:none;display:none}}

/* ---------- portal ---------- */
.portal{padding-top:40px;padding-bottom:96px}
.p-main{max-width:760px;margin:0 auto}
.p-notices{margin-bottom:22px}
.p-notices:empty{display:none}
.p-notices:empty + .p-head{margin-top:0}

/* page head: company name + status pill, centred on the h1's x-height rather than
   its full line box (align-items:center alone sits low, since a line box carries
   more room below the baseline than above; the pill's own margin-top nudges it
   back up to the cap-height midpoint). No sub-line under the h1 any more. */
.p-head h1{display:flex;align-items:center;flex-wrap:wrap;gap:12px 14px;
  font-family:var(--serif);font-weight:300;font-size:clamp(28px,5.6vw,40px);line-height:1.12;overflow-wrap:anywhere}
.p-head h1 .pill{font-family:var(--sans);margin-top:-4px}

/* stage tracker: equal segments, a 3px bar over a label + sub-line. On phone the
   .stage-list below is replaced by a compact one-line summary + segment bar
   (.stage-toggle); tapping it reveals the same .stage-list, stacked. */
.stages{margin-top:32px}
.stage-toggle{display:none}
.stage-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.stage-list{display:flex;gap:14px;overflow-x:auto;scrollbar-width:none}
.stage-list::-webkit-scrollbar{display:none}
.stage{flex:1 1 0;min-width:78px}
.stage i{display:block;height:3px;border-radius:2px;background:var(--line)}
.stage[data-state="done"] i,.stage[data-state="current"] i{background:var(--ink)}
.stage b{display:block;margin-top:10px;font-size:14px;font-weight:500;color:var(--muted);white-space:nowrap}
.stage[data-state="current"] b{color:var(--ink)}
.stage[data-state="done"] b{color:var(--ink2)}
.stage span{display:block;margin-top:2px;font-size:12.5px;color:var(--muted);min-height:1em;white-space:nowrap}

/* paperwork: two agreement rows (title/version/status + a quiet Read toggle that expands the
   body), then one form to put both in force. Sits inside .next like every other stage panel. */
.agreements{margin-top:20px;border-top:1px solid var(--line2)}
.ag-row{padding:18px 0;border-bottom:1px solid var(--line2)}
.ag-row-top{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.ag-row-main{min-width:0}
.ag-row-main b{display:block;font-weight:500;font-size:17px;line-height:1.3}
.ag-meta{display:block;margin-top:2px;font-size:13.5px;color:var(--muted)}
.ag-read{flex:none}
.ag-status{margin-top:8px;font-size:14.5px;color:var(--ink2)}
.ag-body{margin-top:12px;max-height:280px;overflow-y:auto;border:1px solid var(--line2);border-radius:8px;
  padding:14px 16px;background:var(--paper)}
.ag-body pre{white-space:pre-wrap;font:14.5px/1.55 var(--sans);color:var(--ink2);margin:0}
#pw-form{margin-top:8px}
.ag-checks{margin-top:22px;display:flex;flex-direction:column;gap:12px}
.ag-check{display:flex;align-items:flex-start;gap:10px;font-size:14.5px;color:var(--ink2);cursor:pointer}
.ag-check input{margin-top:3px;flex:none}
.ag-check:has(input:disabled){color:var(--muted);cursor:default}
#pw-err:empty{display:none}
#pw-err .notice{margin-top:14px}
.submit-reason{margin-top:8px;font-size:13.5px;color:var(--muted)}
/* Paperwork opened in place over a company past Details (FB-02): a way back to whatever panel
   was showing, and breathing room before the notice that pointed here shows up on its own. */
#pw-back{margin-bottom:16px}
#pw-notice{margin-bottom:20px}
#pw-notice .linkbtn{color:inherit}

/* next-step panel: the one thing to do or look at right now */
.next{border:1px solid var(--line);background:var(--paper2);border-radius:var(--r-card);padding:24px 28px;margin-top:22px}
.next h2{font-family:var(--serif);font-weight:300;font-size:var(--t-h3);line-height:1.2}
.next-lede{margin-top:10px;color:var(--ink2)}
.next-note{margin-top:10px;color:var(--ink2);font-size:14.5px}
.next-optional{margin-top:28px;font-size:13px;font-weight:500;color:var(--muted)}
/* one-line "why we ask" / trust microcopy: quiet, never competing with the real heading or lede */
.why-ask{margin-top:8px;font-size:14px;color:var(--muted)}
.offer-links{margin-top:16px;font-size:14px;display:flex;gap:16px;flex-wrap:wrap}

/* preliminary range (item A): a quiet band above the Details task list, and one inline line on
   the Review panel (.estimate-inline reuses .next-lede's own color/size, just the figure line). */
.estimate-band{margin-top:20px;padding-bottom:20px;border-bottom:1px solid var(--line2)}
.estimate-lbl{font-size:13px;color:var(--muted);font-weight:500}
.estimate-amt{margin-top:6px;font-family:var(--serif);font-weight:300;font-size:28px;line-height:1.15;color:var(--ink)}
.estimate-note{margin-top:8px;font-size:14px;color:var(--ink2)}
.estimate-inline{color:var(--ink2)}

/* phone re-ask on the Review panel (evidence-driven change 1): one line, not a whole task. */
.phone-ask{margin-top:18px;padding-top:18px;border-top:1px solid var(--line2)}
.phone-ask-lede{font-size:14.5px;color:var(--ink2)}
.phone-ask-row{display:flex;gap:10px;margin-top:10px;max-width:360px}
.phone-ask-row input{flex:1;min-width:0;min-height:44px;padding:10px 13px;font:15.5px var(--sans);
  color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:var(--r-ctrl)}
.phone-ask-row input:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--ink)}
.phone-ask-row .btn{flex:none}

/* "Your answers" card: #answers-body wraps what used to be the sumcard's own direct children
   (the summary line + action, or the You form while open), so it takes over their flex
   distribution within .sumcard's column layout. */
#answers-body{display:flex;flex-direction:column;flex:1;min-height:0}
#answers-body > .sum-text{flex:1 0 auto}
#answers-body > .linkbtn{margin-top:14px;align-self:flex-start}
#answers-body #you-form .f{max-width:none}
#answers-body #you-form .actions{margin-top:16px}

/* task list: whole row is a button, hairlines between, status circle + title/desc + right meta */
.tasks{margin-top:16px;border-top:1px solid var(--line2)}
.tasks-optional{margin-top:12px}
.task-row{display:flex;align-items:center;gap:14px;width:100%;padding:11px 0;border:0;border-bottom:1px solid var(--line2);
  background:none;text-align:left;cursor:pointer;font:inherit;color:inherit}
.task-row:hover .task-title{color:var(--ink)}
.task-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.task-mark{position:relative;flex:none;width:28px;height:28px;border-radius:50%;border:1px solid var(--line);background:var(--paper)}
.task-row[data-done] .task-mark{background:var(--ink);border-color:var(--ink)}
.task-row[data-done] .task-mark::after{content:"";position:absolute;left:9px;top:6px;width:6px;height:11px;
  border:solid var(--paper);border-width:0 1.6px 1.6px 0;transform:rotate(40deg)}
.task-body{flex:1;min-width:0}
.task-title{display:block;font-size:17px;font-weight:500;color:var(--ink)}
.task-desc{display:block;margin-top:2px;font-size:14px;color:var(--muted)}
.task-right{flex:none;display:flex;align-items:center;gap:8px;font-size:14px;color:var(--muted);white-space:nowrap}
.task-right .chev{font-size:18px;line-height:1;color:var(--muted)}
.next .actions{margin-top:24px}
/* The Paperwork task sits in the same task-open area as the intake steps, whose Save and
   continue is right-aligned; its Accept and continue was the one left-aligned button. */
#next-paperwork-mount .actions{justify-content:flex-end}

/* task open: quiet back link above the mounted step markup */
#next-taskopen{margin-top:2px}
#next-taskopen > .linkbtn{margin-bottom:4px}
.flowbox.ps-tasks-mode{border:0;background:transparent;padding:0;border-radius:0;margin-top:0}
.flowbox.ps-tasks-mode .flow-head{margin-bottom:16px}
.flowbox.ps-tasks-mode .flow-head .progress-n,
.flowbox.ps-tasks-mode .flow-head .progress{display:none}
.flowbox.ps-tasks-mode .step .flow-nav .flow-back{display:none}

/* secondary row: three compact summary cards, one quiet action each. Files and Teammates expand
   a full-width card under the row instead of squeezing their real forms into a third of the row.
   grid-auto-flow:dense plus the order values set in portal.js let the expand slot land right
   after the row on desktop (dense packing backfills the hole it would otherwise leave) and right
   after whichever card was tapped on phone, where the row has collapsed to one column. */
/* app.css's ".card + .card{margin-top:18px}" is written for stacked cards; neutralize it here
   since this row is a grid (the 18px gap between cards already comes from the grid's own gap). */
.secondary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin-top:28px;grid-auto-flow:row dense;align-items:stretch}
/* with the Agreements card the row holds four cards, laid out 2x2 rather than three-across */
.secondary.has-agreements{grid-template-columns:repeat(2,minmax(0,1fr))}
.secondary > .card{margin-top:0}
.secondary-note{margin-top:22px;font-size:14px;color:var(--ink2)}
.sumcard{padding:24px;display:flex;flex-direction:column;height:100%}
.sumcard[data-slot="answers"]{order:10}
.sumcard[data-slot="files"]{order:20}
.sumcard[data-slot="team"]{order:30}
.sumcard[data-slot="agreements"]{order:40}
.sumcard h3{margin:0}
.sum-text{margin-top:8px;font-size:15px;color:var(--ink2);flex:1 0 auto}
.sumcard > .linkbtn{margin-top:14px;align-self:flex-start}
.expand-card{grid-column:1/-1;padding:24px}
.expand-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:16px}
.expand-head h3{margin:0}

.offer-amt{font-family:var(--serif);font-weight:300;font-size:clamp(36px,7vw,56px);line-height:1;margin-top:14px;
  letter-spacing:-.02em;overflow-wrap:anywhere}
.kv{margin-top:16px;border-top:1px solid var(--line2)}
.kv > div{display:grid;grid-template-columns:minmax(0,140px) minmax(0,1fr);gap:2px 14px;padding:10px 0;
  border-bottom:1px solid var(--line2);font-size:15px}
.kv dt{color:var(--muted);font-size:13.5px}
.kv dd{overflow-wrap:anywhere}
.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.confirm{margin-top:16px;padding:16px;border:1px solid var(--ink);border-radius:9px;background:var(--paper)}
.confirm .f:first-child{margin-top:0}
.paystate{margin-top:16px;font-size:15px;color:var(--ink2)}
.card-foot{margin-top:16px}
.auth-card{max-width:460px;margin:34px auto 0}
.auth-card h1{margin-top:8px}
.auth-card h1 + p{margin-top:10px}
.auth-card .notice{margin-top:16px}
.auth-card .actions .btn{flex:1 1 auto;justify-content:center}
.auth-links{display:flex;gap:20px;flex-wrap:wrap;margin-top:14px}
.form-msg{margin-top:12px;font-size:14.5px;color:var(--ink2);min-height:1.2em}
.form-msg[data-bad]{color:#8c2f24}

/* uploads */
.up-controls{margin-top:6px}
.dropzone{display:block;margin-top:16px}
.dropzone:focus-within{outline:2px solid var(--accent);outline-offset:2px}
.dropzone b{font-weight:500;color:var(--ink)}
.dropzone p{font-size:14.5px;color:var(--ink2)}
.dropzone .muted{font-size:13px;margin-top:4px}
.upq{list-style:none;margin-top:14px}
.upq li{padding:10px 0;border-bottom:1px solid var(--line2);font-size:14.5px}
.upq .upq-top{display:flex;justify-content:space-between;gap:10px}
.upq .upq-name{overflow-wrap:anywhere;min-width:0}
.upq .upq-state{color:var(--muted);white-space:nowrap}
.upq li[data-s="error"] .upq-state{color:#8c2f24;white-space:normal}
.bar.indet i{width:35%;animation:ps-indet 1.1s ease-in-out infinite}
.bar.done i{width:100%}
@keyframes ps-indet{0%{transform:translateX(-110%)}100%{transform:translateX(300%)}}
@media (prefers-reduced-motion:reduce){.bar.indet i{width:100%;opacity:.45}}
.uptable{margin-top:16px}
.uptable td.name{overflow-wrap:anywhere;min-width:140px}

/* teammates */
.members{list-style:none;margin-top:12px}
.members li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line2)}
.members .who{min-width:0;overflow-wrap:anywhere}
.members .who small{display:block;color:var(--muted);font-size:13px}
.copyrow{display:flex;gap:8px;margin-top:8px}
.copyrow input{flex:1;min-width:0;padding:10px 12px;font:14px var(--sans);border:1px solid var(--line);border-radius:7px;background:var(--paper)}

@media (max-width:720px){
  .flowbox{margin-top:20px;padding:20px 16px}
  .hc-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 44px}
  .hc-row .hc-country{grid-column:1/-1}
  .sys-card{padding:16px 14px}
  .sys-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rv-dl > div{grid-template-columns:minmax(0,1fr)}
  .guidelist{grid-template-columns:repeat(2,minmax(0,1fr))}
  .linkbtn{padding:10px 0}
  .intake-info{padding-bottom:72px}
  .info-block{padding-top:48px}
  .portal{padding-top:30px;padding-bottom:72px}
  .kv > div{grid-template-columns:minmax(0,1fr)}
  .actions .btn{flex:1 1 auto;justify-content:center}
  .next{padding:22px}
  .secondary,.secondary.has-agreements{grid-template-columns:minmax(0,1fr)}
  /* phone app bar: brand left, Sign out right, nothing else -- the company name is
     already the h1 below, so the ctx label and the email both drop, and "Talk to
     Polyshares" moves down into the footer line instead of the appbar. */
  #p-ctx{display:none}
  #p-who #p-who-email{display:none}
  .talk-appbar{display:none}
  .talk-footer{display:inline}
  /* compact stage tracker: current-stage line + a 7-segment bar, replacing the
     horizontally scrolling label row; tapping it reveals the full .stage-list
     underneath, stacked instead of scrolling. */
  .stage-toggle{display:flex;flex-direction:column;gap:8px;width:100%;
    background:none;border:0;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit;text-align:left}
  .stage-toggle-line{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
  .stage-toggle-line b{font-size:15px;font-weight:500;color:var(--ink)}
  .stage-toggle-line span{font-size:13px;color:var(--muted)}
  .stage-toggle-bar{display:flex;gap:4px}
  .stage-toggle-bar i{flex:1 1 0;height:3px;border-radius:2px;background:var(--line)}
  .stage-toggle-bar i[data-state="done"],.stage-toggle-bar i[data-state="current"]{background:var(--ink)}
  .stage-list{display:none}
  .stages[data-expanded="1"] .stage-list{display:flex;flex-direction:column;gap:16px;margin-top:16px;overflow-x:visible}
  .stages[data-expanded="1"] .stage{flex:none;min-width:0}
  /* task rows: the right-hand meta text ("After the three above" is the long
     case) no longer reserves a single nowrap line's width -- at 375px that left
     too little room for the title column and wrapped "Company profile" and
     "Review and submit" onto two and three lines. Capping it and letting it wrap
     instead keeps every task title on one line, with the chevron still centred
     beside it. */
  .task-right{max-width:56px;white-space:normal;text-align:right}
}
@media (max-width:420px){
  .flowbox .flow-head{gap:10px}
}
/* ---------- sizes step (after the account) ---------- */
.size-rows{margin-top:22px}
.size-rows .sys-row{border:1px solid var(--line);border-radius:10px;padding:20px 22px 18px;margin-top:14px}
.size-rows .sys-row:first-child{margin-top:0}
/* name on the left, one quiet action on the right; the guide link lives at the foot of the card */
.size-rows .sys-row-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:nowrap}
.sys-row-name{min-width:0}
.sys-row-name b{display:block;font-weight:500;font-size:17px;line-height:1.3}
.sys-row-cat{display:block;font-size:13.5px;color:var(--muted);margin-top:2px}
.size-rows .sys-row-head .linkbtn{flex:none;padding:2px 0;line-height:1.3}
.sz-size{margin-top:18px}
.sz-lbl{display:block;font-size:13px;color:var(--ink2);font-weight:500;margin-bottom:8px}
.size-presets{display:flex;flex-wrap:wrap;gap:8px}
.chip.chip-xs{min-height:38px;padding:6px 16px;font-size:14.5px}
.sz-exact{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 12px;max-width:380px}
.sz-exact .f{margin-top:14px}
.sz-exact .f > span,.sz-meta .f > span{font-size:12.5px}
.sz-meta{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 12px;max-width:380px}
.sz-meta .f{margin-top:6px}
.sys-row-guide{margin-top:14px;font-size:14px;color:var(--muted)}
.sys-row-guide .tlink{color:var(--muted);border-color:var(--line)}
.sys-row-guide .tlink:hover{color:var(--ink);border-color:var(--accent)}
.sz-size .err{display:none;color:#8c2f24;font-size:13px;margin-top:8px}
.sz-size[data-invalid] .err{display:block}
.sz-size[data-invalid] input,.sz-size[data-invalid] select{border-color:#8c2f24}
#size-none{margin-top:18px}
#size-err{margin-top:14px}
.asklist li[aria-current]{color:var(--ink)}
.asklist li[aria-current] b{border-bottom:2px solid var(--ink)}

/* account step: contact fields first, then email + password */
#acct-contact{margin-top:4px}
#acct-form{margin-top:8px}
#acct-form .fgrid .f{max-width:none}
.oauth{margin-top:22px;max-width:none}
.oauth .btn{width:auto;justify-self:start}
.oauth-or{text-align:left}

@media (max-width:520px){
  .size-rows .sys-row{padding:14px}
}
/* step 1: the quick set first, the full category list on request. Design v2 pass: the quick
   set is now grouped chipsets (same shape as the homepage starter card), not one flat chipset,
   so the old #sys-quick.chipset / #sys-quick .chip overrides are gone -- poly.css's
   .chipset .chip rules apply the same way they do on the homepage. */
#sys-quick{margin-top:18px}
.sys-more{margin-top:16px}
.sys-cards{margin-top:18px}

/* sizes step: tile per tool, one editor open. Design brief: 3 per row desktop, 2 per row mobile. */
.sz-tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:20px}
.sz-tile{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:14px;min-height:118px;
  border:1px solid var(--line);border-radius:10px;background:var(--paper);text-align:left;cursor:pointer;font:inherit;color:var(--ink)}
.sz-tile:hover{border-color:var(--ink2)}
.sz-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sz-tile[aria-selected="true"]{border-color:var(--ink);background:var(--paper2)}
.sz-tile[data-bad]{border-color:#8c2f24}
.sz-mark{width:36px;height:36px;border-radius:9px;background:var(--paper3);color:var(--ink);display:grid;place-items:center;font:500 14px var(--sans);border:1px solid var(--line)}
.sz-tile[data-done] .sz-mark{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.sz-tname{font-weight:500;font-size:15px;line-height:1.25;overflow-wrap:anywhere}
.sz-tstate{font-size:13px;color:var(--muted);line-height:1.3;margin-top:auto}
.sz-tile[data-done] .sz-tstate{color:var(--ink2)}
.sz-editor{margin-top:14px}
.size-rows .sz-editor .sys-row{margin-top:0;background:var(--paper2)}
/* "Next tool" sits on the right of the editor's last row */
.sz-next{margin-top:18px;display:flex;justify-content:flex-end}
.sys-row-guide{margin-top:16px}
@media (max-width:720px){
  .sz-tiles{grid-template-columns:repeat(2,1fr)}
}

.asklist-after{margin-top:18px;font-size:var(--t-small);color:var(--muted);max-width:34ch}

/* time estimate under the step counter ("About a minute"); hidden inside the portal's task
   flow, which has its own progress chrome already hidden (see .ps-tasks-mode above). */
.time-est{margin-top:6px;font-size:13px;color:var(--muted)}
.flowbox.ps-tasks-mode .time-est{display:none}

/* company step: the quiet "X selected. Change" line for a homepage handoff that skipped
   step 1 straight to here. */
.handoff-line{margin-top:14px;font-size:14px;color:var(--ink2)}
.handoff-line:empty{display:none}

/* industry: 8 quick rows (poly.css .chipset .chip, same look as the systems picker) plus the
   full <select>, revealed only once "Something else" (or a non-quick value already on file)
   is active. */
.industry-other{margin-top:14px}

/* password hint ("8 characters or more") that turns into a check once the password is long
   enough; a plain circle outline until then, no icon library. The design primitives set
   display, margin, colour and font on .ps-hint at up to 0,3,0 (.ps-design.ps-intake-account
   .ps-hint), so every property here is scoped to 0,4,0 (0,5,0 when met) to win without
   !important. The hint is the positioned box the check is anchored to. */
.ps-design.ps-intake-account .pw-hint.ps-hint{position:relative;display:flex;align-items:center;gap:7px;margin-top:8px;font-size:13px;color:var(--muted)}
.ps-design.ps-intake-account .pw-hint.ps-hint::before{content:"";flex:none;width:13px;height:13px;border-radius:50%;border:1.5px solid var(--line);box-sizing:border-box}
.ps-design.ps-intake-account .pw-hint.ps-hint[data-met]{color:var(--ink2)}
.ps-design.ps-intake-account .pw-hint.ps-hint[data-met]::before{border-color:var(--ink);background:var(--ink)}
.ps-design.ps-intake-account .pw-hint.ps-hint[data-met]::after{content:"";position:absolute;left:4.5px;top:50%;margin-top:-4.5px;width:4px;height:7px;
  border:solid var(--paper);border-width:0 1.4px 1.4px 0;transform:rotate(40deg)}

/* profile step: revenue/English bands (plain .chip pills, not .chipset rows -- these are
   single-select and read like the sizes step's own size-presets) plus a quiet "Exact" toggle. */
.bandset{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.exact-toggle{margin-top:12px}
#i-revenue-exact,#i-english-exact{margin-top:14px;max-width:320px}

/* sizes step: a tile whose tool was marked "I don't know" reads as deliberately deferred, not
   as an error (that stays .sz-tile[data-bad], no longer used by an unsized tile on its own). */
.sz-tile[data-unknown]{border-style:dashed}
.sz-tile[data-unknown] .sz-mark{background:var(--paper);color:var(--muted)}

/* industry rows carry longer labels than product names: two columns, wrapping allowed */
#i-industry-quick.chipset{grid-template-columns:repeat(2,minmax(0,1fr))}
#i-industry-quick .chip{white-space:normal;line-height:1.25;padding:8px 10px}
@media (max-width:520px){#i-industry-quick.chipset{grid-template-columns:1fr}}

/* Conversion pass: every option group on the intake reads as the same control. Option cards
   (ownership, rights, physical ops) and compact band/preset chips take the homepage picker's
   cell look -- 8px radius, quiet paper fill, an 18px glyph, no black fill when selected --
   instead of a pill that turns solid ink. Radios keep a round glyph with a dot so "pick one"
   still reads as pick one. Scoped to the intake; .chip stays a pill elsewhere. */
.qcard,.ynq .qcard{
  min-height:44px;padding:0 12px;gap:10px;border-radius:8px;
  border:1px solid var(--line2);background:var(--paper2);color:var(--ink);
  font-size:14.5px;
}
.qcard:hover{background:var(--paper3);border-color:var(--line)}
.qcard[data-on]{background:var(--paper3);color:var(--ink);border-color:var(--ink2)}
.qcard:focus-within{outline:2px solid var(--accent);outline-offset:2px;border-color:transparent}
.qcard .tick{width:18px;height:18px;border:1.5px solid var(--muted);border-radius:4px;background:var(--paper2)}
.qcard[data-on] .tick{background:var(--ink);border-color:var(--ink)}
.qcard[data-on] .tick::after{left:5.5px;top:2px;width:4px;height:8px;border-color:var(--paper);border-width:0 1.6px 1.6px 0}
.qcard.radio .tick{border-radius:50%}
.qcard.radio[data-on] .tick{background:var(--paper2);border-color:var(--ink)}
.qcard.radio[data-on] .tick::after{left:3px;top:3px;width:9px;height:9px;border:0;border-radius:50%;background:var(--ink);transform:none}
.qgrid.ynq{gap:8px}
.chip.chip-xs{
  min-height:38px;padding:0 14px;border-radius:8px;
  border:1px solid var(--line2);background:var(--paper2);color:var(--ink);font-size:14px;
}
.chip.chip-xs:hover{background:var(--paper3);border-color:var(--line)}
.chip.chip-xs[data-on],.chip.chip-xs[aria-pressed="true"]{background:var(--paper3);color:var(--ink);border-color:var(--ink2);font-weight:500}
.chip.chip-xs:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-color:transparent}
/* Industry is pick-one: a round glyph with a dot, so the square-check picker above it reads
   as "tick all that apply" and this one reads as "choose one". */
#i-industry-quick .chip .check{border-radius:50%}
#i-industry-quick .chip[data-on] .check{background:var(--paper2);border-color:var(--ink)}
#i-industry-quick .chip[data-on] .check::after{content:"";position:absolute;left:3px;top:3px;width:9px;height:9px;border:0;border-radius:50%;background:var(--ink);transform:none}
/* inline step row on the centred intake (after the column rules above so it wins) */
.wrap.flow.intake .intake-top .asklist{flex-direction:row;flex-wrap:wrap;gap:8px 22px;margin-top:16px}
.wrap.flow.intake .intake-top .asklist li{align-items:center}
/* programmatic focus on headings (after a render) must not draw an input-like ring */
h1[tabindex="-1"]:focus,h2[tabindex="-1"]:focus{outline:none;box-shadow:none}

/* portal header: two locked columns. The company name takes what is left and wraps; the
   action row never drops under it (that read as a broken layout). Below 760px the
   actions move under the name, left-aligned, as a plain toolbar. */
.p-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:24px}
.p-head h1{min-width:0;font-size:clamp(26px,3.2vw,36px)}
.p-head .p-actions{display:flex;gap:8px;align-items:center;flex-wrap:nowrap;white-space:nowrap}
.p-head .p-actions .btn{min-height:36px;padding:7px 13px;font-size:13.5px;margin:0}
@media (max-width:760px){
  .p-head{grid-template-columns:1fr;row-gap:12px}
  .p-head .p-actions{flex-wrap:wrap;white-space:normal}
}
.rf-compact{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:12px}
.referrals .rf-lede{max-width:64ch}

/* ---------- ONB1-CSS: ZIP13 seller.css appendix (packet §6, append-only block) ----------
   Ports ZIP13's .szl* systems-list rows, .hc-row.hc-head captions/mobile captions and the
   intake two-column/side-card layout. Scoped under .ps-seller-intake (portal): everything
   below only ever renders inside #p-intake-view, which carries .ps-design.ps-seller-intake,
   so the live --ps-* tokens (design-tokens.css) resolve there; ZIP13's unprefixed --sp-*/
   --fs-*/--line/--muted/--ink names are mapped to their --ps-* equivalents. .hc-row.loc and
   .hc-city (location rows) are ONB-2's and are excluded, along with the two mid-file
   .hc-row.loc grid-template rules ZIP13 adds elsewhere (out of reach of an append-only block
   in any case). Recorded deviations from a byte-literal port, since intake.js/portal.js
   markup are out of this lane's scope: the Not-sure row-dimming targets the real disabled
   inputs intake.js already renders, instead of ZIP13's unused [data-unsure] row attribute;
   the szl-row grid gains a fifth 44px track for the existing remove iconbtn ZIP13's own
   on-system-shell.html prototype omits; the hc-row per-field <span> captions are hidden/
   shown purely in CSS (sr-only at desktop, a visible caption <=720px, matching packet §4.2)
   since the live markup has no sr-only class on them to key off. */
.ps-seller-intake .szl{margin-top:var(--ps-sp-5)}
.ps-seller-intake .szl-row{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) minmax(0,.7fr) auto 44px;gap:var(--ps-sp-3);align-items:center;padding:var(--ps-sp-2) 0}
.ps-seller-intake .szl-row.szl-head{padding:0 0 var(--ps-sp-2);border-bottom:1px solid var(--ps-line);margin-bottom:var(--ps-sp-2);font-size:var(--ps-fs-caption);font-weight:var(--ps-w-medium);color:var(--ps-muted)}
.ps-seller-intake .szl-row .f{margin:0;max-width:none}
.ps-seller-intake .szl-row input{width:100%}
.ps-seller-intake .szl-row .szl-unsure{justify-self:end;white-space:nowrap}
.ps-seller-intake .szl-name b{display:block;font-weight:var(--ps-w-medium);color:var(--ps-ink)}
.ps-seller-intake .szl-name span{font-size:var(--ps-fs-caption);color:var(--ps-muted)}
.ps-seller-intake .szl-row input:disabled{opacity:.45}
.ps-seller-intake .szl-add{display:flex;align-items:center;gap:var(--ps-sp-4);margin-top:var(--ps-sp-4)}
.ps-seller-intake .szl-add .f{margin:0;flex:1 1 auto;max-width:360px}
.ps-seller-intake .szl-hint{margin-top:var(--ps-sp-3);min-height:1.5em;font-size:var(--ps-fs-ui);color:var(--ps-muted)}
@media (max-width:560px){
  .ps-seller-intake .szl-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 44px}
  .ps-seller-intake .szl-name{grid-column:1/-1}
  .ps-seller-intake .szl-row .szl-unsure{grid-column:1/-1;justify-self:start}
  .ps-seller-intake .szl-row.szl-head{display:none}
}
.ps-seller-intake .hc-row.hc-head{padding:0 0 var(--ps-sp-2);border-bottom:1px solid var(--ps-line);font-size:var(--ps-fs-caption);font-weight:var(--ps-w-medium);color:var(--ps-muted);align-items:end;margin-bottom:var(--ps-sp-2)}
.ps-seller-intake #hc-rows .hc-row{padding:var(--ps-sp-2) 0;border-bottom:0}
.ps-seller-intake .hc-row .f > span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media (max-width:720px){
  .ps-seller-intake .hc-row.hc-head{display:none}
  .ps-seller-intake .hc-row .f > span{position:static;width:auto;height:auto;padding:0;margin:0 0 4px;overflow:visible;clip:auto;white-space:normal;font-size:12.5px}
}

/* intake two-column/side-card layout: ZIP13's on-system-shell.html carries this only as
   inline styles on the prototype, so there is no seller.css rule to port byte-for-byte;
   this codifies the same widths/gap as real rules matching portal.js's rendered
   .ps-intake-wrap/.ps-intake-main/.ps-intake-side markup. Side cards wrap after the main
   column at narrow widths by flex source order; no separate stacking breakpoint is needed. */
.ps-seller-intake .ps-intake-wrap{display:flex;flex-wrap:wrap;gap:var(--ps-sp-7);align-items:flex-start}
.ps-seller-intake .ps-intake-main{flex:1 1 480px;min-width:0}
.ps-seller-intake .ps-intake-side{flex:1 1 300px;max-width:380px;display:flex;flex-direction:column;gap:var(--ps-sp-5)}

/* ---------- ONB1A-REPAIR: §15 item 3, pre-account intake panel oversized ----------
   .flowbox{max-width:none} (line 31) is intentional for its portal uses (§4.2's adopted
   #flow/overview fill their own two-column layout), so it is not touched. On the pre-account
   /intake page, though, #flow is the ONLY thing inside .intake-grid's single 680px column
   (line 38) besides .intake-top, so an unbounded flowbox there just stretches to the full
   680px, 160px wider than ZIP13's own on-system.html, which pins the pre-account panel to
   max-width:520px via an inline style. Scoped to body.ps-intake-page (intake.html only, never
   present on portal.html) so the portal's own #flow/#intake-ov widths are unaffected. */
body.ps-intake-page .flowbox{max-width:520px}

/* ---------- ONB1A-REPAIR: §15 item 4, show/hide password control glitch ----------
   The toggle button sits position:absolute;top:0;right:0;bottom:0 over the input's own right
   edge (accounts-v5.css .ps-auth-password__toggle, same box as the input it overlays). As a
   positioned descendant it paints after its in-flow sibling input within their shared
   .ps-auth-password stacking context, so it visually clips the right/bottom edge of the
   input's own :focus-visible ring (design-primitives.css .ps-control:focus-visible) wherever
   the two overlap -- reproduces as a ring that stops short / has a notch next to the button.
   Move the ring to the wrapper, which sits outside both children so nothing can paint over it,
   and silence the input's own ring so only one ring ever draws. :has() scopes this to only
   when the INPUT itself holds focus, so tabbing to the toggle button still shows just its own
   existing focus-visible ring, unchanged. */
.ps-design.ps-intake-account .ps-auth-password:has(>.ps-auth-password__input:focus-visible){
  outline:2px solid var(--ps-focus-ring);outline-offset:2px;border-radius:var(--ps-radius-control)
}
.ps-design.ps-intake-account .ps-auth-password__input:focus-visible{outline:none}

/* ---------- ONB3: seller Dashboard and Teammates (SPEC-SELLER-ONB-3 §7, append-only block) ----------
   Scoped under .ps-seller-dash (#p-company-view, which carries .ps-design) and #p-team-view, so the
   live --ps-* tokens resolve. ZIP13's poly-v2.css .actpanel rules are not imported; these are the
   equivalent rules. Nothing above this block is edited. */
.ps-seller-dash .ps-dash-head{margin-bottom:var(--ps-sp-5)}
.ps-seller-dash .ps-dash-top{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:var(--ps-sp-4);align-items:stretch;margin-top:var(--ps-sp-5)}
/* the open offer detail and the paperwork panel are frozen renderers that reset #next to plain
   "next"; the Refer panel must not stretch to their height (no :has support keeps the stretch) */
.ps-seller-dash .ps-dash-top:has(> #next:not(.ps-dash-summary)){align-items:start}
.ps-seller-dash .ps-dash-top > .next{margin-top:0;min-width:0}
.ps-seller-dash .ps-dash-top > .ps-dash-summary,.ps-seller-dash .ps-dash-top > .ps-dash-ref{display:flex;flex-direction:column}
.ps-seller-dash .ps-dash-label{margin:0 0 var(--ps-sp-2);font-size:var(--ps-fs-caption);font-weight:var(--ps-w-medium);color:var(--ps-muted)}
.ps-seller-dash .ps-dash-top .ps-dash-title{margin:0;font-family:var(--ps-sans);font-weight:var(--ps-w-medium);font-size:var(--ps-fs-input);line-height:1.3;color:var(--ps-ink)}
.ps-seller-dash .ps-dash-meta{margin:var(--ps-sp-2) 0 0;max-width:62ch;font-size:var(--ps-fs-ui);line-height:1.5;color:var(--ps-ink2)}
.ps-seller-dash .ps-dash-actions{margin-top:auto;padding-top:var(--ps-sp-4);display:flex;flex-wrap:wrap;align-items:center;gap:var(--ps-sp-3)}
.ps-seller-dash [data-offer-back]{margin-bottom:var(--ps-sp-3)}
.ps-seller-dash .ps-dash-sect{margin-top:var(--ps-sp-8)}
.ps-seller-dash .ps-dash-sect-title{margin:0;font-family:var(--ps-sans);font-size:var(--ps-fs-input);font-weight:var(--ps-w-medium);color:var(--ps-ink)}
.ps-seller-dash .ps-dash-sect .stages{margin-top:var(--ps-sp-4)}
.ps-seller-dash .ps-dash-tasks{margin-top:var(--ps-sp-3)}
.ps-seller-dash .ps-task-static,#p-team-view .ps-task-static{cursor:default}
.ps-seller-dash .ps-dash-tasks > .task-row:last-child,#p-team-view .ps-team-list > .task-row:last-child{border-bottom:0}
.ps-seller-dash .ps-task-admin .task-mark{cursor:pointer}
.ps-seller-dash .ps-task-admin .task-mark::before{content:"";position:absolute;inset:-6px}
.ps-seller-dash .ps-task-admin .task-mark:focus-visible{outline:2px solid var(--ps-focus-ring);outline-offset:3px}
.ps-seller-dash .ps-task-admin .task-right .btn{min-height:40px}
#p-team-view .ps-team-list{list-style:none;margin:var(--ps-sp-4) 0 0;padding:0;border-top:1px solid var(--ps-line2)}
#p-team-view .ps-team-list .task-body{overflow-wrap:anywhere}
#p-team-view .ps-team-av{flex:none;display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--ps-paper3);border:1px solid var(--ps-line);font-size:12px;font-weight:var(--ps-w-medium);color:var(--ps-ink2)}
#p-team-view .task-right .linkbtn{min-height:40px;display:inline-flex;align-items:center;margin-left:var(--ps-sp-2)}
#p-team-view #t-form{margin-top:var(--ps-sp-6);max-width:560px}
#p-team-view #t-form h2{margin:0;font-family:var(--ps-sans);font-size:var(--ps-fs-input);font-weight:var(--ps-w-medium)}
@media (max-width:720px){
  .ps-seller-dash .task-right,#p-team-view .task-right{max-width:none}
}
@media (max-width:480px){
  .ps-seller-dash .ps-task-admin,#p-team-view .ps-team-list .task-row{flex-wrap:wrap}
  .ps-seller-dash .ps-task-admin .task-right{flex:1 0 100%;padding-left:calc(28px + 14px)}
  #p-team-view .ps-team-list .task-right{flex:1 0 100%;padding-left:calc(32px + 14px)}
  .ps-seller-dash .ps-dash-tasks .task-row:not(.ps-task-admin) .task-right{max-width:9em;white-space:normal;text-align:right}
}

/* ---------- ONB2-WEB: ZIP13 exact-entry intake fields (packet §7, append-only block) ----------
   Ports ZIP13's location rows (.hc-row.loc / .hc-city, withheld by ONB-1) and styles the ONB-2
   additions rendered by intake.js in backend mode: the ownership multi-select chips, the
   "not confirmed as exact" captions and the neutral legacy-value hints. Everything is scoped
   under .ps-seller-intake with the live --ps-* tokens, like the ONB1-CSS block above. */
.ps-seller-intake .hc-row.loc{grid-template-columns:minmax(0,1.4fr) minmax(0,1.4fr) minmax(0,.8fr) minmax(0,.8fr) 44px;gap:var(--ps-sp-3)}
.ps-seller-intake .hc-row.loc .hc-city input{width:100%;min-width:0}
@media (max-width:720px){
  .ps-seller-intake .hc-row.loc{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 44px}
  .ps-seller-intake .hc-row.loc .hc-country,.ps-seller-intake .hc-row.loc .hc-city{grid-column:1/-1}
}
.ps-seller-intake #i-ownership.chipset{grid-template-columns:repeat(2,minmax(0,1fr));max-width:440px}
.ps-seller-intake #i-ownership.chipset .chip{white-space:normal;text-align:left;line-height:1.25;min-height:44px}
@media (max-width:360px){
  .ps-seller-intake #i-ownership.chipset{grid-template-columns:minmax(0,1fr)}
}
.ps-seller-intake .szl-name .szl-src{display:block;font-size:var(--ps-fs-caption);color:var(--ps-muted)}
.ps-seller-intake #rev-hint:not([hidden]),.ps-seller-intake #en-hint:not([hidden]){display:block;margin-top:var(--ps-sp-2);font-size:var(--ps-fs-caption);line-height:1.4;color:var(--ps-muted)}

/* ---------- ZIP15: seller onboarding final (packet §6-§8, append-only block) ----------
   The ZIP15 intake module (.ps-seller-final, T2 only), the Intake destination head/side cards and
   layout, the additional-information request page, Dashboard/Teammates presentation fixes and the
   Finalize dialog (.ps-fin-gate, appended to <body> with .ps-design). Values follow ZIP15
   intake-v6.css / portal.html mapped to the live --ps-* tokens. Nothing above this block is edited. */

/* seller destinations other than Make a referral use the canon 1120 px column, left-aligned beside the
   sidebar (ONB-VQA-02, ONB3-ANNA-04); Referrals keeps its 760 px column (R5). */
.p-main:has(> .ps-seller-dash:not([hidden])),.p-main:has(> .ps-seller-intake:not([hidden])),.p-main:has(> #p-team-view:not([hidden])){max-width:1120px;margin-left:0}
/* these destinations are <section>s: the marketing section{padding:80px 0} rule put 80 px above their
   headings that the Dashboard (a div) does not have (ONB-VQA-01/02, ONB3-ANNA-02 excessive top inset) */
.ps-seller-intake,.ps-seller-request,#p-team-view{padding-top:0;padding-bottom:0}
.ps-seller-dash .ps-dash-sect{margin-top:var(--ps-sp-6);padding:0}
.ps-seller-dash .ps-dash-sect .stages{margin-top:var(--ps-sp-3)}
.ps-seller-dash #secondary:empty{display:none}
.ps-seller-dash .secondary-note{margin-top:var(--ps-sp-6)}
#p-team-view .ps-team-list{border-top:0}

/* Intake destination: head, side cards and two columns (side cards right at desktop, above at <=960) */
.ps-seller-intake .ps-view-subhead b{font-weight:var(--ps-w-medium);color:var(--ps-ink)}
.ps-seller-intake .ps-intake-z15{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--ps-sp-6);align-items:start;margin-top:var(--ps-sp-6)}
.ps-seller-intake .ps-intake-z15 > .ps-intake-main,.ps-seller-intake .ps-intake-z15 > .ps-intake-side{min-width:0;max-width:none}
.ps-seller-intake .ps-intake-z15 > .ps-intake-side{gap:var(--ps-sp-6)}
@media (min-width:961px){
  .ps-seller-intake .ps-intake-z15{grid-template-columns:minmax(0,1.7fr) minmax(0,1fr)}
  .ps-seller-intake .ps-intake-z15 > .ps-intake-main{grid-column:1;grid-row:1}
  .ps-seller-intake .ps-intake-z15 > .ps-intake-side{grid-column:2;grid-row:1;max-width:380px}
}
.ps-seller-intake .ps-intake-side > .flowbox{display:flex;flex-direction:column;margin:0}
.ps-seller-intake .ps-intake-side > .flowbox h2{margin:0;font-family:var(--ps-serif);font-weight:var(--ps-w-regular);font-size:var(--ps-t-h3);line-height:1.2;color:var(--ps-ink)}
.ps-seller-intake .ps-intake-side > .flowbox .hint{margin:var(--ps-sp-3) 0 0;max-width:none;font-size:var(--ps-fs-input);line-height:1.5;color:var(--ps-ink2)}
.ps-seller-intake .ps-card-actions{display:flex;flex-wrap:wrap;gap:var(--ps-sp-3);margin-top:var(--ps-sp-5)}
.ps-seller-intake .callcard-eyebrow,.ps-seller-request .callcard-eyebrow{margin:0 0 var(--ps-sp-2);font-size:var(--ps-fs-caption);font-weight:var(--ps-w-medium);color:var(--ps-muted)}
/* the overview is a real card on every tier (ONB-VQA-01) */
.ps-seller-intake #intake-ov > h2,.ps-seller-final .zf-ov > h2{margin:0;font-family:var(--ps-serif);font-weight:var(--ps-w-regular);font-size:var(--ps-t-h3);line-height:1.2;color:var(--ps-ink)}
.ps-seller-intake #intake-ov > .hint,.ps-seller-final .zf-ov > .hint{margin-top:var(--ps-sp-3);font-size:var(--ps-fs-input);line-height:1.5;color:var(--ps-ink2)}
.ps-seller-intake #intake-ov .flow-head,.ps-seller-final .zf-ov .flow-head{margin:var(--ps-sp-5) 0 0}
.ps-seller-intake #intake-ov .tasks,.ps-seller-final .zf-ov .tasks{margin-top:var(--ps-sp-5)}
.ps-seller-intake #intake-ov .tasks > .task-row:last-child,.ps-seller-final .zf-ov .tasks > .task-row:last-child{border-bottom:0}
/* T0/T1 Systems rows at phone widths: visible Count / Years captions and room for a 7-digit count (ONB-VQA-03) */
@media (max-width:560px){
  .ps-seller-intake .szl-row{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) 44px;row-gap:var(--ps-sp-2)}
  .ps-seller-intake .szl-row .szl-name{grid-column:1/3;grid-row:1}
  .ps-seller-intake .szl-row .szl-remove{grid-column:3;grid-row:1}
  .ps-seller-intake .szl-row .szl-count{grid-column:1;grid-row:2}
  .ps-seller-intake .szl-row .szl-years{grid-column:2/4;grid-row:2}
  .ps-seller-intake .szl-row .szl-unsure{grid-row:3}
  .ps-seller-intake .szl-row .szl-count::before,.ps-seller-intake .szl-row .szl-years::before{display:block;margin-bottom:4px;font-size:12.5px;font-weight:var(--ps-w-medium);color:var(--ps-ink2)}
  .ps-seller-intake .szl-row .szl-count::before{content:"Count"}
  .ps-seller-intake .szl-row .szl-years::before{content:"Years in use"}
  .ps-seller-intake .szl-row input{padding-left:10px;padding-right:8px}
}

/* ZIP15 intake module (T2) */
.ps-seller-final .zf-flowtop{display:flex;align-items:center;gap:var(--ps-sp-4);margin-bottom:var(--ps-sp-5)}
.ps-seller-final .zf-flowtop .savestate{margin-left:auto}
.ps-seller-final .flow-back{min-height:40px}
.ps-seller-final .zf-secnav{margin:0 0 var(--ps-sp-7)}
.ps-seller-final .zf-secnav .stage-list{display:flex;gap:var(--ps-sp-3);overflow-x:auto}
.ps-seller-final .stage{display:block;flex:1 1 0;min-width:56px;align-self:flex-start;background:none;border:0;padding:0 0 var(--ps-sp-1);text-align:left;cursor:pointer;font:inherit;color:inherit}
.ps-seller-final .stage:hover b{color:var(--ps-ink)}
.ps-seller-final .stage:focus-visible{outline:2px solid var(--ps-focus-ring);outline-offset:4px;border-radius:2px}
.ps-seller-final .zf-lbl,.ps-fin-gate .zf-lbl{display:block;margin-bottom:7px;font-size:var(--ps-fs-caption);font-weight:var(--ps-w-medium);color:var(--ps-ink2)}
.ps-seller-final .fhelp,.ps-fin-gate .fhelp{display:block;margin-top:6px;font-size:var(--ps-fs-caption);line-height:1.4;color:var(--ps-muted)}
.ps-seller-final .fs .fhelp{margin:-2px 0 8px}
.ps-seller-final .fs > .err,.ps-seller-final .zf-locs > .err{display:none}
.ps-seller-final [data-invalid] > .err,.ps-fin-gate [data-invalid] > .err{display:block;margin-top:6px;font-size:var(--ps-fs-caption);line-height:1.35;color:var(--ps-error)}
.ps-seller-final .fs[data-invalid] .qcard:not([data-on]),.ps-seller-final .fs[data-invalid] .chipset .chip:not([data-on]){border-color:var(--ps-error)}
.ps-seller-final .zf-hint{display:block;color:var(--ps-muted)}
.ps-seller-final .zf-hint:empty{display:none}
.ps-seller-final .zf-readonly input[readonly]{background:var(--ps-paper3);color:var(--ps-ink2)}
.ps-seller-final .subhead{margin-top:var(--ps-sp-8);padding-top:var(--ps-sp-6);border-top:1px solid var(--ps-line2);font:var(--ps-w-medium) 17px/1.3 var(--ps-sans);color:var(--ps-ink)}
.ps-seller-final .subhead.zf-subhead-first{margin-top:var(--ps-sp-7);padding-top:0;border-top:0}
.ps-seller-final .subhead + .hint{margin-top:6px;font-size:var(--ps-fs-control)}
.ps-seller-final .opt{font-weight:var(--ps-w-regular);color:var(--ps-muted)}
.ps-seller-final .reveal{max-width:476px;margin-top:14px;padding:2px 18px 18px;border:1px solid var(--ps-line2);border-radius:10px;background:var(--ps-paper)}
.ps-seller-final .reveal-t{margin-top:14px;font-size:var(--ps-fs-caption);color:var(--ps-muted)}
.ps-seller-final .reveal > .f:first-child,.ps-seller-final .reveal > .fs:first-child{margin-top:10px}
.ps-seller-final .f2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--ps-sp-3);max-width:440px;margin-top:var(--ps-sp-5)}
.ps-seller-final .f2 > .f{margin-top:0}
.ps-seller-final .zf-monthhelp{max-width:440px}
.ps-seller-final .f input:disabled{opacity:.5;background:var(--ps-paper3)}
.ps-seller-final .qgrid.ynq.q3{grid-template-columns:repeat(3,minmax(0,1fr));max-width:440px}
.ps-seller-final .qgrid.ynq.q2x2{grid-template-columns:repeat(2,minmax(0,1fr));max-width:440px}
.ps-seller-final .nofact{margin-top:10px}
.ps-seller-final .chip.chip-xs{min-height:40px}
.ps-seller-final .morebtn,.ps-seller-final .pickadd{margin-top:var(--ps-sp-3)}
.ps-seller-final .pickpanel{margin-top:var(--ps-sp-3);padding:var(--ps-sp-4);border:1px solid var(--ps-line);border-radius:10px;background:var(--ps-paper)}
.ps-seller-final .pickpanel .f{margin-top:0;max-width:none}
.ps-seller-final .pickres{margin-top:14px;max-height:360px;overflow-y:auto;padding-right:4px}
.ps-seller-final .pickres .chipgroup + .chipgroup{margin-top:var(--ps-sp-4)}
.ps-seller-final .pickres .chipset{grid-template-columns:repeat(2,minmax(0,1fr))}
.ps-seller-final .pickempty{display:flex;flex-wrap:wrap;gap:var(--ps-sp-3);align-items:center;margin-top:var(--ps-sp-3);font-size:var(--ps-fs-ui);color:var(--ps-muted)}
.ps-seller-final .pickhint{margin:0;font-size:13.5px;color:var(--ps-muted)}
.ps-seller-final .chip-add{border-style:dashed}
.ps-seller-final .chip-add .plus{width:16px;text-align:center;font:var(--ps-w-medium) 15px/1 var(--ps-sans)}
.ps-seller-final .chipset.two,.ps-seller-final .radioset.chipset{grid-template-columns:repeat(2,minmax(0,1fr))}
.ps-seller-final .chipset.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.ps-seller-final .radioset .chip{white-space:normal;line-height:1.25}
.ps-seller-final .radioset .chip .check{border-radius:50%}
.ps-seller-final .radioset .chip[data-on] .check{background:var(--ps-paper2);border-color:var(--ps-ink)}
.ps-seller-final .radioset .chip[data-on] .check::after{content:"";position:absolute;left:3px;top:3px;width:9px;height:9px;border:0;border-radius:50%;background:var(--ps-ink);transform:none}
.ps-seller-final .seg{gap:var(--ps-sp-2)}
.ps-seller-final .seg .chip{min-height:40px}
.ps-seller-final .also{margin-top:10px;font-size:var(--ps-fs-ui);color:var(--ps-ink2)}
.ps-seller-final .zf-locs{margin-top:var(--ps-sp-4)}
.ps-seller-final #zf-locs .hc-row{padding:var(--ps-sp-2) 0;border-bottom:0}
.ps-seller-final .hc-row .zf-cap{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.ps-seller-final .hc-row .hc-country select + .zf-cap-other + select{margin-top:var(--ps-sp-2)}
.ps-seller-final .hc-row .iconbtn:disabled{opacity:.4;cursor:not-allowed}
.ps-seller-final .zf-locs-foot{justify-content:space-between;flex-wrap:wrap}
.ps-seller-final .zf-locs-foot .totals{margin:0}
.ps-seller-final .syshead{display:flex;justify-content:space-between;align-items:baseline;gap:var(--ps-sp-3);margin-top:var(--ps-sp-5)}
.ps-seller-final .syscount{font-size:13.5px;color:var(--ps-muted)}
.ps-seller-final .syscards{display:grid;gap:10px;margin-top:14px}
.ps-seller-final .syscard{border:1px solid var(--ps-line);border-radius:10px;background:var(--ps-paper)}
.ps-seller-final .syscard[data-open]{border-color:var(--ps-ink2)}
.ps-seller-final .syscard[data-bad]:not([data-open]){border-color:var(--ps-error)}
.ps-seller-final .syscard-h{display:grid;grid-template-columns:36px minmax(0,1fr) auto 14px;gap:var(--ps-sp-3);align-items:center;width:100%;min-height:60px;padding:12px 16px;background:none;border:0;border-radius:10px;text-align:left;cursor:pointer;font:inherit;color:inherit}
.ps-seller-final .syscard-h:focus-visible{outline:2px solid var(--ps-focus-ring);outline-offset:-2px}
.ps-seller-final .sz-mark{position:relative;display:grid;place-items:center}
.ps-seller-final .sz-mark i{grid-area:1/1;font-style:normal}
.ps-seller-final .syscard .sz-mark[data-done]{background:var(--ps-ink);color:var(--ps-paper);border-color:var(--ps-ink)}
.ps-seller-final .sz-logo{background:#fff}
.ps-seller-final .sz-logo img{grid-area:1/1;width:22px;height:22px;object-fit:contain}
.ps-seller-final .sz-logo img + i{display:none}
.ps-seller-final .syscard .sz-logo[data-done]{background:#fff;border-color:var(--ps-line)}
.ps-seller-final .syscard .sz-logo[data-done]::after{content:"";position:absolute;right:-4px;bottom:-4px;width:14px;height:14px;border:2px solid var(--ps-paper);border-radius:50%;background:var(--ps-ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3 6.2l2 2 4-4.4' fill='none' stroke='white' stroke-width='1.6'/%3E%3C/svg%3E") center/10px no-repeat}
.ps-seller-final .syscard-name{min-width:0}
.ps-seller-final .syscard-name b{display:block;font-weight:var(--ps-w-medium);font-size:15.5px;line-height:1.3;overflow-wrap:anywhere}
.ps-seller-final .syscard-name span{display:block;font-size:var(--ps-fs-caption);color:var(--ps-muted)}
.ps-seller-final .syscard-meta{text-align:right;font-size:var(--ps-fs-ui);color:var(--ps-ink);white-space:nowrap;font-variant-numeric:tabular-nums}
.ps-seller-final .syscard-meta small{display:block;margin-top:2px;font-size:12.5px;color:var(--ps-muted)}
.ps-seller-final .syscard-meta small[data-bad]{color:var(--ps-error)}
.ps-seller-final .syscard-chev{font-size:18px;color:var(--ps-muted);transition:transform .15s}
.ps-seller-final .syscard[data-open] .syscard-chev{transform:rotate(90deg)}
.ps-seller-final .syscard-b{padding:2px 16px 18px;border-top:1px solid var(--ps-line2)}
.ps-seller-final .syscard-b .f{max-width:none}
.ps-seller-final .syscard-b .fs{margin-top:22px}
.ps-seller-final .sys-q legend{display:flex;align-items:center;gap:6px}
.ps-seller-final .zf-basis{margin-top:var(--ps-sp-3)}
.ps-seller-final .zf-legacy{color:var(--ps-ink2)}
.ps-seller-final .sizerow{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,180px);gap:10px}
.ps-seller-final .sizerow .f{margin-top:0}
.ps-seller-final .syscard-foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--ps-sp-3);margin-top:22px}
.ps-seller-final .syscard-foot .btn{margin-left:0}
.ps-seller-final .infotip{position:relative;display:inline-flex;vertical-align:middle;margin-left:6px}
.ps-seller-final .infotip-b{position:relative;display:inline-grid;place-items:center;width:18px;height:18px;padding:0;border:1.5px solid var(--ps-muted);border-radius:50%;background:var(--ps-paper);color:var(--ps-muted);font:italic 600 11px/1 var(--ps-serif);cursor:pointer}
.ps-seller-final .infotip-b::before{content:"";position:absolute;inset:-13px}
.ps-seller-final .infotip-b:hover,.ps-seller-final .infotip-b[aria-expanded="true"]{border-color:var(--ps-ink);color:var(--ps-ink)}
.ps-seller-final .infotip-b:focus-visible{outline:2px solid var(--ps-focus-ring);outline-offset:2px}
.ps-seller-final .infotip-p{position:absolute;top:calc(100% + 8px);left:-8px;z-index:var(--ps-z-popover);width:max-content;max-width:260px;padding:10px 12px;border:1px solid var(--ps-line);border-radius:var(--ps-radius-control);background:var(--ps-paper);font:400 13.5px/1.45 var(--ps-sans);color:var(--ps-ink2);text-align:left;white-space:normal;text-transform:none;letter-spacing:0}
.ps-seller-final .infotip[data-align="end"] .infotip-p{left:auto;right:-8px}
.ps-seller-final .infotip-p[hidden]{display:none}
.ps-seller-final .rv-sum{margin-top:var(--ps-sp-5);padding:18px 20px;border:1px solid var(--ps-line);border-radius:10px;background:var(--ps-paper)}
.ps-seller-final .rv-sum h3{font:var(--ps-w-medium) 17px/1.3 var(--ps-sans);color:var(--ps-ink)}
.ps-seller-final .rv-sum p{margin-top:6px;font-size:var(--ps-fs-control);color:var(--ps-ink2)}
.ps-seller-final .rv-miss{display:grid;gap:var(--ps-sp-3);margin-top:14px}
.ps-seller-final .rv-miss-sec > b{display:block;font-size:var(--ps-fs-caption);font-weight:var(--ps-w-medium);color:var(--ps-muted)}
.ps-seller-final .rv-miss-sec .links,.ps-seller-final .zf-rv-links{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:4px}
.ps-seller-final .fixlink{padding:2px 0;border:0;border-bottom:1px solid currentColor;border-radius:0;background:none;font:inherit;font-size:var(--ps-fs-ui);line-height:1.3;color:var(--ps-error);text-align:left;cursor:pointer}
.ps-seller-final .fixlink:hover{color:var(--ps-ink)}
.ps-seller-final .fixlink:focus-visible{outline:2px solid var(--ps-focus-ring);outline-offset:2px}
.ps-seller-final .rv-dl dd .fixlink{font-size:var(--ps-fs-control)}
.ps-seller-final .rv-head .rv-state{margin-left:auto;margin-right:14px;font-size:var(--ps-fs-caption);color:var(--ps-muted)}
.ps-seller-final .rv-head .rv-state[data-bad]{color:var(--ps-error)}
.ps-seller-final .rv-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--ps-sp-3);margin-left:auto}
.ps-seller-final .rv-actions .btn,.ps-seller-final .zf-submitted-nav .btn{margin-left:0}
.ps-seller-final .zf-submitted-nav{justify-content:flex-start;gap:var(--ps-sp-3)}
.ps-seller-final .btn[disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}
.ps-seller-final .rv-gate{margin-top:10px;text-align:right;font-size:var(--ps-fs-ui);color:var(--ps-muted)}
.ps-seller-final .rv-note:empty{display:none}
@media (max-width:720px){
  .ps-seller-final .syscard-h{grid-template-columns:36px minmax(0,1fr) 14px}
  .ps-seller-final .syscard-meta{grid-column:2/3;grid-row:2;text-align:left}
  .ps-seller-final .qgrid.ynq.q3{grid-template-columns:minmax(0,1fr)}
  .ps-seller-final .sizerow{grid-template-columns:minmax(0,1fr) minmax(0,130px)}
  .ps-seller-final .rv-actions{width:100%;margin-left:0}
  .ps-seller-final .rv-gate{text-align:left}
  .ps-seller-final .hc-row .zf-cap{position:static;width:auto;height:auto;margin:0 0 4px;overflow:visible;clip:auto;white-space:normal;display:block;font-size:12.5px;font-weight:var(--ps-w-medium);color:var(--ps-ink2)}
}
/* chip sets: three columns drop to two at <=520 px and one at <=360 px (adapted; ZIP15 keeps three) */
@media (max-width:520px){
  .ps-seller-final .chipset.three{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ps-seller-final .pickres .chipset{grid-template-columns:minmax(0,1fr)}
}
.ps-seller-final .qcard{height:auto;white-space:normal;line-height:1.25;padding-top:8px;padding-bottom:8px}
@media (max-width:400px){
  .ps-seller-final .qgrid.ynq.q2x2,.ps-seller-final .qgrid.ynq.zf-long{grid-template-columns:minmax(0,1fr)}
  .ps-seller-final .f2{grid-template-columns:minmax(0,1fr)}
  .ps-seller-final .f2 > .f + .f{margin-top:var(--ps-sp-4)}
}
@media (max-width:360px){
  .ps-seller-final .chipset.three,.ps-seller-final .chipset.two,.ps-seller-final .radioset.chipset{grid-template-columns:minmax(0,1fr)}
}

/* Additional information request page (T2): contact card first, stacked at <=960 px */
.ps-seller-request .ps-request-back{margin-bottom:var(--ps-sp-5)}
.ps-seller-request .intake-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--ps-sp-6);align-items:start;margin-top:var(--ps-sp-6)}
@media (min-width:961px){.ps-seller-request .intake-layout{grid-template-columns:minmax(0,1fr) minmax(0,1.7fr)}}
.ps-seller-request .intake-side,.ps-seller-request .intake-main{min-width:0}
.ps-seller-request .flowbox{display:flex;flex-direction:column;margin:0}
.ps-seller-request .flowbox h2{margin:0;font-family:var(--ps-serif);font-weight:var(--ps-w-regular);font-size:var(--ps-t-h3);line-height:1.2;color:var(--ps-ink);overflow-wrap:anywhere}
.ps-seller-request .flowbox .hint{margin:var(--ps-sp-3) 0 0;font-size:var(--ps-fs-input);line-height:1.5;color:var(--ps-ink2)}
.ps-seller-request .callcard .flow-nav{margin-top:var(--ps-sp-5);gap:var(--ps-sp-3)}
.ps-seller-request .callcard .flow-nav .btn{margin-left:0}
.ps-seller-request .tasks{margin-top:var(--ps-sp-5)}
.ps-seller-request .tasks > .task-row:last-child{border-bottom:0}
.ps-seller-request .task-body{overflow-wrap:anywhere}
.ps-seller-request .intake-main .small{margin-top:var(--ps-sp-5)}
@media (max-width:480px){.ps-seller-request .task-right{max-width:none;white-space:nowrap}}

/* Finalize your account info (T2): fixed scrim, 520 px card, no dismissal */
.ps-fin-gate{position:fixed;inset:0;z-index:var(--ps-z-modal);display:flex;align-items:flex-start;justify-content:center;padding:var(--ps-sp-7);overflow:auto;background:color-mix(in srgb,var(--ps-ink) 35%,transparent)}
.ps-fin-gate .gate-card{width:100%;max-width:520px;margin:auto;padding:var(--ps-sp-7);border:1px solid var(--ps-line);border-radius:12px;background:var(--ps-paper2);color:var(--ps-ink)}
.ps-fin-gate h2{margin:0;font-family:var(--ps-serif);font-weight:var(--ps-w-regular);font-size:var(--ps-t-h3);line-height:1.15;letter-spacing:-.012em}
.ps-fin-gate h2:focus{outline:none}
.ps-fin-gate .f{margin-top:var(--ps-sp-4)}
.ps-fin-gate .f input{min-height:48px;padding:13px 15px;font-size:var(--ps-fs-input);line-height:1.2}
.ps-fin-gate .actions{margin-top:var(--ps-sp-5)}
.ps-fin-gate .btn{min-height:44px}
.ps-fin-gate .form-msg:empty{display:none}
@media (max-width:720px){
  .ps-fin-gate{padding:var(--ps-sp-4)}
  .ps-fin-gate .gate-card{padding:var(--ps-sp-5)}
}

/* ---------- ZIP15 test site: T0 presentation and fidelity fixes (packet §20.5 W5-W8, append-only block) ----------
   Scoped .ps-seller-final, except the one /intake rule (W6). Nothing above this block is edited. */
/* C1 (W5): the overview button sits left, on the card's bottom line (Z15 portal.html:55, intake-v6.css:37) */
.ps-seller-final .zf-ov:not([hidden]){display:flex;flex-direction:column}
.ps-seller-final .zf-ov > .flow-nav{margin-top:auto;padding-top:var(--ps-sp-5)}
.ps-seller-final .zf-ov > .flow-nav .btn{margin-left:0}
/* C2 (W8): a section subhead sits 40 px below the question above it (Z15 intake-v6.css:7); the first one 28 px
   (Z15 intake-v6.js:241) */
.ps-seller-final .subhead{margin-top:40px}
.ps-seller-final .subhead.zf-subhead-first{margin-top:28px}
/* W8 (§20.6 side-by-side): ZIP15's poly-v2 control values. Inputs use the one control radius; option chips are
   44 px tap rows at the UI size; segmented chips stay 40 px (Z15 poly-v2.css:65,77,158, intake-v6.css:121) */
.ps-seller-final .f input,.ps-seller-final .f select,.ps-seller-final .f textarea{border-radius:var(--ps-radius-control)}
.ps-seller-final .chipset .chip{min-height:var(--ps-h-ctrl-app);font-size:var(--ps-fs-ui)}
.ps-seller-final .seg .chip{min-height:40px}
/* A3 (W6): no "About a minute" eyebrow on the public /intake page; ZIP15 has none (intake.html bytes stay) */
body.ps-intake-page #time-est{display:none}
/* W7: T0 held answers. The "Not saved yet" tag, the section note and the legacy caption read as captions. */
.ps-seller-final .zf-held{font-size:13px;font-weight:var(--ps-w-regular);color:var(--ps-muted);text-transform:none;letter-spacing:0;white-space:nowrap}
.ps-seller-final .zf-held-note{margin-top:var(--ps-sp-3);font-size:13px;line-height:1.4;color:var(--ps-muted)}
.ps-seller-final .zf-legacy0{font-size:13px;color:var(--ps-muted)}
.ps-seller-final .zf-legacy0:empty{display:none}
/* a tag can wrap one label of a two-field row: label, input and error share row tracks, so both inputs stay
   aligned whatever the label or error heights */
.ps-seller-final .f2{grid-template-rows:auto auto auto}
.ps-seller-final .f2 > .f{display:grid;grid-row:span 3;grid-template-rows:subgrid;align-content:start}
/* T0 Review: Submit is unavailable but stays focusable, so its reason is reachable (the T2 disabled look) */
.ps-seller-final .btn[aria-disabled="true"]{opacity:.45;cursor:not-allowed}

/* ---------- Lifecycle packet §21.16 (BUILD-LIFECYCLE-F3-INTAKE-WEB): the shared intake in staff-assisted mode ----------
   Append-only. Everything is scoped under .zf-assist-host, the wrapper the staff dataset record gives the form (it also
   carries .ps-design.ps-seller-intake, like the portal's #p-intake-view), so no portal screen changes. */
.zf-assist-host{padding-bottom:var(--ps-sp-6)}
.zf-assist-host .zf-assist{display:flex;flex-direction:column;gap:var(--ps-sp-4);margin-bottom:var(--ps-sp-5)}
.zf-assist-host .zf-assist-banner{margin:0;padding:12px 16px;border:1px solid var(--ps-line);border-left:3px solid var(--ps-ink);border-radius:10px;
  background:var(--ps-paper3);font-size:var(--ps-fs-control);line-height:1.45;color:var(--ps-ink);overflow-wrap:anywhere}
.zf-assist-host .zf-corr{padding:18px 20px;border:1px solid var(--ps-line);border-radius:10px;background:var(--ps-paper)}
.zf-assist-host .zf-corr h3{margin:0;font:var(--ps-w-medium) 17px/1.3 var(--ps-sans);color:var(--ps-ink)}
.zf-assist-host .zf-corr > .hint{margin-top:6px;max-width:none;font-size:var(--ps-fs-control);line-height:1.45;color:var(--ps-ink2)}
.zf-assist-host .zf-corr-list{list-style:none;margin:var(--ps-sp-4) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--ps-sp-5)}
.zf-assist-host .zf-corr-item{display:grid;grid-template-columns:28px minmax(0,1fr);gap:0 12px;align-items:start}
.zf-assist-host .zf-corr-item .cn{display:grid;place-items:center;width:28px;height:28px;border:1px solid var(--ps-line);border-radius:50%;
  background:var(--ps-paper2);font-size:13px;font-weight:var(--ps-w-medium);color:var(--ps-ink)}
.zf-assist-host .zf-corr-b{min-width:0}
.zf-assist-host .zf-corr-t{margin:3px 0 0;font-size:var(--ps-fs-control);line-height:1.45;color:var(--ps-ink);overflow-wrap:anywhere}
.zf-assist-host .zf-corr-b > .linkbtn{display:inline-flex;align-items:center;min-height:44px;padding:0;text-align:left}
.zf-assist-host .zf-corr-b > .fhelp{margin-top:6px}
.zf-assist-host .zf-corr-b .f{max-width:none;margin-top:var(--ps-sp-2)}
.zf-assist-host .zf-corr-msg{margin-top:var(--ps-sp-4);font-size:var(--ps-fs-ui);color:var(--ps-ink2)}
.zf-assist-host .zf-corr-msg:empty{display:none}
.zf-assist-host .zf-corr-foot{margin-top:var(--ps-sp-4)}
.zf-assist-host .zf-corr-foot .btn{min-height:44px}
.zf-assist-host .zf-corr-foot .fhelp{margin-top:var(--ps-sp-3)}
/* Save sits after the save state; a long stale or lost-access line wraps onto its own row */
.zf-assist-host .zf-flowtop{flex-wrap:wrap}
.zf-assist-host .zf-savenow{min-height:44px}
.zf-assist-host .savestate[data-s="stale"],.zf-assist-host .savestate[data-s="denied"]{display:block;flex-basis:100%;order:3;white-space:normal;color:#8c2f24}
.zf-assist-host .zf-ov .savestate[data-s="stale"],.zf-assist-host .zf-ov .savestate[data-s="denied"]{margin-top:var(--ps-sp-3)}
.zf-assist-host .savestate[data-s="stale"] .linkbtn{font-size:12.5px;padding:0;min-height:44px;border-bottom-color:#8c2f24}
.zf-assist-host .zf-contact-help{margin-top:var(--ps-sp-3)}
.zf-assist-host .zf-none{color:var(--ps-muted)}

/* ---------- Lifecycle packet §33.4 W3: the seller-mode "Changes requested" panel above the
   overview, in .ps-seller-final (not .zf-assist-host -- that scope is the staff-assisted form's own
   corrections panel, a different, staff-only UI). Read-only: no inputs, no save button. ---------- */
.ps-seller-final .zf-corr{padding:18px 20px;border:1px solid var(--ps-line);border-radius:10px;background:var(--ps-paper);margin-bottom:var(--ps-sp-5)}
.ps-seller-final .zf-corr h2{margin:0;font:var(--ps-w-medium) 17px/1.3 var(--ps-sans);color:var(--ps-ink)}
.ps-seller-final .zf-corr > .hint{margin-top:6px;max-width:none;font-size:var(--ps-fs-control);line-height:1.45;color:var(--ps-ink2)}
.ps-seller-final .zf-corr-list{list-style:none;margin:var(--ps-sp-4) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--ps-sp-5)}
.ps-seller-final .zf-corr-item{display:grid;grid-template-columns:28px minmax(0,1fr);gap:0 12px;align-items:start}
.ps-seller-final .zf-corr-item .cn{display:grid;place-items:center;width:28px;height:28px;border:1px solid var(--ps-line);border-radius:50%;
  background:var(--ps-paper2);font-size:13px;font-weight:var(--ps-w-medium);color:var(--ps-ink)}
.ps-seller-final .zf-corr-b{min-width:0}
.ps-seller-final .zf-corr-t{margin:3px 0 0;font-size:var(--ps-fs-control);line-height:1.45;color:var(--ps-ink);overflow-wrap:anywhere}
.ps-seller-final .zf-corr-b > .linkbtn{display:inline-flex;align-items:center;min-height:44px;padding:0;text-align:left}
