/* Prototype adapter. Production owns the portal cascade in client-portal-assets. */
/* The new style (CP-095): Geist for reading and controls, Instrument Serif for page titles and figures,
   both served by the portal itself (the portal's CSP allows only its own origin). OFL, see fonts-OFL.txt. */
@font-face{font-family:'Geist Portal';src:url('/client-portal-assets/geist.woff2') format('woff2');font-weight:100 900;font-display:swap}
@font-face{font-family:'Instrument Serif Portal';src:url('/client-portal-assets/instrument-serif.woff2') format('woff2');font-weight:400;font-display:swap}
@layer base{
  *,::before,::after{box-sizing:border-box;border-width:0;border-style:solid}
  body,h1,h2,h3,p,ul,ol,dl,dd,fieldset{margin:0}ul,ol{list-style:none;padding:0}fieldset,legend{padding:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:transparent}a{color:inherit;text-decoration:none}img,svg{display:block;max-width:100%}h1,h2,h3{font:inherit}
}
:root{--font-ui-sans:'Geist Portal';--font-mono:ui-monospace,Consolas,monospace;--proto-focus:#2D5277}
html{font-size:100%}body{font-family:var(--font-ui-sans),sans-serif;font-size:var(--type-base);line-height:var(--leading-read);color:var(--ink)}
body :is(a,button,input,select,textarea,summary):focus-visible{outline:3px solid var(--proto-focus);outline-offset:3px}a{text-underline-offset:.2em}button:disabled{cursor:wait;opacity:.6}
.skip{position:fixed;left:var(--space-lg);top:-100px;z-index:100;background:var(--surface);padding:var(--space-md);color:var(--ink)}.skip:focus-visible{top:var(--space-lg)}
/* Native equivalents of the Tailwind utilities used by the production shell. */
.portal-content>main{min-width:0;flex:1}.portal-page{overflow-wrap:anywhere}
.proto-sidebar-caption{display:block;color:var(--ink-3);font-size:var(--type-sm);margin-top:var(--space-2xs);overflow-wrap:anywhere}
.proto-preview-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-xs) var(--space-xl);border-bottom:1px solid var(--border);color:var(--ink-2);background:var(--accent-soft);font-size:var(--type-sm)}.proto-preview-bar strong{margin-right:auto}.proto-preview-bar a{text-decoration:underline;min-height:28px;display:inline-flex;align-items:center}
.portal-overview-register-copy{min-width:0}.proto-request-list>li{position:relative}.proto-request-list details{margin-top:var(--space-xs);color:var(--ink-2);font-size:var(--type-sm)}.proto-request-list summary{display:flex;align-items:center;min-height:var(--control-height);cursor:pointer;text-decoration:underline;text-underline-offset:.2em}.proto-request-list details ul{padding:var(--space-xs) var(--space-lg);list-style:disc}.proto-request-list details li{display:list-item;min-height:0;padding:var(--space-2xs) 0;background:none;border:0;transform:none;box-shadow:none}.proto-request-list .portal-overview-register-copy small{white-space:normal;overflow:visible}.proto-request-list p{margin-top:var(--space-xs);font-size:var(--type-sm);color:var(--ink-2)}
.request-action{min-width:0}.proto-next-mark{color:var(--ink-3);white-space:nowrap}.proto-status{font-size:var(--type-sm);color:var(--ink-2)}.proto-status[data-state=done]{color:var(--forest-green)}.proto-status[data-state=needed]{color:var(--terra)}
.portal-overview-row-action{gap:var(--space-sm);white-space:normal;justify-content:center;text-align:center}
/* Every action button has the same minimum width, so buttons line up and match whatever the label says (CP-033). */
.portal-overview-row-action{min-width:var(--row-action-width)}.upload{position:relative;cursor:pointer;min-height:var(--control-height)}.upload input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.upload:focus-within{outline:3px solid var(--proto-focus);outline-offset:3px}.upload:has(input:disabled){opacity:.6;cursor:wait}
.proto-panel-stack{display:grid;gap:var(--space-lg)}.proto-panel-note,.proto-panel-body{padding:var(--panel-inset);color:var(--ink-2)}.proto-panel-foot{padding:var(--space-md) var(--panel-inset);border-top:1px solid var(--border)}.proto-panel-foot a{display:inline-flex}.proto-panel-foot a span:last-child{margin-left:var(--space-sm)}
.proto-clear-state{min-height:140px;display:flex;align-items:center;padding:var(--space-xl)}.proto-clear-state h2{font-size:var(--type-lg);font-weight:650;color:var(--ink)}
.proto-people{padding:var(--space-sm) var(--panel-inset)}.proto-people li{padding:var(--space-sm) 0;border-bottom:1px solid var(--border);font-size:var(--type-sm)}.proto-people li:last-child{border-bottom:0}.contact-details{padding:0 var(--panel-inset)}.contact-details>div{display:grid;grid-template-columns:minmax(110px,1fr) minmax(0,3fr);gap:var(--space-lg);padding:var(--space-lg) 0;border-bottom:1px solid var(--border)}.contact-details>div:last-child{border-bottom:0}.contact-details dt{color:var(--ink-2)}.contact-details dd{overflow-wrap:anywhere}
.settings-heading{flex-wrap:wrap}.settings-heading>div{display:flex;gap:var(--space-sm);flex-wrap:wrap}.settings-heading~.proto-panel-body{margin-top:var(--space-lg)}.proto-panel-body h2:not(.portal-overview-section-title>h2),.proto-panel-body legend{font-size:var(--type-lg);font-weight:700;color:var(--ink)}#visibility{display:grid;gap:var(--space-lg);margin-top:var(--space-lg)}#visibility fieldset{min-width:0}.check{display:flex;align-items:center;gap:var(--space-md);min-height:var(--control-height);padding:var(--space-xs) 0}.check input{appearance:auto;width:18px;height:18px;flex-shrink:0;accent-color:var(--accent)}.settings-heading button{min-height:var(--control-height);background:var(--accent);color:var(--on-accent);padding:var(--space-sm) var(--space-md);font-weight:650}.people{margin-top:var(--space-sm)}.people li{padding:var(--space-xs) 0}
.notice,#upload-status:not(:empty){padding:var(--space-lg);border:1px solid var(--accent);background:var(--accent-soft);margin-bottom:var(--space-lg)}#upload-status[data-error]{border-color:var(--terra)}
.proto-profile-intro{color:var(--ink-2);margin-bottom:var(--space-xl);max-width:70ch}.proto-profile-title{flex-wrap:wrap;gap:var(--space-md)}.proto-profile-title p{font-size:var(--type-sm);color:var(--ink-2);margin-top:var(--space-xs)}.proto-profile-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.proto-profile-grid>section{min-width:0}.proto-profile-grid h3{padding:var(--panel-inset) var(--panel-inset) 0;font-weight:650}.proto-profile-grid .contact-details>div{grid-template-columns:minmax(0,1fr) minmax(0,1.7fr);padding:var(--space-md) 0;gap:var(--space-md)}.proto-profile-employment{grid-column:1/-1;border-top:1px solid var(--border)}.proto-employment{padding:var(--space-md) var(--panel-inset);display:grid;gap:var(--space-md)}.proto-employment li{display:grid;gap:var(--space-2xs)}.proto-employment span,.proto-employment small{color:var(--ink-2)}.proto-employment small{font-size:var(--type-sm)}.proto-past-jobs{padding:0 var(--panel-inset) var(--space-md)}.proto-past-jobs summary{min-height:var(--control-height);align-content:center;cursor:pointer;text-decoration:underline}.proto-past-jobs .proto-employment{padding-left:0}.proto-update-status{padding:var(--space-md) var(--panel-inset);background:var(--accent-soft);color:var(--ink);font-size:var(--type-sm);border-bottom:1px solid var(--border)}
.proto-profile-form{display:grid;gap:var(--space-lg)}.proto-profile-fieldset{min-width:0;padding:var(--panel-inset)}.proto-profile-fieldset legend{font-size:var(--type-lg);font-weight:650;padding:0 var(--space-sm)}.proto-profile-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-lg)}.proto-profile-field{display:grid;gap:var(--space-xs);min-width:0}.proto-profile-field label,.proto-profile-other>label{font-weight:600}.proto-profile-form :is(input:not([type=checkbox]):not([type=hidden]),select,textarea){display:block;width:100%;min-width:0;min-height:var(--control-height);padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink)}.proto-profile-form textarea{resize:vertical}.proto-profile-form .check{margin:var(--space-md) 0}.proto-profile-form .notice{margin:0}.proto-profile-form .notice a{text-decoration:underline;display:inline-flex;min-height:var(--control-height);align-items:center}.proto-profile-actions{display:flex;gap:var(--space-md);flex-wrap:wrap}.proto-profile-other{padding:var(--panel-inset)}.proto-profile-other h2{font-size:var(--type-lg);font-weight:650}.proto-profile-other .proto-employment{padding-left:0;padding-right:0}.proto-profile-other>label{display:block;margin-top:var(--space-lg)}.proto-profile-other>p{color:var(--ink-2);margin:var(--space-xs) 0 var(--space-md);max-width:75ch}
@media(max-width:700px){.proto-profile-grid,.proto-profile-fields{grid-template-columns:minmax(0,1fr)}.proto-profile-grid>section+section{border-top:1px solid var(--border)}.proto-profile-grid .contact-details>div{grid-template-columns:minmax(0,1fr);gap:var(--space-xs)}}
@media(max-width:450px){.portal-page-head{flex-wrap:wrap}.portal-page-head-meta{max-width:none;text-align:left}.proto-preview-bar{padding:var(--space-xs) var(--space-lg)}.proto-preview-bar strong{flex-basis:100%}.contact-details>div{grid-template-columns:minmax(0,1fr);gap:var(--space-xs)}.portal-overview-context{max-width:none}.portal-overview-row-action{max-width:100%}}
@media(prefers-reduced-motion:reduce){.portal-skin *,.portal-skin *::before,.portal-skin *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media print{.portal-sidebar,.proto-preview-bar,.proto-mobile-tabs{display:none}.portal-shell{display:block}.portal-shell-main{padding:0}.portal-workspace{padding:0}.portal-overview-panel{break-inside:avoid}}

.proto-request-history>summary{cursor:pointer;min-height:var(--control-height);padding:var(--space-lg);font-weight:650}.proto-request-list>li>a{flex-shrink:0}

.portal-person-links{display:flex;flex-wrap:wrap;gap:var(--space-xl);padding:var(--space-md) var(--space-2xl);border-bottom:1px solid var(--border);background:var(--surface)}.portal-person-links a{display:inline-flex;align-items:center;min-height:var(--space-2xl);font-size:var(--type-md);font-weight:600;color:var(--deep-blue)}.proto-preview-bar form{margin:0}.proto-preview-bar form button{font:inherit;min-height:var(--space-2xl);padding:var(--space-2xs) var(--space-sm)}.portal-household-choices{list-style:none;padding:0;display:grid;gap:12px}.portal-household-choices a{display:block;padding:var(--space-lg);border:1px solid var(--border);color:var(--deep-blue)}@media(max-width:600px){.portal-person-links{padding:var(--space-sm) var(--space-lg);gap:var(--space-lg)}}

.portal-person-links{flex-wrap:wrap}
.proto-question-message{min-width:0;overflow-wrap:anywhere}
.proto-question-context>h2{margin-bottom:var(--space-md)}
.proto-new-reply{color:var(--deep-blue);font-weight:700}
.portal-overview-register-copy>.proto-new-reply,.request-row-actions>.proto-new-reply,.request-row>.proto-new-reply{display:inline-block;margin-top:var(--space-3xs);padding:0 var(--space-xs);border-radius:999px;background:color-mix(in srgb,var(--terra) 13%,var(--surface));color:var(--terra);font-size:var(--type-sm);line-height:1.5}
.proto-reply-receipt{display:block;min-height:1px}
.proto-question-filters{display:flex;flex-wrap:wrap;align-items:end;gap:var(--space-md);margin-bottom:var(--space-lg)}
.proto-question-filters>div{display:grid;gap:var(--space-xs);min-width:8rem;flex:1 1 9rem}
.proto-question-filters>div:first-child{flex:2 1 16rem;min-width:12rem}
.proto-question-filters :is(input,select){width:100%;min-width:0;min-height:var(--control-height);padding:var(--space-sm);color:var(--ink);background:var(--surface);border:1px solid var(--border)}
.proto-question-paging{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);margin-top:var(--space-lg)}
.proto-question-workspace{max-width:52rem;min-width:0}
.proto-question-workspace .proto-profile-form :is(input,textarea){font-size:1rem;line-height:1.5}
.proto-question-workspace .proto-profile-form label{display:block;font-weight:650;margin:var(--space-lg) 0 var(--space-sm)}
.proto-question-workspace .proto-profile-form label:first-child{margin-top:0}
.proto-question-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-md);margin-top:var(--space-lg)}
.proto-question-actions>span{color:var(--ink-2);font-size:var(--type-sm)}
.proto-question-message{overflow-wrap:anywhere;line-height:1.65}
.proto-question-reference{margin-top:var(--space-md)}
.proto-question-reference summary{cursor:pointer;min-height:var(--control-height);align-content:center;color:var(--ink-2)}
.proto-document-intro{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-lg);margin-bottom:var(--space-sm);color:var(--ink-2)}
.proto-document-intro>p{flex:1 1 22rem;min-width:0}
.proto-document-help{font-size:var(--type-sm);color:var(--ink-3);max-width:75ch;margin-top:var(--space-md)}
.proto-document-title{display:inline-flex;align-items:center;min-height:var(--control-height);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:.2em}
.proto-document-title:hover{text-decoration-color:currentColor}
/* In a list row the whole row opens the item, so its title reads as the row's name, not a link of its own (take 1). */
.portal-overview-register-copy>strong>.proto-document-title{display:inline;min-height:0;color:var(--ink);font-size:14px;font-weight:500;line-height:1.3;text-decoration:none}
.proto-request-counts{display:flex;flex-wrap:nowrap;gap:var(--space-xs);overflow-x:auto;scrollbar-width:none;margin-bottom:var(--space-md)}.proto-request-counts>a{flex:none;display:inline-flex;align-items:center;min-height:36px;padding:0 var(--space-md);border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--ink-2);font-size:var(--type-sm);font-weight:650;text-decoration:none}.proto-request-counts>a[aria-current=page]{border-color:var(--ink);background:var(--ink);color:var(--surface)}
.proto-plan-sharing{margin-top:var(--space-lg);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:0}.proto-plan-sharing legend{padding:0 var(--space-xs);font-weight:650}.proto-plan-sharing fieldset{margin:var(--space-md) 0}.proto-plan-sharing summary{min-height:var(--control-height);align-content:center;cursor:pointer}.proto-plan-sharing p{color:var(--ink-2)}
.proto-plan-request-link{display:flex!important;font-size:var(--type-sm);text-decoration:underline;color:var(--deep-blue);margin-top:var(--space-xs)}.proto-plan-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-lg)}.proto-plan-sharing>summary{font-weight:650}.proto-plan-sharing :is(select,input){max-width:100%}.proto-plan-record [id^="fact-"]{scroll-margin-top:var(--space-xl)}.proto-plan-record [id^="fact-"]:target{background:var(--accent-soft)}
@media(max-width:700px){.proto-plan-options{grid-template-columns:minmax(0,1fr)}}
/* The Plan (CP-077, Take A): cards of figures, then the record page with its figure first. */
.proto-plan-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-lg);align-items:start}
.proto-plan-card>.pcard-head{padding-block:var(--space-md)}.proto-plan-sub{margin:var(--space-2xs) 0 0;color:var(--ink-3)}
.proto-plan-rows{list-style:none;margin:0;padding:0}
.proto-plan-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-3xs) var(--space-lg);padding:var(--space-md) var(--panel-inset);border-bottom:1px solid var(--border);color:var(--ink);text-decoration:none}
.proto-plan-rows>li:last-child>.proto-plan-row{border-bottom:0}.proto-plan-row:hover{background:var(--accent-soft)}.proto-plan-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.proto-plan-row-name{min-width:0;font-weight:650;color:var(--accent);overflow-wrap:anywhere}
.proto-plan-row-figure{font-weight:650;color:var(--ink);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.proto-plan-row-figure small{display:block;font-size:var(--type-sm);font-weight:400;color:var(--ink-3)}
.proto-plan-row-sub,.proto-plan-row-when{font-size:var(--type-sm);color:var(--ink-3)}.proto-plan-row-sub{min-width:0;overflow-wrap:anywhere}.proto-plan-row-when{text-align:right;white-space:nowrap}
.proto-plan-chip{display:inline-block;padding:0 var(--space-sm);border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:var(--type-sm);font-weight:600;color:var(--ink-2)}
.proto-plan-read{color:var(--accent)}
.proto-plan-waiting{border-left:4px solid var(--terra)}
.proto-plan-total{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-lg);padding:var(--space-md) var(--panel-inset);border-top:1px solid var(--border-strong);font-weight:650;font-variant-numeric:tabular-nums}.proto-plan-total small{font-weight:400;color:var(--ink-3)}
.proto-plan-more{border-top:1px solid var(--border)}.proto-plan-more>summary{min-height:var(--control-height);align-content:center;padding:0 var(--panel-inset);color:var(--accent);font-size:var(--type-sm);font-weight:600;cursor:pointer}
.proto-plan-clear{align-self:center;color:var(--accent);font-weight:600}
.proto-plan-figure{display:grid;gap:var(--space-2xs);padding:var(--space-xl) var(--panel-inset);border-bottom:1px solid var(--border)}
.proto-plan-figure strong{font-size:calc(var(--type-2xl) * 1.6);font-weight:700;line-height:1.1;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.proto-plan-figure span{color:var(--ink-3)}
.proto-plan-facts{display:grid;grid-template-columns:minmax(8rem,14rem) minmax(0,1fr);margin:0}.proto-plan-facts>div{display:contents}
.proto-plan-facts dt,.proto-plan-facts dd{margin:0;padding:var(--space-md) var(--panel-inset);border-bottom:1px solid var(--border)}.proto-plan-facts dt{color:var(--ink-3)}.proto-plan-facts dd{min-width:0;overflow-wrap:anywhere}
.proto-plan-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-lg) var(--panel-inset)}
@media(max-width:860px){.proto-plan-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:560px){.proto-plan-figure strong{font-size:calc(var(--type-2xl) * 1.33)}.proto-plan-facts{grid-template-columns:minmax(0,1fr)}.proto-plan-facts dt{padding-bottom:0;border-bottom:0}.proto-plan-facts dd{padding-top:var(--space-2xs)}}
/* Six tabs at a fixed 64px each need 384px, so a 375px phone cut the last
   label in half. Each tab takes the width its own label needs and shares what is
   left over; the scroller stays as the guard for a narrower phone or a seventh tab. */
/* One questionnaire surface for client delivery and staff preview. */
.proto-form-choice{min-width:0;border:0;margin:0;padding:0}
.proto-form-choice legend{font-weight:600;line-height:1.6;margin-bottom:var(--space-sm);padding:0}
.proto-form-choice legend small{font-size:var(--type-sm);font-weight:400;color:var(--ink-2)}
.proto-form-options{display:grid;gap:var(--space-sm)}
.proto-form-choice .proto-form-option{display:flex;align-items:flex-start;gap:var(--space-md);min-height:48px;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;font-weight:400;line-height:1.5}
.proto-form-option:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}
.proto-form-option:focus-within{outline:2px solid var(--proto-focus);outline-offset:2px}
.proto-form-option span{min-width:0;overflow-wrap:anywhere}
.proto-form-choice .proto-form-option input[type=radio]{appearance:auto;display:inline-block;flex:none;width:18px;height:18px;min-width:18px;min-height:18px;padding:0;margin:3px 0 0;border:0;border-radius:50%;background:transparent;accent-color:var(--accent)}
.portal-page-head>div+div{display:flex;gap:var(--space-sm);flex-wrap:wrap;align-items:center}
/* The return as one timeline (CP-076): a dot per stop on a rail drawn stop to stop, so it ends at the
   last one and the finished part is the accent; a card per stop. A finished stop folds to one line, the
   current one stands open with what it needs, a later one is outlined. */
.season-stop-card .season-line,.season-stop-card .season-note{margin:0}
/* An open return on Taxes: its title, its road, its own sentence and the one thing to do (CP-076). */
.season-now{display:grid;gap:var(--space-sm)}
.season-now .season-line,.season-now .season-note{margin:0}
.season-now .season-actions{margin-top:var(--space-xs)}
.season-now .portal-overview-section-title h2 a{color:inherit}.season-now .portal-overview-section-title h2 a:hover{text-decoration:underline}
/* Compact cards (CP-076: the picked Taxes mockups, T1 and T2): a small header with an optional note,
   then rows or a body. Horizontal inset from --panel-inset only. */
.pcard{min-width:0;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg)}
.pcard.is-now{border-color:var(--accent)}.pcard.is-now>.pcard-head{background:var(--accent-soft)}
.pcard-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-md);padding:var(--space-md) var(--panel-inset) var(--space-sm)}
.pcard-head h2{margin:0;font-size:14.5px;font-weight:600;line-height:1.3;color:var(--ink)}.pcard-head h2 a{color:inherit;text-decoration:none}.pcard-head h2 a:hover{text-decoration:underline}
.pcard-head small{font-size:var(--type-sm);color:var(--ink-3);text-align:right}
.pcard-body{margin:0;padding:var(--space-md) var(--panel-inset)}
.pcard-rows{list-style:none;margin:0;padding:0}
.pcard-rows>li{display:flex;align-items:center;gap:var(--space-md);min-height:56px;padding:var(--space-sm) var(--panel-inset);border-top:1px solid var(--line-soft);min-width:0}
.pcard-head+.pcard-rows>li:first-child{border-top:1px solid var(--line-soft)}.pcard-rows:first-child>li:first-child{border-top:0}
.pcard-rows>li>.portal-overview-register-copy{flex:1;min-width:0}
.pcard-rows .portal-overview-register-copy small{display:block;font-size:var(--type-sm);color:var(--ink-3);white-space:normal;overflow:visible}
.pcard-rows .request-row-actions{flex:none;justify-self:auto}
.pchip{display:inline-block;padding:0 var(--space-sm);border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--ink-2);font-size:var(--type-sm);font-weight:600;line-height:1.6;white-space:nowrap}
.pchip[data-state=done]{background:var(--forest-green-soft);color:var(--forest-green);border-color:transparent}
.pchip[data-state=now]{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.pcard .proto-status[data-state=needed]{display:inline-block;padding:0 var(--space-sm);border-radius:999px;background:var(--angelus-red-soft);color:var(--terra);font-weight:600;line-height:1.6;white-space:nowrap}
/* T1: the open return first, its track in one line, the next step as its button. */
.tx-now{display:flex;align-items:center;gap:var(--space-lg)}
.tx-now-copy{flex:1;min-width:0;display:grid;gap:var(--space-2xs)}
.tx-now-copy .season-note{margin:0;font-size:var(--type-sm)}
.tx-line{margin:var(--space-xs) 0 0;font-size:var(--type-lg);font-weight:600;color:var(--ink);line-height:1.3}
.tx-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);flex:none}
/* T2: the open stop says what it is for and shows its two figures side by side. */
.tx-what{margin:0;color:var(--ink-2);font-size:var(--type-base)}
.tx-figs{display:flex;flex-wrap:wrap;gap:var(--space-sm) var(--space-2xl);margin:var(--space-2xs) 0 var(--space-xs)}
.tx-figs>div{display:grid}.tx-figs small{font-size:var(--type-sm);color:var(--ink-3)}
.tx-figs b{font-size:var(--type-xl);font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink);line-height:1.2}
.tx-read{font-size:var(--type-sm);font-weight:600;color:var(--accent);white-space:nowrap}
.tx-phone-only{display:none!important}
.season-page .season-stop-card>.tx-actions,.season-page .season-stop-card .season-moment{margin-top:var(--space-xs)}
.season-page .season-moment::before{display:none}
.season-page .season-moment .season-big{font-size:32px}
.season-page .doorway-actions{margin-top:0}
@media(max-width:560px){
 .tx-now{flex-direction:column;align-items:stretch}.tx-now .tx-actions>*{flex:1}
 /* One action stays beside the words; only a row with two actions puts them under (CP-095). */
 .pcard-rows>li:has(.request-row-actions>.portal-overview-row-action~.portal-overview-row-action){flex-wrap:wrap}.pcard-rows>li:has(.request-row-actions>.portal-overview-row-action~.portal-overview-row-action)>.portal-overview-register-copy{flex-basis:100%}.pcard-rows .request-row-actions{margin-left:auto}
 .portal-page-head .tx-head-actions{display:none}
 .tx-phone-only{display:inline-flex!important}
 .tx-figs{gap:var(--space-xs) var(--space-lg)}.tx-figs b{font-size:var(--type-lg)}
}
.season-road{list-style:none;margin:0;padding:var(--space-sm) 0 0;display:grid;grid-template-columns:repeat(5,1fr);position:relative}
.season-road::before,.season-road::after{content:"";position:absolute;left:10%;top:calc(var(--space-sm) + 8px);height:2px;border-radius:2px}
.season-road::before{right:10%;background:var(--border)}
.season-road::after{width:0;background:var(--forest-green);transition:width .6s ease}
.season-road[data-position="1"]::after{width:20%}.season-road[data-position="2"]::after{width:40%}.season-road[data-position="3"]::after{width:60%}.season-road[data-position="4"]::after{width:80%}
.season-road li{display:grid;justify-items:center;gap:var(--space-xs);font-size:var(--type-sm);color:var(--ink-2);position:relative}
.season-road li i{width:18px;height:18px;border-radius:50%;background:var(--surface);border:2px solid var(--border);position:relative;z-index:1;transition:background .3s,border-color .3s,box-shadow .3s}
.season-road li.is-done i{background:var(--forest-green);border-color:var(--forest-green)}
.season-road li.is-current i{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.season-road li.is-current{color:var(--accent);font-weight:600}.season-road li.is-current i{background:var(--accent)}
.season-line{font-size:var(--type-lg);font-weight:650;color:var(--ink);line-height:1.3}
.season-note{color:var(--ink-2)}
.season-progress{display:grid;gap:var(--space-xs);margin-bottom:var(--space-md)}
.season-progress-head{display:flex;justify-content:space-between;font-size:var(--type-sm);color:var(--ink-2);font-variant-numeric:tabular-nums}
.season-bar{display:block;width:100%;height:6px;appearance:none;-webkit-appearance:none;border:0;background:var(--border);border-radius:6px;overflow:hidden}
.season-bar::-webkit-progress-bar{background:var(--border);border-radius:6px}
.season-bar::-webkit-progress-value{background:var(--forest-green);border-radius:6px;transition:width .6s ease}
.season-bar::-moz-progress-bar{background:var(--forest-green);border-radius:6px}
.season-state[data-state=needed]{color:var(--terra)}.season-state[data-state=received]{color:var(--forest-green)}.season-state[data-state=uploading]{color:var(--ink-2);font-variant-numeric:tabular-nums}.season-state[data-state=error]{color:var(--terra)}
.season-item.is-over{outline:2px dashed var(--accent);outline-offset:6px;border-radius:var(--radius-sm)}.season-sent{display:block}
.season-figures{display:grid}.season-sign-what{margin:0 0 var(--space-md);font-size:var(--type-md)}
.season-figure{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:var(--space-md);padding:var(--space-md) 0;border-bottom:1px solid var(--border)}
.season-figure:last-child{border-bottom:0}
.season-figure span{color:var(--ink-2);font-size:var(--type-md)}
.season-figure b{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;overflow-wrap:normal;letter-spacing:-.02em;color:var(--ink)}
.season-figure.is-hero b{font-size:36px}.season-figure.is-hero[data-figure=refund] b{color:var(--forest-green)}
.season-changed{margin-top:var(--space-lg)}.season-changed h3{font-size:var(--type-lg);font-weight:650;margin:0 0 var(--space-xs)}.season-changed p{margin:0;color:var(--ink-2)}
.season-note-card{display:flex;gap:var(--space-md);align-items:flex-start;margin-top:var(--space-md);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-base);background:var(--warm-stone)}
.season-note-card p{margin:0;line-height:var(--leading-read)}
.season-avatar{flex:none;width:32px;height:32px;border-radius:50%;background:var(--accent);color:var(--on-ac);display:grid;place-items:center;font-size:var(--type-sm);font-weight:700}
.season-actions{margin-top:var(--space-lg);display:flex;flex-wrap:wrap;gap:var(--space-sm)}
.season-changed,.season-note-card{transition:opacity .5s ease .9s,transform .5s ease .9s}
.season-reveal.is-animating .season-changed,.season-reveal.is-animating .season-note-card{opacity:0;transform:translateY(6px);transition:none}
.season-moment{position:relative;overflow:hidden;display:grid;gap:var(--space-sm)}
.season-moment::before{content:"";position:absolute;left:var(--space-lg);right:var(--space-lg);top:0;height:3px;background:linear-gradient(90deg,var(--angelus-red),var(--accent),var(--forest-green));transform-origin:left;transition:transform 1s ease}
.season-moment.is-animating::before{transform:scaleX(0);transition:none}
.season-moment h2{margin:var(--space-sm) 0 0}
.season-big{margin:0;font-size:38px;font-weight:700;letter-spacing:-.03em;color:var(--forest-green);font-variant-numeric:tabular-nums;line-height:1}
.season-moment[data-kind=owed] .season-big{color:var(--ink)}
.season-moment-line{margin:0;color:var(--ink-2)}
.season-archive{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-xs)}
.season-archive a{display:inline-flex;align-items:center;min-height:36px;padding:0 var(--space-md);border:1px solid var(--border);border-radius:999px;color:var(--ink);text-decoration:none;font-size:var(--type-sm)}
.proto-masthead-home{color:inherit;text-decoration:none}
/* A padded panel's title runs edge to edge like every other panel's, with its
   words on the same line as the content below it. */
.proto-panel-body>.portal-overview-section-title,.proto-profile-other>.portal-overview-section-title{margin:calc(var(--panel-inset) * -1) calc(var(--panel-inset) * -1) var(--space-sm);padding:var(--space-md) var(--panel-inset) var(--space-2xs)}
/* A row list inside a padded panel body runs edge to edge like a panel's own rows, so its words line up with the title. */
.proto-panel-body>:is(.portal-overview-action-register,.k-req-rows){margin-left:calc(var(--panel-inset) * -1);margin-right:calc(var(--panel-inset) * -1)}
.proto-panel-body>.proto-panel-foot{margin:var(--panel-inset) calc(var(--panel-inset) * -1) calc(var(--panel-inset) * -1)}
/* Today, shaped by the services a person has: one card each, one action at most. */
.season-road.is-compact{padding-top:var(--space-2xs);margin:var(--space-2xs) 0}
.season-road.is-compact::before,.season-road.is-compact::after{top:calc(var(--space-2xs) + 5px)}
.season-road.is-compact li{font-size:var(--type-sm)}
.season-road.is-compact li i{width:12px;height:12px}
.season-road.is-compact li.is-current i{box-shadow:0 0 0 3px var(--accent-soft)}
/* A business month: the months beside it, then its milestones in their own order. */
.month-strip ol{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.month-strip a{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:36px;padding:0 var(--space-md);border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--ink);font-size:var(--type-sm)}
.month-strip a i{width:8px;height:8px;border-radius:50%;border:2px solid var(--border)}
.month-strip a.is-complete i{background:var(--forest-green);border-color:var(--forest-green)}
.month-strip a.is-open i{border-color:var(--accent)}
.month-strip a.is-yours i{background:var(--terra);border-color:var(--terra)}
.month-strip a[aria-current=page]{border-color:var(--accent);background:var(--accent-soft);font-weight:650}
.month-strip small{color:var(--ink-3)}
.month-standing{display:grid;gap:var(--space-xs)}
.month-transactions{list-style:none;margin:var(--space-md) 0 0;padding:0;display:grid;gap:var(--space-md)}
.month-transactions>li{border-left:3px solid var(--border);padding-left:var(--space-md)}
.month-figures{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-md);margin:0}
.month-figures>div{border-left:3px solid var(--border);padding-left:var(--space-md)}
.month-figures dt{color:var(--ink-2)}
.month-figures dd{margin:var(--space-xs) 0 0;font-size:var(--type-lg);font-variant-numeric:tabular-nums}
.month-road{display:grid;margin-top:var(--space-md)}
.month-road li{display:grid;grid-template-columns:18px minmax(0,1fr);gap:var(--space-md);position:relative;padding-bottom:var(--space-md)}
.month-road li:last-child{padding-bottom:0}
.month-road li::before{content:"";position:absolute;left:8px;top:18px;bottom:0;width:2px;background:var(--border)}
.month-road li:last-child::before{display:none}
.month-road li.is-done::before{background:var(--accent)}
.month-road i{width:18px;height:18px;border-radius:50%;background:var(--surface);border:2px solid var(--border);position:relative;z-index:1;margin-top:1px}
.month-road li.is-done i{background:var(--accent);border-color:var(--accent)}
.month-road li.is-current i{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.month-road span{color:var(--ink);font-size:var(--type-md)}
.month-road li.is-current span{font-weight:650}
.month-road small{display:block;color:var(--ink-2);font-size:var(--type-sm)}
.month-lead{display:grid;gap:var(--space-xs);margin-bottom:var(--space-md)}
.month-business .month-strip{margin-bottom:var(--space-md)}.month-business .month-lead .season-actions{margin-top:var(--space-sm)}
.month-subhead{font-size:var(--type-md);font-weight:650;color:var(--ink);margin:var(--space-md) 0 var(--space-xs)}
@media(prefers-reduced-motion:reduce){summary.season-stop-head::after,.season-road::after,.season-road li i,.season-bar::-webkit-progress-value,.season-moment::before,.season-changed,.season-note-card{transition:none}}
/* A tax year between seasons: keep a document or tell a change in place. */
.taxyear-panel{display:grid;gap:var(--space-xs);transition:outline-color .2s}
.taxyear-panel.is-over{outline:2px dashed var(--accent);outline-offset:4px}
.taxyear-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-md)}
.taxyear-actions>[hidden],.taxyear-change[hidden]{display:none}
.taxyear-status{margin:var(--space-xs) 0 0;color:var(--ink-2);font-size:var(--type-sm);overflow-wrap:anywhere}
.taxyear-status:empty{display:none}
.taxyear-status[data-error]{color:var(--terra)}
.taxyear-status a{text-decoration:underline;text-underline-offset:.2em}
.taxyear-form{gap:var(--space-lg)}
.taxyear-kinds{border:0;padding:0;margin:0;min-width:0}
.taxyear-kinds legend{font-weight:650;margin-bottom:var(--space-sm);padding:0}
.taxyear-kinds>div{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,13rem),1fr));gap:var(--space-xs)}
.taxyear-kind{display:flex;align-items:center;gap:var(--space-sm);min-height:var(--control-height);padding:var(--space-xs) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);cursor:pointer}
.taxyear-form .taxyear-kind input[type=radio][name]{display:inline-block;flex:none;width:auto;min-width:0;min-height:0;margin:0;padding:0;border:0;accent-color:var(--accent)}
.taxyear-kind:has(input:checked){border-color:var(--accent);background:var(--accent-soft);font-weight:600}
.taxyear-kind:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
.taxyear-field{display:grid;gap:var(--space-xs);min-width:0}
.taxyear-field label{font-weight:650}
.taxyear-field small{color:var(--ink-2);font-weight:400;font-size:var(--type-sm)}
.taxyear-form select{max-width:16rem}
.taxyear-change .notice{margin:0 0 var(--space-md)}
.taxyear-notice a,.season-next a{text-decoration:underline;text-underline-offset:.2em}
.taxyear-return{display:grid;gap:var(--space-xs)}.taxyear-return+.taxyear-return{margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--border)}.taxyear-return .season-actions{margin-top:var(--space-sm)}
.proto-request-list>li.is-new{animation:taxyear-new 2.4s ease-out}
@keyframes taxyear-new{from{background-color:var(--accent-soft)}}
@media(prefers-reduced-motion:reduce){.proto-request-list>li.is-new{animation:none;background-color:var(--accent-soft)}.taxyear-panel{transition:none}}
/* The doorway: last year's list, confirmed in one pass. */
.doorway-intro{margin:0 0 var(--space-md);color:var(--ink-2)}
/* One tap among a few answers: the doorway’s choices and a request’s quick answers. */
.portal-chips{display:inline-flex;flex-wrap:wrap;gap:var(--space-2xs);min-width:0}
.doorway-choices{border:0;margin:0;padding:0}
.doorway-choices legend{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.portal-chips label{position:relative;display:inline-flex;align-items:center;min-height:36px;padding:0 var(--space-md);border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--ink-2);font-size:var(--type-sm);font-weight:600;cursor:pointer;transition:background-color .2s,border-color .2s,color .2s}
.portal-chips input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
.portal-chips label:has(input:checked){background:var(--accent);border-color:var(--accent);color:var(--on-ac)}
.doorway-choices label:has(input[value=changed]:checked),.doorway-choices label:has(input[value=gone]:checked){background:var(--warm-stone);border-color:var(--terra);color:var(--ink)}
.portal-chips label:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
.doorway-note{grid-column:1/-1;display:none;gap:var(--space-2xs);min-width:0}
.doorway-row:has(input[value=changed]:checked) .doorway-note,.doorway-row:has(input[value=gone]:checked) .doorway-note{display:grid}
.doorway-row:has(input[value=changed]:checked) [data-when=gone],.doorway-row:has(input[value=gone]:checked) [data-when=changed]{display:none}
.doorway-note label{font-weight:600;font-size:var(--type-sm)}
.doorway-note small{color:var(--ink-2);font-weight:400}
.doorway-note input{width:100%;min-height:var(--control-height);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font:inherit}
/* The row's words take the full width and its choices sit beneath them, so neither is crushed (CP-114). */
.portal-overview-action-register li.doorway-row{grid-template-columns:minmax(0,1fr)}
.doorway-row>.doorway-choices{justify-self:start}
.doorway-choices label{white-space:nowrap}
.doorway-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);margin-top:var(--space-lg)}
.doorway-actions span{color:var(--ink-2);font-size:var(--type-sm)}
.season-state[data-state=answered],.season-state[data-state=missing]{color:var(--ink-2)}
.reply-quick{display:flex;margin-bottom:var(--space-sm)}
@media(prefers-reduced-motion:reduce){.portal-chips label{transition:none}}
.portal-sign-in{min-height:100vh;margin:0;background:var(--paper)}
.sign-in-frame{min-height:100vh;display:grid;grid-template-columns:minmax(320px,38%) minmax(0,1fr)}
.sign-in-brand{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-xl);padding:48px 56px;background:var(--bar);color:var(--bar-text)}
.sign-in-rule{position:absolute;top:0;right:0;bottom:0;width:4px;display:grid;grid-template-rows:repeat(3,1fr)}.sign-in-rule i:nth-child(1){background:var(--tri-1)}.sign-in-rule i:nth-child(2){background:var(--tri-2)}.sign-in-rule i:nth-child(3){background:var(--tri-3)}
.sign-in-logo{display:block;width:150px;height:auto}
.sign-in-wordmark{margin:0;font-family:var(--font-serif);font-size:30px;line-height:1.1;color:var(--bar-brand)}.sign-in-wordmark strong{font-weight:400;color:var(--bar-brand)}
.sign-in-shell{display:grid;grid-template-columns:minmax(0,1fr);align-content:center;justify-items:center;min-width:0;padding:48px 24px}
.sign-in-card{width:100%;max-width:400px;min-width:0;display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-sm)}
.sign-in-card h1{margin:0 0 var(--space-xs);font-family:var(--font-serif);font-size:40px;font-weight:400;line-height:1.05;letter-spacing:-.01em;color:var(--ink);text-wrap:balance}
.sign-in-lede{color:var(--ink-2);font-size:14.5px;line-height:var(--leading-read)}
.sign-in-form{display:grid;gap:var(--space-sm);margin-top:var(--space-md)}
.sign-in-form label{font-weight:500;font-size:13px;color:var(--ink-2)}
.sign-in-form input{display:block;width:100%;min-height:46px;padding:var(--space-sm) var(--space-md);font-size:1rem;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-base);color:var(--ink);transition:border-color var(--dur-1) var(--ease)}
.sign-in-form input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.sign-in-button{min-height:46px;margin-top:var(--space-xs);border:0;border-radius:var(--radius-base);background:var(--accent);color:var(--on-accent);font-weight:500;font-size:15px;transition:background var(--dur-1) var(--ease)}.sign-in-button:hover{background:var(--accent-2)}
.sign-in-help{font-size:13px;color:var(--ink-3);margin-top:var(--space-sm)}
/* The file box (/send): the sign-in card with a note, files and a receipt. */
.sign-in-form textarea{display:block;width:100%;padding:var(--space-sm) var(--space-md);font:inherit;font-size:1rem;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-base);color:var(--ink);resize:vertical}
.sign-in-form textarea:focus{outline:none;border-color:var(--deep-blue);box-shadow:0 0 0 3px var(--deep-blue-soft)}
/* The whole drop zone is the file input (transparent, on top), so a click anywhere opens the picker and a
   drop lands on it; the visible words and button sit underneath. */
.file-box-drop{position:relative;display:grid;place-items:center;min-height:132px;padding:var(--space-lg) var(--space-md);border:2px dashed var(--border-strong);border-radius:var(--radius-base);background:var(--surface);text-align:center;transition:border-color var(--dur-1) var(--ease),background var(--dur-1) var(--ease)}
.file-box-drop:hover,.file-box-drop.is-over{border-color:var(--deep-blue);background:var(--deep-blue-soft)}
.file-box-drop:focus-within{border-color:var(--deep-blue);box-shadow:0 0 0 3px var(--deep-blue-soft)}
.sign-in-form .file-box-input{position:absolute;inset:0;width:100%;height:100%;min-height:0;padding:0;border:0;opacity:0;cursor:pointer}
.file-box-drop-text{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-sm);margin:0;color:var(--ink-2);font-size:var(--type-sm)}
.file-box-choose{display:inline-flex;align-items:center;min-height:var(--control-height,44px);padding:0 var(--space-md);border:1px solid var(--deep-blue);border-radius:var(--radius-base);background:var(--surface);color:var(--deep-blue);font-weight:650;font-size:1rem}
.file-box-drop:hover .file-box-choose,.file-box-drop.is-over .file-box-choose{background:var(--deep-blue);color:var(--on-accent)}
@media (hover:none){.file-box-drag{display:none}.file-box-drop{min-height:0}}
.file-box-limits{margin:calc(-1 * var(--space-xs)) 0 0;font-size:var(--type-sm);color:var(--ink-3)}
.file-box-picked{display:grid;gap:var(--space-xs);margin:0;padding:0;list-style:none}
.file-box-picked li{display:flex;align-items:center;gap:var(--space-sm);min-height:var(--control-height,44px);padding:var(--space-xs) var(--space-xs) var(--space-xs) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-base);background:var(--surface)}
.file-box-name{flex:1;min-width:0;overflow-wrap:anywhere;font-size:var(--type-sm);color:var(--ink)}
.file-box-size{flex:none;font-size:var(--type-sm);color:var(--ink-3);font-variant-numeric:tabular-nums}
.file-box-remove{flex:none;min-height:36px;padding:0 var(--space-sm);border:0;border-radius:var(--radius-base);background:none;color:var(--deep-blue);font-weight:600;font-size:var(--type-sm);cursor:pointer}
.file-box-remove:hover{text-decoration:underline;text-underline-offset:3px}.file-box-remove:focus-visible{outline:3px solid var(--deep-blue-soft);outline-offset:1px}
.file-box-website{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
/* The receipt: the same rows as the chosen files, each with a check, then one way to send more. */
.file-box-received{margin-top:var(--space-lg)}
.file-box-received li{padding-left:var(--space-sm)}
.file-box-done{flex:none;width:20px;height:20px}.file-box-done circle{fill:var(--forest-green-soft)}.file-box-done path{fill:none;stroke:var(--forest-green);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.file-box-received+.file-box-limits{margin:var(--space-md) 0 0}
.file-box-again{display:flex;align-items:center;justify-content:center;min-height:50px;margin-top:var(--space-lg);border:1px solid var(--deep-blue);border-radius:var(--radius-base);background:var(--surface);color:var(--deep-blue);font-weight:650;font-size:1rem;text-decoration:none;transition:background var(--dur-1) var(--ease),color var(--dur-1) var(--ease)}
.file-box-again:hover{background:var(--deep-blue);color:var(--on-accent)}.file-box-again:focus-visible{outline:3px solid var(--deep-blue-soft);outline-offset:2px}
.sign-in-notice{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-base);background:var(--angelus-red-soft);color:var(--ink);font-size:var(--type-sm)}
.sign-in-link{justify-self:start;margin-top:var(--space-md);font-weight:600;color:var(--deep-blue);text-decoration:underline;text-underline-offset:3px}
.sign-in-choices{display:grid;gap:var(--space-sm);margin-top:var(--space-lg)}.sign-in-choices a{display:flex;align-items:center;min-height:50px;padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-base);font-weight:600}.sign-in-choices a:hover{border-color:var(--deep-blue)}
.sign-in-foot{margin:0;font-size:13px;color:var(--bar-muted)}
@media(max-width:760px){.sign-in-frame{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}.sign-in-brand{padding:28px 24px 26px}.sign-in-logo{width:118px}.sign-in-wordmark{font-size:24px}.sign-in-foot{display:none}.sign-in-rule{top:auto;left:0;width:auto;height:4px;grid-template-rows:none;grid-template-columns:repeat(3,1fr)}.sign-in-shell{align-content:start;justify-items:stretch;padding:28px 24px}.sign-in-card h1{font-size:34px}}
.proto-profile-fieldset legend{float:left;width:100%;padding:0;margin:0 0 var(--space-lg)}.proto-profile-fieldset legend+*{clear:both}
.proto-profile-form .proto-profile-fieldset>.proto-profile-field{margin-bottom:var(--space-sm)}
.proto-profile-other h2,.ask-panel h2,.ask-sent h2{margin-bottom:var(--space-md)}.proto-profile-other .proto-past-jobs{margin-top:var(--space-sm);padding:0}.proto-profile-other .proto-past-jobs summary{min-height:var(--control-height);align-content:center;cursor:pointer;font-weight:600;color:var(--ink-2);text-decoration:none}.proto-profile-other .proto-past-jobs summary::marker{color:var(--ink-3)}.proto-profile-other .proto-past-jobs .proto-employment{padding:var(--space-sm) 0 0}
.portal-page-head h1+p{margin-top:var(--space-2xs);color:var(--ink-2)}
.proto-email-team .portal-overview-row-action{display:inline-flex}

.proto-document-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap;align-items:center}.information-request-files>*{display:flex;flex-wrap:wrap;gap:var(--space-sm);align-items:baseline}.information-request-file-download{font-size:var(--type-sm);color:var(--ink-2);text-decoration:underline;text-underline-offset:3px}

.file-peek{width:min(920px,100vw);max-width:100vw;height:100dvh;max-height:100dvh;margin:0 0 0 auto;padding:0;border:0;border-left:1px solid var(--border);background:var(--paper);color:var(--ink);box-shadow:var(--shadow-lg);display:none;flex-direction:column}
.file-peek[open]{display:flex}.file-peek::backdrop{background:var(--overlay)}.file-peek-open{overflow:hidden}
.file-peek-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface)}
.file-peek-title{min-width:0;font-size:var(--type-md);font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-peek-actions{display:flex;gap:var(--space-sm);flex-shrink:0}
.file-peek-body{flex:1;overflow:auto;padding:var(--space-lg)}
.file-peek-pages{display:grid;gap:var(--space-lg);justify-items:center}
.file-peek-page{display:block;width:100%;height:auto;background:var(--surface);box-shadow:var(--shadow-base)}
.file-peek-image{display:block;max-width:100%;height:auto;margin:0 auto;background:var(--surface);box-shadow:var(--shadow-base)}
.file-peek-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--type-sm);line-height:1.6;padding:var(--space-lg);background:var(--surface);border:1px solid var(--border)}
.file-peek-status{color:var(--ink-2)}.file-peek-note{display:grid;gap:var(--space-md);justify-items:start;padding:var(--space-lg);background:var(--surface);border:1px solid var(--border)}
@media(max-width:700px){.file-peek{width:100vw;border-left:0}.file-peek-head{padding:var(--space-sm) var(--space-md)}.file-peek-body{padding:var(--space-md)}}

.proto-visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.proto-document-filters{margin-bottom:var(--space-md)}#upload-status:empty{display:none}
/* Take 1 (Sonny 9/26, "quiet page, bold type"), at every width: the switcher already names the place,
   so a page title does not repeat it; Requests needs no sentence about itself; the links row is slim. */
.portal-page:has(.proto-request-counts)>.proto-profile-intro{display:none}
.portal-person-links{padding-block:var(--space-2xs)}
@media(max-width:700px){
  /* Buttons and controls a little smaller on a phone, all alike. */
  html:root{--control-height:40px;--row-action-width:84px}
  .portal-overview-action-register .portal-overview-row-action,.request-row-actions .portal-overview-row-action{min-height:40px}
  /* A row that answers in place (a box to tick, a reply) or offers two actions (Preview, Download)
     puts them under the words, so the words keep the row's width. */
  .portal-overview-action-register li:has(>.request-row-actions form){grid-template-columns:minmax(0,1fr)}
  .portal-overview-action-register li:has(>.request-row-actions form)>.request-row-actions{justify-self:stretch}
  .portal-overview-action-register li:has(>:last-child>.portal-overview-row-action~.portal-overview-row-action){grid-template-columns:minmax(0,1fr)}
  .portal-overview-action-register li:has(>:last-child>.portal-overview-row-action~.portal-overview-row-action)>:last-child{justify-self:start}
  /* With the kind's tile the words stay beside it and what answers goes under both (CP-095). */
  .portal-overview-action-register li:has(>.kind-tile):has(>.request-row-actions form),.portal-overview-action-register li:has(>.kind-tile):has(>:last-child>.portal-overview-row-action~.portal-overview-row-action){grid-template-columns:auto minmax(0,1fr)}
  .portal-overview-action-register li:has(>.kind-tile):has(>.request-row-actions form)>.request-row-actions,.portal-overview-action-register li:has(>.kind-tile):has(>:last-child>.portal-overview-row-action~.portal-overview-row-action)>:last-child{grid-column:1/-1}
  .portal-workspace{padding-top:var(--space-lg)}
}
a.sign-in-button{display:flex;align-items:center;justify-content:center;margin-top:var(--space-md);text-decoration:none}
.proto-document-note{margin:var(--space-xs) 0 0;white-space:pre-line;overflow-wrap:anywhere}
.proto-note-edit{margin-top:var(--space-xs)}
.proto-note-edit>summary{display:list-item;width:max-content;max-width:100%;line-height:44px;cursor:pointer;font-weight:600;color:var(--deep-blue)}
.proto-note-edit form{display:grid;gap:var(--space-sm);justify-items:start}
.proto-note-edit textarea{display:block;width:100%;min-height:4.5rem;padding:var(--space-sm);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--border);resize:vertical}
.proto-upload-stage{margin-bottom:var(--space-md)}
.proto-upload-stage-body{display:grid;gap:var(--space-sm);padding:var(--space-md)}
.proto-upload-stage-files{display:grid;gap:var(--space-xs);margin:0;padding:0;list-style:none}
.proto-upload-stage-files li{display:flex;justify-content:space-between;gap:var(--space-md);min-width:0}
.proto-upload-stage-name{min-width:0;overflow-wrap:anywhere;font-weight:600}
.proto-upload-stage-files small{flex:none;color:var(--ink-2)}
.proto-upload-stage label{margin-top:var(--space-xs)}
.proto-upload-stage textarea{display:block;width:100%;min-height:4.5rem;padding:var(--space-sm);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--border);resize:vertical}
.proto-upload-stage-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}
.proto-upload-stage h2:focus{outline:none}
.proto-drop-overlay{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:var(--space-lg);background:color-mix(in srgb,var(--deep-blue) 14%,transparent);box-shadow:inset 0 0 0 3px var(--deep-blue);pointer-events:none}
.proto-drop-overlay[hidden]{display:none}
.proto-drop-overlay p{margin:0;padding:var(--space-md) var(--space-lg);font-weight:650;color:var(--ink);background:var(--surface);border:1px solid var(--deep-blue);border-radius:var(--radius-base)}
@media (hover:none){.proto-drop-hint{display:none}}
@media(max-width:640px){.month-figures{grid-template-columns:1fr;gap:var(--space-sm)}}
/* View as a person (staff): the chooser and the read-only copy of one person's portal. */
.view-as-choose{max-width:760px;margin:0 auto;padding:var(--space-xl) var(--space-lg)}
.view-as-people{list-style:none;margin:0;padding:0}
.view-as-person{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) var(--panel-inset);border-bottom:1px solid var(--border)}
.view-as-person:last-child{border-bottom:0}
.view-as-person>div{display:grid;gap:4px;min-width:0;flex:1 1 320px}
.view-as-person small{color:var(--ink-2);font-size:var(--type-sm);overflow-wrap:anywhere}
.view-as-person form{margin:0}
.view-as-bar{background:var(--warn-soft)}
.view-as-bar span{font-weight:600}
body[data-view-as] main form button[type=submit],body[data-view-as] main input[type=file]{cursor:not-allowed}
/* Rows (Sonny 9/24: the hover hid the border above and looked clickable when only the title was).
   A row with a title link now opens as a whole: the title's link covers the row, and the row's own
   buttons, forms and other links sit above it. A row without one does not react to the pointer, and
   no row lifts over its neighbour's border. */
.portal-skin .portal-overview-action-register li{position:relative}
.portal-skin .portal-overview-action-register li:hover{transform:none;box-shadow:none;background:transparent}
.portal-skin .portal-overview-action-register li:has(.portal-overview-register-copy>strong>a):hover{background:color-mix(in srgb,var(--surface) 88%,var(--deep-blue-soft))}
.portal-overview-register-copy>strong>a::after{content:"";position:absolute;inset:0}
.portal-skin .portal-overview-action-register li :is(button,input,select,textarea,summary,label,form,a:not(.portal-overview-register-copy>strong>a)){position:relative;z-index:1}
/* An Upload button's file input covers the button (.upload input) rather than sitting beside its label;
   the rule above would otherwise give it a place in the row and break "Upload" over two lines (CP-067). */
.portal-skin .portal-overview-action-register li .upload input[type=file]{position:absolute}
/* A chip's radio covers its pill; kept out of the flow, it leaves no gap before the words (CP-114). */
.portal-skin .portal-overview-action-register li .portal-chips label>input:is([type=radio],[type=checkbox]){position:absolute}
/* The tax organizer (CP-068): a section rail beside one section at a time; on-file rows; questions
   with their control on the right; a follow-up sits indented under the answer that opened it. */
.organizer{display:grid;grid-template-columns:200px minmax(0,1fr);gap:var(--space-md);align-items:start}
.organizer-side{position:sticky;top:var(--space-md)}
.organizer-rail{display:grid;gap:2px;padding:var(--space-xs) 0;border:1px solid var(--border);border-radius:var(--radius-base);background:var(--surface)}
.organizer-rail a{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-md);min-height:40px;color:var(--ink-2);text-decoration:none;font-size:var(--type-sm);border-left:3px solid transparent}
.organizer-rail a[aria-current=page]{color:var(--ink);font-weight:700;border-left-color:var(--deep-blue);background:var(--deep-blue-soft)}
.organizer-rail i{font-style:normal;font-size:var(--type-xs,12px);color:var(--ink-3);white-space:nowrap}.organizer-rail i.is-done{color:var(--forest-green)}
.organizer-main{min-width:0}
.organizer-lede{margin:0;padding:var(--space-sm) var(--panel-inset) 0;color:var(--ink-2);font-size:var(--type-sm)}
.organizer-list{list-style:none;margin:0;padding:0}
.organizer-q{display:flex;align-items:flex-start;gap:var(--space-md);padding:var(--space-sm) var(--panel-inset);border-top:1px solid var(--border)}
.organizer-q:first-child{border-top:0}
.organizer-q.is-follow{padding-left:calc(var(--panel-inset) + var(--space-lg));background:color-mix(in srgb,var(--surface) 88%,var(--deep-blue-soft))}
.organizer-q-text{flex:1;min-width:0}.organizer-prompt{margin:0;font-weight:600;color:var(--ink)}
.organizer-help{margin:2px 0 0;font-size:var(--type-sm);color:var(--ink-3)}.organizer-adds{color:var(--forest-green)}
.organizer-required{display:inline-block;margin-left:var(--space-xs);padding:0 var(--space-xs);border-radius:999px;background:var(--angelus-red-soft);color:var(--terra);font-size:var(--type-xs,12px);font-weight:600}
.organizer-q-control{flex:none;display:flex;align-items:center;min-height:36px;max-width:60%}
.organizer-choices{border:0;margin:0;padding:0}.organizer-choices legend{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.organizer-amount{display:inline-flex;align-items:center;gap:var(--space-2xs);color:var(--ink-3)}
.organizer-amount input,.organizer-count,.organizer-q-control textarea{min-height:40px;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border-strong);border-radius:var(--radius-base);background:var(--surface);color:var(--ink);font:inherit;font-size:1rem}
.organizer-amount input{width:9em}.organizer-count{width:5em}.organizer-q-control textarea{width:min(28em,100%);resize:vertical}
.organizer-onfile{margin:0;padding:0;list-style:none}
.organizer-onfile-row{display:grid;grid-template-columns:150px minmax(0,1fr) auto;gap:var(--space-sm);align-items:center;padding:var(--space-sm) var(--panel-inset);border-top:1px solid var(--border)}
.organizer-onfile-row:first-child{border-top:0}
.organizer-onfile-k{color:var(--ink-3);font-size:var(--type-sm)}.organizer-onfile-v{font-weight:500;overflow-wrap:anywhere}.organizer-onfile-v.is-blank{color:var(--terra)}
.organizer-onfile-act{display:flex;align-items:center;gap:var(--space-xs);justify-content:flex-end}
.organizer-foot{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--panel-inset);border-top:1px solid var(--border)}
.organizer-saved{font-size:var(--type-sm);color:var(--forest-green)}.organizer-saved.is-error{color:var(--terra)}
.organizer-card{display:flex;align-items:center;gap:var(--space-md)}.organizer-card-copy{flex:1;min-width:0}.organizer-card-copy h2{margin:0}
.organizer-bar{display:block;appearance:none;-webkit-appearance:none;width:100%;max-width:360px;height:6px;margin-top:var(--space-xs);border:0;border-radius:3px;background:var(--border);overflow:hidden}.organizer-bar::-webkit-progress-bar{background:var(--border);border-radius:3px}.organizer-bar::-webkit-progress-value{background:var(--forest-green);border-radius:3px}.organizer-bar::-moz-progress-bar{background:var(--forest-green);border-radius:3px}
.organizer .portal-chips label{white-space:nowrap}
@media (max-width:760px){.organizer{grid-template-columns:1fr}.organizer-side{position:static}.organizer-rail{display:flex;overflow-x:auto;gap:var(--space-xs);padding:var(--space-xs);border:0;background:none}.organizer-rail a{flex:none;border:1px solid var(--border);border-radius:999px;background:var(--surface);min-height:36px}.organizer-rail a[aria-current=page]{border-color:var(--deep-blue)}
 .organizer-q{flex-direction:column;align-items:stretch}.organizer-q-control{max-width:none}.organizer-onfile-row{grid-template-columns:1fr;gap:var(--space-2xs)}.organizer-onfile-act{justify-content:flex-start}.organizer-card{flex-direction:column;align-items:stretch}}
/* Slice 2 of the organizer: where a request came from, when its kind arrives, a reason for
   "Not this year", and one file that covers several documents. */
.season-from,.season-arrives{display:block}.season-from a{font-weight:600}
.doorway-reason{grid-column:1/-1;display:none;gap:var(--space-2xs);min-width:0}
.doorway-row:has(input[value=gone]:checked) .doorway-reason{display:grid}
.doorway-reason label{font-weight:600;font-size:var(--type-sm)}
.doorway-reason select{width:100%;min-height:var(--control-height);padding:0 var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font:inherit}
.season-cover{margin:var(--space-sm) var(--panel-inset) 0;border-top:1px solid var(--border);padding-top:var(--space-sm)}
.season-cover summary{cursor:pointer;font-weight:600;color:var(--deep-blue);padding:var(--space-xs) 0}
.season-cover-body{display:grid;gap:var(--space-sm);padding-bottom:var(--space-sm)}
.season-cover-pick{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.season-cover-file{position:relative;overflow:hidden}.season-cover-file input{position:absolute;inset:0;opacity:0;cursor:pointer}
.season-cover-name{font-size:var(--type-sm);color:var(--ink-2);overflow-wrap:anywhere}
.season-cover-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-2xs)}
.season-cover-list label{display:flex;align-items:center;gap:var(--space-sm);min-height:36px;cursor:pointer}
.season-cover-list input{width:20px;height:20px;margin:0;accent-color:var(--deep-blue)}
.season-cover-actions{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.season-cover-status{font-size:var(--type-sm);color:var(--forest-green)}.season-cover-status[data-error=true]{color:var(--terra)}
.organizer-prior{color:var(--ink-2)}.organizer-use{background:none;border:0;padding:0;font:inherit;font-weight:600;color:var(--deep-blue);cursor:pointer;text-decoration:underline}
.organizer-use-all{margin-left:auto}.organizer-main .portal-overview-section-title{flex-wrap:wrap;gap:var(--space-sm)}
/* Estimated payments (CP-069, take A): a table with the figures in a column, what we know as a
   chip, and the report form as its own row under the deadline it answers. */
.estimate-scroll{overflow-x:auto;margin:0 calc(var(--panel-inset) * -1)}
.estimate-table{width:100%;min-width:520px;border-collapse:collapse;font-size:var(--type-sm)}
.estimate-table th{padding:var(--space-xs) var(--panel-inset);text-align:left;font-weight:600;color:var(--ink-3);font-size:var(--type-xs,12px);border-bottom:1px solid var(--border)}
.estimate-table td{padding:var(--space-sm) var(--panel-inset);border-top:1px solid var(--border);vertical-align:middle;color:var(--ink)}
.estimate-table tbody tr:first-child td{border-top:0}
.estimate-num{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}.estimate-dim{color:var(--ink-3);font-weight:400}
.estimate-act{text-align:right;width:1%;white-space:nowrap}
.estimate-chip{display:inline-block;padding:2px var(--space-sm);border-radius:999px;font-size:var(--type-xs,12px);font-weight:600;white-space:nowrap}
.estimate-chip.is-ok{background:var(--forest-green-soft);color:var(--forest-green)}.estimate-chip.is-need{background:var(--terra-soft);color:var(--terra)}.estimate-chip.is-soon{background:var(--angelus-red-soft);color:var(--ink-2)}
.estimate-form-row td{padding-top:0;border-top:0;background:var(--deep-blue-soft)}
.estimate-report{gap:var(--space-sm);padding:var(--space-sm) 0 var(--space-xs)}.estimate-report-fields{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-md)}
.estimate-report .proto-profile-field label small{font-weight:400;color:var(--ink-3)}
.estimate-report-actions{display:flex;gap:var(--space-xs)}
.estimate-foot{margin:var(--space-sm) 0 0;font-size:var(--type-sm);color:var(--ink-2)}
.estimate-how{margin:var(--space-sm) var(--panel-inset) 0;font-size:var(--type-sm);color:var(--ink-2)}.estimate-how summary{cursor:pointer;font-weight:600;color:var(--deep-blue)}
/* Giving (CP-071): the year's figures, the gifts with their amount and letter, the add and edit
   forms in place, and beside them the letters, the return and the reminder. */
.giving-head-actions{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.giving-years{display:flex;gap:var(--space-2xs)}
.giving-figs{margin:0 0 var(--space-lg)}
.giving-amt{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;color:var(--ink)}
.giving-edit{grid-column:1/-1}
.giving-remove{display:flex;justify-content:flex-end;margin:0 0 var(--space-sm)}
.giving-years a{min-height:32px;padding:0 var(--space-md)}
.giving-sums{margin:0;padding:0;list-style:none}.giving-sums li{display:flex;justify-content:space-between;gap:var(--space-md);padding:var(--space-xs) 0;border-bottom:1px solid var(--border);font-size:var(--type-sm);color:var(--ink-2)}
.giving-sums b{font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink);white-space:nowrap}.giving-sums .is-total{color:var(--ink);font-weight:700;border-bottom:0}
.giving-form{gap:var(--space-sm)}.giving-fields{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-md)}
.giving-fields+.giving-fields{grid-template-columns:auto minmax(0,1fr) minmax(0,2fr)}
.giving-form [hidden]{display:none}
.giving-monthly label{display:flex;align-items:center;gap:var(--space-xs);min-height:var(--control-height);font-weight:600}
.giving-form-actions{display:flex;gap:var(--space-xs)}
.giving-letters{margin:var(--space-xs) 0 0;padding-left:var(--space-lg);font-size:var(--type-sm);color:var(--ink)}
.giving-upload-status{margin:var(--space-sm) 0 0;font-size:var(--type-sm);color:var(--ink-2)}
/* Records (CP-071): the switch between places, a rental's views and its month strip. */
.records-switch{display:inline-flex;flex-wrap:wrap;align-self:flex-start;width:fit-content;max-width:100%;margin:0 0 var(--space-md);border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface)}
.records-switch a{display:inline-flex;flex:1 1 auto;justify-content:center;align-items:center;gap:var(--space-xs);min-height:36px;padding:0 var(--space-md);color:var(--ink-2);font-weight:600;text-decoration:none}
.records-switch a{box-shadow:-1px 0 0 var(--border-strong),0 -1px 0 var(--border-strong)}.records-switch a.is-current{background:var(--deep-blue);color:var(--paper)}
.records-switch i{font-style:normal;font-size:var(--type-xs,12px);padding:0 var(--space-xs);border-radius:var(--radius-sm);background:var(--terra);color:var(--paper)}
.rental-chips{display:flex;flex-wrap:wrap;gap:var(--space-2xs);margin:0 0 var(--space-md);padding:0;border:0}
.rental-chips legend{width:100%;margin:0 0 var(--space-xs);padding:0;font-weight:600;color:var(--ink)}
.rental-form [hidden],.rental-page [hidden]{display:none}
@media (max-width:760px){.giving-fields,.giving-fields+.giving-fields{grid-template-columns:minmax(0,1fr)}
 .giving-list>li{grid-template-columns:minmax(0,1fr)}.giving-list .request-row-actions{justify-self:stretch;flex-wrap:wrap}.giving-list .giving-amt{margin-right:auto}}
.portal-add-sheet{width:min(440px,100vw);max-width:100vw;height:100dvh;max-height:100dvh;margin:0 0 0 auto;padding:0;border:0;border-left:1px solid var(--border);background:var(--paper);color:var(--ink);box-shadow:var(--shadow-lg);display:none;flex-direction:column}
.portal-add-sheet[open]{display:flex}.portal-add-sheet [hidden]{display:none !important}.portal-add-sheet::backdrop{background:var(--overlay)}.portal-add-open{overflow:hidden}
.portal-add-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) var(--panel-inset);border-bottom:1px solid var(--border);background:var(--surface)}
.portal-add-head h2{font-size:var(--type-md);font-weight:650}
.portal-add-body{flex:1;overflow:auto;display:grid;align-content:start;gap:var(--space-md);padding:var(--space-lg) var(--panel-inset)}
.portal-add-drop{display:grid;justify-items:center;gap:var(--space-sm);padding:var(--space-xl) var(--space-lg);border:1px dashed var(--border-strong,var(--border));border-radius:var(--radius-sm);background:var(--surface);text-align:center}
.portal-add-drop span{font-size:var(--type-sm);color:var(--ink-2)}.portal-add-drop .portal-overview-row-action{justify-self:center}.portal-add-drop.is-over{border-color:var(--deep-blue);background:var(--deep-blue-soft)}
.portal-add-or{margin:var(--space-sm) 0 0;font-size:var(--type-sm);font-weight:650;color:var(--ink-2)}
.portal-add-choices{display:grid;gap:var(--space-sm)}
.portal-add-choice,.portal-add-option{display:grid;gap:2px;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);text-decoration:none}
.portal-add-choice:hover,.portal-add-choice:focus-visible{border-color:var(--deep-blue)}.portal-add-choice:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.portal-add-choice small,.portal-add-option small,.portal-add-chosen small{font-size:var(--type-sm);color:var(--ink-2)}
.portal-add-file{display:grid;gap:var(--space-md)}.portal-add-file fieldset{display:grid;gap:var(--space-sm);margin:0;padding:0;border:0}
.portal-add-file legend{margin-bottom:var(--space-sm);font-size:var(--type-sm);font-weight:650;color:var(--ink-2)}
.portal-add-chosen{display:grid;gap:2px;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);overflow-wrap:anywhere}
.portal-add-option{grid-template-columns:auto 1fr;align-items:start;column-gap:var(--space-md);cursor:pointer}.portal-add-option>span{display:grid;gap:2px}
.portal-add-option input{margin-top:3px}.portal-add-option:has(input:checked){border-color:var(--deep-blue);background:var(--deep-blue-soft)}
.portal-add-note{display:grid;gap:var(--space-xs);font-size:var(--type-sm);font-weight:600}.portal-add-note textarea{font:inherit;font-weight:400}
.portal-add-hint{margin:0;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);background:var(--forest-green-soft,var(--surface));font-size:var(--type-sm)}.portal-add-hint:empty{display:none}
.portal-add-hint[data-error]{background:var(--terra-soft,var(--surface));color:var(--terra,var(--ink))}
.portal-add-done{display:grid;gap:var(--space-sm);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.portal-add-done p{margin:0;color:var(--ink-2)}
.portal-add-loading{padding:var(--space-lg) var(--panel-inset);color:var(--ink-2)}
.portal-add-foot{display:flex;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) var(--panel-inset);border-top:1px solid var(--border);background:var(--surface)}
@media(max-width:700px){.portal-add-sheet{width:100vw;border-left:0}}
/* First-visit walkthrough (CP-075): a welcome panel, then a ring over each place with its callout. */
.portal-walkthrough-replay{margin:var(--space-lg) 0 0;padding:0 var(--space-xl);font-size:var(--type-sm)}.portal-walkthrough-replay a{color:var(--ink-2);text-decoration:underline}
.portal-walkthrough{position:fixed;inset:0;z-index:1000}
.portal-walkthrough-scrim{position:absolute;inset:0;background:var(--overlay)}
.portal-walkthrough-welcome,.portal-walkthrough-tip{background:var(--surface);color:var(--ink);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg)}
.portal-walkthrough-welcome{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(520px,calc(100vw - 2 * var(--space-lg)));display:grid;gap:var(--space-md);padding:var(--space-xl)}
.portal-walkthrough-welcome h2{font-size:var(--type-lg);font-weight:650}.portal-walkthrough-welcome p,.portal-walkthrough-tip p{margin:0;color:var(--ink-2)}
.portal-walkthrough-ring{position:fixed;border-radius:var(--radius-sm);box-shadow:0 0 0 3px var(--surface),0 0 0 5px var(--deep-blue),0 0 0 100vmax var(--overlay);pointer-events:none;transition:all .2s ease}
.portal-walkthrough-tip{position:fixed;width:min(320px,calc(100vw - 24px));display:grid;gap:var(--space-sm);padding:var(--space-lg)}
.portal-walkthrough-tip h2{font-size:var(--type-md);font-weight:650}
.portal-walkthrough-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);flex-wrap:wrap;margin-top:var(--space-xs)}
.portal-walkthrough-count{flex:1;font-size:var(--type-sm);color:var(--ink-3,var(--ink-2))}
.portal-walkthrough .portal-overview-row-action{min-width:0}.portal-walkthrough .portal-overview-row-action.is-quiet{border-color:transparent;background:transparent;text-decoration:underline}
@media(prefers-reduced-motion:reduce){.portal-walkthrough-ring{transition:none}}
.notice[role=alert]{border-color:var(--terra)}
.giving-row .portal-overview-register-copy small{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:break-word}
.giving-empty{margin:0;padding:0 var(--panel-inset) var(--panel-inset)}
@media(max-width:700px){.portal-overview-side:has(>.k-rec-send){display:contents}.portal-overview-side>.k-rec-send{order:-1}}
/* The shell (CP-095, the new style). One ink sidebar holds the logo, the place (the household or business
   switcher takes its spot), + Add, the links and the account at its foot. On a phone or a tablet the same
   sidebar is the ink bar across the top and the links become the tab bar: four places and More. The top
   bar's pieces keep their class names because client-sign-in decorates them by name. */
.portal-shell{min-height:100vh;display:grid;grid-template-columns:232px minmax(0,1fr);background:var(--paper)}
.portal-shell-main{min-width:0;min-height:100vh;display:flex;flex-direction:column}
.portal-sidebar{position:sticky;top:0;z-index:20;height:100vh;display:flex;flex-direction:column;padding:18px 12px 12px;background:var(--bar);color:var(--bar-text)}
.portal-sidebar::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,var(--tri-1) 0 33.33%,var(--tri-2) 33.33% 66.66%,var(--tri-3) 66.66%)}
.portal-sidebar-brand{display:flex;align-items:center;min-height:40px;padding:4px 8px 14px;text-decoration:none}
.portal-sidebar-logo{display:block;width:108px;height:auto}
.portal-sidebar .portal-wordmark{color:var(--bar-brand);font-family:var(--font-serif);font-size:23px;font-weight:400;line-height:1.1}.portal-sidebar .portal-wordmark strong{font-weight:400}
.portal-sidebar>.portal-topbar{display:contents}
.portal-sidebar-nav{order:3;display:flex;flex-direction:column;gap:2px}
.portal-sidebar-link{display:flex;align-items:center;gap:10px;min-height:36px;padding:0 10px;border-radius:7px;color:var(--bar-text);font-size:13.5px;font-weight:400;text-decoration:none}
.portal-sidebar-link svg{width:16px;height:16px;flex:none;color:var(--bar-muted)}
.portal-sidebar-link:hover{background:var(--bar-2);color:var(--bar-strong)}
.portal-sidebar-link.is-active{background:var(--bar-3);color:var(--bar-strong);font-weight:500}.portal-sidebar-link.is-active svg{color:var(--gold)}
.portal-sidebar-link:focus-visible,.portal-sidebar :is(summary,button,a):focus-visible{outline:2px solid var(--gold);outline-offset:1px}
.portal-sidebar-link[href="/client-community"]{margin-top:10px}
/* The place: a quiet box naming the household or business; with somewhere else to go it opens a list. */
.portal-topbar-scope,.portal-scope-switch{order:1;position:relative;min-width:0;margin-bottom:8px}
.portal-topbar-scope{padding:9px 10px;border:1px solid var(--bar-line);border-radius:8px;background:var(--bar-2)}
.portal-topbar-scope strong{display:block;overflow:hidden;color:var(--bar-soft);font-size:13px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}
.portal-scope-switch>summary{display:flex;flex-direction:column;gap:1px;min-height:44px;justify-content:center;padding:6px 30px 6px 10px;border:1px solid var(--bar-line);border-radius:8px;background:var(--bar-2);cursor:pointer;list-style:none;position:relative}
.portal-scope-switch>summary::-webkit-details-marker{display:none}
.portal-scope-switch>summary::after{content:"";position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--bar-muted);border-bottom:1.5px solid var(--bar-muted);transform:translateY(-70%) rotate(45deg)}
.portal-scope-switch[open]>summary::after{transform:translateY(-30%) rotate(-135deg)}
.portal-scope-kind{font-size:11px;color:var(--bar-muted);line-height:1.2}
.portal-scope-switch>summary strong{overflow:hidden;color:var(--bar-soft);font-size:13px;font-weight:500;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}
.portal-scope-switch ul{position:absolute;z-index:40;top:calc(100% + 4px);left:0;right:0;margin:0;padding:6px;list-style:none;border:1px solid var(--border);border-radius:10px;background:var(--surface);box-shadow:var(--shadow-base)}
.portal-scope-switch li a{display:flex;flex-direction:column;gap:1px;padding:8px 10px;border-radius:7px;color:var(--ink);font-size:13.5px;text-decoration:none}
.portal-scope-switch li a:hover,.portal-scope-switch li a:focus-visible{background:var(--accent-soft)}
.portal-scope-switch li a[aria-current="page"]{font-weight:600}
.portal-scope-switch li small{font-size:12px;color:var(--ink-3);font-weight:400}
/* + Add: the one filled control on ink, under the place. */
.portal-topbar-add{order:2;display:flex;align-items:center;justify-content:center;gap:6px;min-height:36px;margin-bottom:14px;padding:0 12px;border:0;border-radius:8px;background:var(--bar-action);color:var(--bar-strong);font:inherit;font-size:13.5px;font-weight:500;cursor:pointer;white-space:nowrap}
.portal-topbar-add:hover{background:var(--bar-action-hover)}
/* The account sits at the foot: the initials open who is signed in, the household, the appearance and Sign out. */
.portal-topbar-actions{order:4;margin-top:auto;display:flex;align-items:center;gap:8px;padding:12px 6px 0;border-top:1px solid var(--bar-3)}
.portal-topbar-avatar{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:50%;background:var(--avatar-bg);color:var(--bar-strong);font-size:11.5px;font-weight:600;text-decoration:none}
.portal-topbar-quiet{min-height:32px;padding:0 10px;border:1px solid var(--bar-line);border-radius:7px;background:transparent;color:var(--bar-text);font-size:12.5px;font-weight:500;white-space:nowrap;cursor:pointer}
.portal-topbar-quiet:hover{background:var(--bar-2);color:var(--bar-strong)}
.portal-account-menu{position:relative;flex:1;min-width:0}
.portal-account-menu>summary{display:flex;align-items:center;gap:10px;width:auto;height:auto;border-radius:8px;background:none;list-style:none;cursor:pointer;padding:2px}
.portal-account-menu>summary::-webkit-details-marker{display:none}
.portal-account-menu>summary:hover{background:var(--bar-2)}
.portal-account-initials{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:50%;background:var(--avatar-bg);color:var(--bar-strong);font-size:11.5px;font-weight:600}
.portal-account-label{display:flex;flex-direction:column;min-width:0;color:var(--bar-strong);font-size:13px;font-weight:500;line-height:1.3}
.portal-account-label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.portal-account-label small{color:var(--bar-muted);font-size:12px;font-weight:400}
.portal-account-panel{position:absolute;z-index:40;left:0;bottom:calc(100% + 6px);display:grid;min-width:15rem;max-width:min(20rem,calc(100vw - 32px));padding:6px;border:1px solid var(--border);border-radius:10px;background:var(--surface);box-shadow:var(--shadow-base)}
.portal-account-who{margin:0 0 4px;padding:8px 10px;border-bottom:1px solid var(--border);color:var(--ink);font-weight:600;overflow-wrap:anywhere}
.portal-account-item{display:flex;align-items:center;gap:8px;width:100%;min-height:40px;padding:0 10px;border:0;border-radius:7px;background:none;color:var(--ink);font:inherit;font-size:13.5px;text-align:left;text-decoration:none;cursor:pointer}
.portal-account-item:hover,.portal-account-item:focus-visible{background:var(--accent-soft)}
.portal-account-item svg{flex:none;color:var(--ink-3)}
.portal-account-sign-out{display:contents}.portal-account-panel .portal-account-sign-out{margin:0}
/* The page: titles in Instrument Serif, a kicker in sand above when a page has one. */
.portal-workspace{padding:30px 40px 48px}
.portal-page-head{margin-bottom:20px}
.portal-skin .portal-page-head h1{margin:0;font-family:var(--font-serif);font-size:36px;font-weight:400;line-height:1.06;letter-spacing:-.01em}
.portal-eyebrow{margin:0 0 6px;color:var(--sand);font-size:11.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}
.proto-footer{display:none}
/* A row's action stays near its words (Sonny 9/27: buttons far from their row are hard to follow). A page
   of one column reads at 820px; pages laid out in columns keep the full width. */
.portal-page{max-width:1148px;margin-left:0}
.portal-page:not(:has(.portal-overview-grid,.k-rec-cols,.proto-plan-grid,.organizer,.proto-profile-grid,.k-td,.beside-layout.is-split,[data-dock-layout])){max-width:820px;margin-left:0}
.portal-page:has(.k-td){max-width:none;margin-left:0}
/* The Taxes landing still names the household above its title; the sidebar already does. */
.portal-page-head:has(+.tx-page) .portal-eyebrow{display:none}
.proto-preview-bar{background:var(--sand-soft);border-bottom:1px solid var(--border)}
.proto-mobile-tabs{display:none}
@media(max-width:1023px){
  .portal-shell{grid-template-columns:minmax(0,1fr)}
  .portal-sidebar{height:auto;min-height:52px;flex-direction:row;align-items:center;gap:6px;padding:6px 10px 6px 16px}
  .portal-sidebar-brand{min-height:40px;margin-right:auto;padding:0}
  .portal-sidebar-logo{width:88px}
  .portal-sidebar .portal-wordmark{font-size:19px}
  .portal-sidebar-nav,.portal-sidebar>.portal-topbar>.portal-topbar-scope{display:none}
  .portal-scope-switch{order:1;flex:0 1 auto;max-width:42vw;margin:0}
  .portal-scope-switch>summary{min-height:36px;padding:0 24px 0 10px}.portal-scope-switch>summary::after{right:9px}
  .portal-scope-switch .portal-scope-kind{display:none}
  .portal-scope-switch ul{left:auto;right:0;min-width:15rem}
  .portal-topbar-add{order:2;min-height:36px;margin:0;padding:0 12px}
  .portal-topbar-actions{order:3;margin:0;padding:0;border:0}
  .portal-account-menu{flex:none}
  .portal-account-menu>summary{padding:5px}
  .portal-account-label{display:none}
  .portal-account-panel{left:auto;right:0;top:calc(100% + 6px);bottom:auto}
  .portal-shell-main{padding-bottom:calc(66px + env(safe-area-inset-bottom))}
  .portal-workspace{padding:18px 16px 24px}
  .portal-skin .portal-page-head h1{font-size:30px;line-height:1.08}
  .proto-mobile-tabs{position:fixed;inset:auto 0 0;z-index:40;display:flex;justify-content:space-around;padding:4px 4px env(safe-area-inset-bottom);border-top:1px solid var(--border);background:var(--surface)}
  .proto-mobile-link{display:flex;flex:1 1 0;min-width:0;min-height:58px;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--ink-3);font-size:11px;font-weight:500;text-align:center;text-decoration:none;list-style:none;cursor:pointer}
  .proto-mobile-link svg{width:22px;height:22px}
  .proto-mobile-link.is-active{color:var(--accent);font-weight:600}
  .proto-mobile-more{display:flex;flex:1 1 0;min-width:0;position:relative}
  .proto-mobile-more>summary::-webkit-details-marker{display:none}
  .proto-mobile-sheet{position:absolute;right:4px;bottom:calc(100% + 8px);display:grid;min-width:13.5rem;padding:6px;border:1px solid var(--border);border-radius:12px;background:var(--surface);box-shadow:var(--shadow-lg)}
  .proto-mobile-sheet-link{display:flex;align-items:center;gap:12px;min-height:44px;padding:0 12px;border-radius:8px;color:var(--ink);font-size:14.5px;text-decoration:none}
  .proto-mobile-sheet-link svg{width:18px;height:18px;color:var(--ink-3)}
  .proto-mobile-sheet-link.is-active{color:var(--accent);font-weight:600}.proto-mobile-sheet-link.is-active svg{color:var(--accent)}
  .proto-mobile-sheet-link:hover{background:var(--accent-soft)}
}
/* A list that opens its card has no line over its first row; the icon-only appearance switch on ink. */
.portal-overview-panel>.portal-overview-action-register:first-child>li:first-child{border-top:0}
.portal-theme-toggle{display:inline-grid;place-items:center;width:32px;height:32px;padding:0;border:1px solid var(--bar-line);border-radius:7px;background:transparent;color:var(--bar-text)}.portal-theme-toggle svg{display:block}
/* Requests (CP-095, the picked mockup): one control for with you / with Angelus / done, then one card of
   groups, each row led by its kind's tile in the kit's earth tones. */
.list-bar{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;margin-bottom:var(--space-md)}
.live-search{margin:0 0 0 auto}
.live-search-field{position:relative;display:flex;align-items:center;width:260px}
.live-search-field svg{position:absolute;left:11px;width:16px;height:16px;color:var(--portal-faint);pointer-events:none}
.live-search-field input{width:100%;min-height:36px;padding:0 12px 0 34px;border:1px solid var(--border);border-radius:var(--radius-base);background:var(--surface);color:var(--ink);font:inherit;font-size:13.5px}
.live-search-field input:focus{border-color:var(--accent);outline:2px solid var(--accent-soft);outline-offset:0}
.list-seg{display:inline-flex;gap:2px;padding:3px;border-radius:9px;background:var(--stone-gray)}
.list-seg a{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 12px;border-radius:7px;color:var(--ink-2);font-size:13px;font-weight:500;text-decoration:none;white-space:nowrap}
.list-seg a i{font-style:normal;font-size:12px;font-weight:600;color:var(--portal-faint)}
.list-seg a[aria-current=page]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}
/* The switch's pill (Sonny 9/30, the kit's segmented control): a white pill of its own sits under the current option and is the only
   thing that moves; the labels stay put and change colour. The page script adds it (has-pill) and slides it to the option clicked at once,
   while the list follows. Without the script, or on a phone (chips), the current option keeps its own background. */
.list-seg{position:relative}
.list-seg a{position:relative;z-index:1;transition:color .12s ease}
.list-seg-pill{display:none}
@media(min-width:701px){
.list-seg.has-pill>.list-seg-pill{display:block;position:absolute;z-index:0;left:0;top:0;width:0;height:0;border-radius:7px;background:var(--surface);box-shadow:var(--shadow-sm);pointer-events:none}
.list-seg.has-pill>.list-seg-pill.is-moving{transition:left .16s cubic-bezier(.2,.8,.2,1),width .16s cubic-bezier(.2,.8,.2,1)}
.list-seg.has-pill a[aria-current=page]{background:transparent;box-shadow:none}
}
@media(prefers-reduced-motion:reduce){.list-seg a,.list-seg-pill.is-moving{transition:none!important}}
.list-group{margin:0;padding:var(--space-md) var(--panel-inset) var(--space-xs);border-top:1px solid var(--line-soft);color:var(--portal-faint);font-size:11.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase}
.list-card>.list-group:first-child{border-top:0}
.list-card>.portal-overview-action-register>li:first-child{border-top:1px solid var(--line-soft)}
.kind-tile{display:grid;place-items:center;width:32px;height:32px;border-radius:9px;flex:none}.kind-tile svg{width:16px;height:16px}
.kind-tile[data-kind=document]{background:var(--sand-soft);color:var(--sand)}
.kind-tile[data-kind=form],.kind-tile[data-kind=information],.kind-tile[data-kind=doorway]{background:var(--accent-soft);color:var(--accent)}
.kind-tile[data-kind=task]{background:var(--forest-green-soft);color:var(--forest-green)}
.kind-tile[data-kind=signature]{background:var(--angelus-red-soft);color:var(--terra)}
.portal-overview-action-register li:has(>.kind-tile){grid-template-columns:auto minmax(0,1fr) auto}
/* A checkbox task's line can be long ("Please schedule a time with Sonny to discuss..."): on a computer it sits under the
   title across the row, so it never squeezes the title to a letter a line (Sonny 9/28, the bulk-send preview). */
/* A row's reply box: its file picker lies over the Attach button, not beside it, as on the request's own page. */
.portal-skin .portal-overview-action-register li .reply-attach-button input[type=file]{position:absolute}
@media(max-width:700px){
  /* A phone (the picked mockup): the filters are one scrolling row of chips; each row keeps its tile. */
  .list-bar{flex-direction:column;align-items:stretch;gap:var(--space-sm)}
  .list-seg{min-width:0;contain:inline-size;gap:8px;padding:0;background:none;overflow-x:auto;scrollbar-width:none;margin:0 calc(var(--space-lg) * -1);padding:0 var(--space-lg)}
  .list-seg a{min-height:36px;padding:0 14px;border:1px solid var(--border-strong);border-radius:999px;background:var(--surface)}
  .list-seg a[aria-current=page]{background:var(--ink);border-color:var(--ink);color:var(--surface);box-shadow:none}.list-seg a[aria-current=page] i{color:inherit;opacity:.75}
  .live-search{margin:0}.live-search-field{width:100%}.live-search-field input{min-height:44px;font-size:16px}
  .kind-tile{width:30px;height:30px}
}
/* A request open beside the list (CP-095, the Requests board): on a computer the list keeps its place and
   the request reads in the aside, which stays in view while the list scrolls. Its name is the item, not
   a heading (Sonny 9/27: a heading style is too styled for a request). */
.beside-layout.is-split{display:grid;grid-template-columns:minmax(0,1fr) 440px;gap:var(--space-lg);align-items:start}
.beside-layout.is-split :is(.list-card,.k-req-card) li[data-open]{position:relative;cursor:pointer}
.beside-layout.is-split :is(.list-card,.k-req-card) li[data-open]:hover{background:var(--paper)}
.beside-layout.is-split :is(.list-card,.k-req-card) li.is-open{background:var(--accent-soft)}
.beside-layout.is-split :is(.list-card,.k-req-card) li.is-open::before{content:'';position:absolute;left:4px;top:var(--space-sm);bottom:var(--space-sm);width:3px;border-radius:3px;background:var(--accent)}
.beside-open{position:sticky;top:var(--space-lg);max-height:calc(100vh - var(--space-lg) * 2);overflow:auto;padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);transition:opacity .15s}
.beside-open[aria-busy=true]{opacity:.55}
/* Today (Sonny 9/29, the picked board; CP-095 cp-91): the open request is a flush column docked on the right of the page's
   modules, under the cover, a divider on its left only, its own scroll. The modules keep the full width until a request
   is opened; the chosen row wears the inset bar. */
.k-td [data-dock-layout].is-split{grid-template-columns:minmax(0,1fr) 440px;gap:0;align-items:start}
[data-dock-layout].is-split :is(li[data-open],li[data-card]){cursor:pointer}
[data-dock-layout].is-split :is(li[data-open],li[data-card]):hover{background:var(--paper)}
[data-dock-layout].is-split li.is-open{background:var(--accent-soft)}
[data-dock-layout].is-split li.is-open::before{content:'';position:absolute;left:3px;top:7px;bottom:7px;width:3px;border-radius:3px;background:var(--accent)}
.k-td [data-dock-layout]>.beside-open{align-self:stretch;position:static;max-height:none;overflow:visible;padding:0;border:0;border-left:1px solid var(--border);border-radius:0;background:var(--surface)}
.k-td [data-dock-layout]>.beside-open>.beside-body{position:sticky;top:0;max-height:100vh;overflow:auto;padding:0 20px 20px}
/* Requests (Sonny 9/30: "undock that right column"): the open request is a card beside the list, in the page's frame, not a column
   on the window's edge. The frame starts at the portal's left edge: the list keeps 640 to 720px (the longest synthetic title and its
   one-line purpose need 700 on one line), the card 400 to 420px, 20px apart, and the header above (title, tabs, search) is the
   same width. The card's column is reserved whether or not a request is open, so the list never changes width or place. The card is an
   ordinary card: rounded, its own scroll, held in view while the list scrolls. Under 1400px there is no room for both: the frame is one
   column at the reading width and a row opens the request's own page, as on a phone (the page script checks the same width). */
.portal-page:has(.is-undocked){max-width:820px}
.is-undocked>.beside-open{padding:0}
.is-undocked>.beside-open>.beside-body{padding:0 20px 20px}
@media(min-width:1400px){
/* A scrollbar coming or going (a short list, a long card) must not change the list's width. */
html:has(.is-undocked){scrollbar-gutter:stable}
.portal-page:has(.is-undocked){max-width:1160px}
.beside-layout.is-undocked{display:grid;grid-template-columns:minmax(640px,720px) minmax(400px,420px);gap:20px;align-items:start}
/* The tabs and search are the layout's first row, in the list's column (Sonny 9/30: the search aligns with the right of the first column): the
   tabs stand at the list's left edge and the search ends at its right edge, whatever the width, and never reach over the card. The card
   keeps starting at the list's top, in the second row. */
.beside-layout.is-undocked{row-gap:0}
.is-undocked>.list-bar{grid-column:1;grid-row:1}
.is-undocked>.beside-main{grid-column:1;grid-row:2}
.is-undocked>.beside-open{grid-column:2;grid-row:2}
/* At the narrowest the search gives way to the tabs rather than dropping under them. */
.is-undocked>.list-bar{flex-wrap:nowrap}
.is-undocked>.list-bar>.k-req-search{flex:0 1 auto;min-width:0}
.is-undocked>.list-bar .k-req-field{flex:0 1 260px;width:auto;min-width:160px}
.is-undocked>.beside-open{top:20px;max-height:calc(100vh - 40px);animation:beside-in .15s cubic-bezier(.2,.8,.2,1)}
}
/* Under 1400px and above a phone there is no room for the card, so the request opens in the list (Sonny 9/30, an accordion): directly under
   its row, in the row's own column, one at a time. The row keeps the current-row bar; the body is indented to the row's text edge (the
   panel's inset, the tile, the gap) and shares the list's dividers. Scroll anchoring is off here because the page keeps the row where it was itself. */
.beside-layout.is-undocked{overflow-anchor:none}
.is-inline :is(li[data-open],li[data-card]){cursor:pointer}
.is-inline :is(li[data-open],li[data-card]):hover{background:var(--paper)}
.is-inline li.is-open::before{content:'';position:absolute;left:3px;top:7px;bottom:7px;width:3px;border-radius:3px;background:var(--accent)}
.request-inline>.beside-open{position:static;max-height:none;overflow:visible;padding:0;border:0;border-radius:0;background:none;transition:none}
.request-inline>.beside-open:empty{min-height:96px}
.request-inline>.beside-open:not([hidden]){animation:inline-in .15s cubic-bezier(.2,.8,.2,1)}
li.request-inline>.beside-open .portal-page-head{margin:0 0 14px;padding:14px 0 12px}
@keyframes inline-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.request-inline>.beside-open:not([hidden]){animation:none}}
@keyframes beside-in{from{opacity:0;transform:translateX(8px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.is-undocked>.beside-open{animation:none}}
.beside-close{flex:none;min-width:0;width:36px;padding:0;border-color:transparent;background:none;font-size:20px;line-height:1}
.beside-open:empty{min-height:320px}
.beside-open .portal-page-head{display:block;margin:0 0 var(--space-md)}
[data-dock-layout] .beside-open .portal-page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin:0 -20px 14px;padding:16px 20px 12px;border-bottom:1px solid var(--line-soft)}
.beside-open .portal-page-head .portal-eyebrow{margin:0 0 4px;font-size:11.5px;letter-spacing:.08em}
.beside-title{margin:0;font-size:18px;font-weight:600;line-height:1.3;outline:0}
.beside-open .portal-page-head p:not(.portal-eyebrow){margin:6px 0 0;color:var(--ink-2);font-size:13px}
.beside-full{display:inline-block;margin-top:var(--space-md);font-size:13px;font-weight:500;color:var(--accent)}
.beside-open .proto-panel-stack{gap:var(--space-md)}
/* Inside the aside every section is one column divided by a line (Sonny 9/27: no box within the box), its heading,
   notes and rows flush with the aside's own edge. */
.beside-open .portal-overview-panel,.beside-open .k-rq.request-view{padding:var(--space-md) 0 0;border:0;border-top:1px solid var(--line-soft);border-radius:0;box-shadow:none;background:none}
.beside-open>.proto-panel-stack>.portal-overview-panel:first-child{padding-top:0;border-top:0}
.beside-open .portal-overview-section-title{padding:0 0 var(--space-xs)}
.beside-open .portal-overview-panel .proto-panel-note,.beside-open .portal-overview-panel>p{padding-left:0;padding-right:0}
.beside-open .portal-overview-action-register>li{padding-left:0;padding-right:0}
@media(prefers-reduced-motion:reduce){.beside-open{transition:none}}
/* A send waiting out its Undo (CP-095): one quiet bar at the foot of the screen, above the phone tabs. */
.send-hold{position:fixed;left:50%;bottom:var(--space-xl);z-index:60;display:flex;align-items:center;gap:var(--space-md);padding:10px 10px 10px 16px;border-radius:var(--radius-base);background:var(--bar);color:var(--bar-strong);font-size:14px;box-shadow:var(--shadow-lg);transform:translateX(-50%)}
.send-hold button{min-height:32px;padding:0 12px;border:0;border-radius:var(--radius-sm);background:transparent;color:inherit;font:inherit;font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.send-hold button:hover{background:var(--bar-3)}
@media(max-width:700px){.send-hold{bottom:calc(84px + env(safe-area-inset-bottom));width:calc(100% - var(--space-lg) * 2);justify-content:space-between}}
/* Documents (CP-095, the Documents board): rows say what a file is and end with its date; the list ends in a
   place to drop files; a document's page leads with its first page, then its facts and actions. */
.doc-date{color:var(--ink-2);font-size:13px;white-space:nowrap;font-variant-numeric:tabular-nums}
.list-select select{min-height:36px;padding:0 30px 0 12px;border:1px solid var(--border);border-radius:var(--radius-base);background-color:var(--surface);color:var(--ink);font:inherit;font-size:13.5px}
.live-search:has(.list-select){display:flex;gap:var(--space-sm)}
.doc-drop{display:flex;align-items:center;justify-content:center;gap:8px;min-height:44px;margin:var(--space-sm) var(--panel-inset) var(--panel-inset);border:1.5px dashed var(--border-strong);border-radius:var(--radius-base);color:var(--ink-2);font-size:13.5px;cursor:pointer}
.doc-drop svg{width:16px;height:16px}.doc-drop u{color:var(--accent);font-weight:500;text-decoration:none}
.doc-drop:hover{border-color:var(--accent);background:var(--accent-soft)}
.doc-view{display:grid;gap:var(--space-md);padding:var(--panel-inset)}
.doc-thumb{display:grid;place-items:center;height:230px;border-radius:var(--radius-base);background:var(--stone-gray);color:var(--portal-faint);overflow:hidden}
.doc-thumb>svg{width:40px;height:40px}
.doc-thumb-page,.doc-thumb-image{max-width:calc(100% - 24px);max-height:calc(100% - 24px);height:auto;width:auto;background:var(--surface);box-shadow:var(--shadow-base)}
.doc-thumb-page{height:calc(100% - 24px)}
.facts{display:grid;grid-template-columns:96px minmax(0,1fr);gap:8px 12px;margin:0;font-size:13.5px}
.facts>div{display:contents}.facts dt{color:var(--ink-2)}.facts dd{margin:0;min-width:0;overflow-wrap:anywhere}
.doc-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
/* Asking about a file is rarely needed (Sonny 9/27): a quiet text link beside Read and Download, not a button. */
.doc-actions .doc-ask{margin-left:auto;padding:0 2px;color:var(--ink-2);font-size:13px;font-weight:400;text-decoration:none}.doc-actions .doc-ask:hover{text-decoration:underline}
.beside-open .doc-view{padding:0}
@media(max-width:700px){
  .live-search:has(.list-select) .live-search-field{flex:1 1 0;min-width:0;width:auto}
  .list-select select{min-height:44px;font-size:16px}
  .doc-thumb{height:260px}
}
/* An open request (CP-095, the board "A request, open"): one column of kind, title, facts, words, messages and
   one main action; quiet links beside it open the rarer paths. */
.request-view{display:grid;gap:var(--space-md);padding:var(--panel-inset)}
/* A request or a document is an item even on its own page (Sonny 9/27): its name is plain strong text; the serif
   stays with section pages (Today, Requests, Documents). */
.portal-skin .portal-page:is(:has(>.portal-page-head+.proto-panel-stack>:is(.request-view,.doc-view,.convo-view)),:has(>.portal-page-head+.proto-panel-stack.work-view)) .portal-page-head h1{font-family:inherit;font-size:22px;font-weight:600;line-height:1.25;letter-spacing:0}
@media(max-width:700px){.portal-skin .portal-page:is(:has(>.portal-page-head+.proto-panel-stack>:is(.request-view,.doc-view,.convo-view)),:has(>.portal-page-head+.proto-panel-stack.work-view)) .portal-page-head h1{font-size:20px}}
.beside-open .request-view,.beside-open .k-rq.request-view{padding:0}
.request-state:empty{display:none}
.request-thread{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-sm)}
.request-thread>li.thread-item{padding:0;border:0}
.request-thread[hidden]{display:none}
.request-view .reply-composer,.request-view .confirm-task,.request-view .request-upload,.request-view>.request-note,.request-view>.ask-panel,.request-view>.ask-sent,.request-view>.reply-other[open]{padding-top:var(--space-md);border-top:1px solid var(--line-soft)}
.js-folds details[data-fold]:not([open]){display:none}
.reply-tools .reply-existing>summary{list-style:none}.reply-tools .reply-existing>summary::-webkit-details-marker{display:none}
.beside-full{padding-top:var(--space-md);border-top:1px solid var(--line-soft);width:100%}
.thread-who{margin:0 0 4px 2px;color:var(--ink-2);font-size:12px}
.thread-bubble{padding:10px 12px;border-radius:12px;background:var(--stone-gray);font-size:13.5px;line-height:1.5}
.thread-item.is-mine .thread-bubble{background:var(--accent-soft)}
.thread-bubble>:first-child{margin-top:0}.thread-bubble>:last-child{margin-bottom:0}
.request-note{padding:12px 14px;border-radius:10px;background:var(--sand-soft);color:var(--ink-2);font-size:13px;line-height:1.5}
.request-why>summary{cursor:pointer;color:var(--ink-2);font-size:13px;font-weight:500}
.opts{display:grid;gap:6px}
.opt{display:flex;align-items:center;gap:10px;min-height:40px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-base);background:var(--surface);font-size:13.5px;cursor:pointer}
.opt input{margin:0;accent-color:var(--accent)}
.opt:has(input:checked),.opt-fold[open]>summary.opt{border-color:var(--accent);background:var(--accent-soft)}
.opt-fold>summary{list-style:none}.opt-fold>summary::-webkit-details-marker{display:none}
.reply-other .opt-fold>summary.opt{min-height:40px;color:var(--ink);font-size:13.5px;font-weight:400;text-decoration:none}
.opt-fold-body{display:grid;gap:8px;padding:10px 2px 2px}
.quiet-link{margin-left:auto;padding:0 2px;border:0;background:none;color:var(--ink-2);font:inherit;font-size:13px;cursor:pointer}
.quiet-link:hover{text-decoration:underline}
.js-folds details[data-fold]>summary{display:none}
.request-view .reply-actions{margin-top:0}
.request-view .reply-other,.request-view .reply-existing{margin-top:0}
.reply-panel{display:grid;gap:var(--space-sm)}
.reply-tools{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs) var(--space-lg)}
.reply-tools .reply-attach{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs)}
.reply-tools .reply-attach-button{display:inline-flex;align-items:center;gap:6px;min-height:32px;color:var(--accent);font-size:13px;font-weight:500}
.reply-tools .reply-attach-button svg{width:15px;height:15px}
.reply-tools .reply-existing>summary{min-height:32px;color:var(--accent);font-size:13px;font-weight:500;text-decoration:none}
.request-upload{display:grid;gap:var(--space-xs)}
.request-view>.request-handoff>summary{min-height:32px;color:var(--ink-2);font-size:13px;font-weight:400}
/* Saying why a file won't come replaces the drop area, and its way back sits beside Send (the board's fourth panel). */
.request-view:has(.reply-other[open]) .request-upload,.request-view:has(.reply-other[open]) .request-fold-row{display:none}.request-upload [data-request-upload-title]:empty{display:none}
.request-upload .doc-drop{margin:0}
/* Messages (CP-095, the Messages board): the conversations, and the one you pick beside them, wider than a
   request because a conversation reads long. Each message carries its sender's initials, name and day. */
.beside-layout.beside-convo.is-split{grid-template-columns:380px minmax(0,1fr)}
.convo-list li{align-items:start}
.convo-list .proto-document-title{display:inline-flex;align-items:center;gap:7px}
.convo-list li.is-unread .proto-document-title{font-weight:600}
.proto-request-list .portal-overview-register-copy small.convo-last{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.convo-tag{display:inline-block;margin-top:6px;padding:2px 8px;border-radius:999px;background:var(--stone-gray);color:var(--ink-2);font-size:11.5px;font-weight:500}
.newdot{width:7px;height:7px;flex:none;border-radius:50%;background:var(--accent)}
.convo-view{display:grid;gap:0;padding:0}
.convo-view>*:not(.convo):not(.convo-reply){margin:var(--panel-inset) var(--panel-inset) 0}
.convo-private{margin:4px 0 0;color:var(--ink-2);font-size:13px}
.convo{list-style:none;margin:var(--space-sm) 0 0;padding:0}
.convo-msg{display:flex;gap:12px;padding:16px var(--panel-inset);border-top:1px solid var(--line-soft)}
.convo-msg:first-child{border-top:0}
.convo-av{display:grid;place-items:center;width:30px;height:30px;flex:none;border-radius:50%;background:var(--bar-3);color:var(--bar-strong);font-size:11.5px;font-weight:600}
.convo-msg.is-angelus .convo-av{background:var(--accent-soft);color:var(--accent)}
.convo-body{min-width:0;flex:1}
.convo-head{font-size:13px}.convo-head strong{font-weight:600}.convo-head span{color:var(--ink-2)}
.convo-body p{margin:4px 0 0;font-size:14px;line-height:1.55;color:var(--ink)}
.convo-reply{display:grid;gap:10px;padding:14px var(--panel-inset) var(--panel-inset);border-top:1px solid var(--line-soft)}
.convo-reply textarea{display:block;width:100%;min-height:5rem;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-base);background:var(--surface);color:var(--ink);font:inherit;font-size:14px;resize:vertical}
.convo-reply .reply-actions{justify-content:flex-end;margin-top:0}
.beside-open .convo-view{margin:0 calc(var(--space-lg) * -1)}
.beside-open .convo-view>.convo-reply{padding-bottom:0}
/* Taxes and the return (CP-095, their boards): figures in the plan-package style, tables with a firm rule,
   the return's road across the top and two columns beneath. */
.tx-kicker{margin:var(--space-md) 0 calc(var(--space-xs) * -1);color:var(--sand);font-size:11.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}
.tx-chip{display:inline-flex;align-items:center;margin-left:8px;padding:2px 9px;border-radius:999px;background:var(--sand-soft);color:var(--sand);font-size:12px;font-weight:500;vertical-align:1px}
.figs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--ink);border-bottom:1px solid var(--border)}
.figs[data-n="1"]{grid-template-columns:minmax(0,1fr)}.figs[data-n="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}.figs[data-n="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}
.fig{padding:12px 18px 14px 0}.fig+.fig{padding-left:18px;border-left:1px solid var(--border)}
.fig span{display:block;color:var(--ink-2);font-size:12.5px;font-weight:500}
.fig b{display:block;margin:4px 0 2px;font-family:var(--font-serif);font-size:32px;font-weight:400;line-height:1.1;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.fig small{color:var(--ink-2);font-size:12.5px}.fig small.warn{color:var(--terra);font-weight:500}
.tx-table-wrap{overflow-x:auto;padding:4px var(--panel-inset) 6px}
.tx-table{width:100%;border-collapse:collapse;font-size:13.5px;font-variant-numeric:tabular-nums}
.tx-table th{padding:8px 10px 8px 0;border-bottom:1px solid var(--ink);color:var(--ink-2);font-size:12px;font-weight:600;text-align:left}
.tx-table td{padding:9px 10px 9px 0;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.tx-table .r{text-align:right;padding-right:0;padding-left:10px;white-space:nowrap}
.tx-table tr.tot td{border-top:1px solid var(--ink);border-bottom:0;font-weight:600}
.tx-table td small{display:block;color:var(--ink-2);font-size:12px}
.tx-state{display:flex;align-items:center;justify-content:flex-end;gap:8px}
.tx-state .portal-overview-row-action{min-height:28px}
.tx-year{font-weight:600}.tx-links{text-align:right}.tx-links a{font-weight:500}.tx-links a+a{margin-left:16px}
.tx-payments-foot{display:grid;gap:6px;padding:6px var(--panel-inset) 12px;font-size:13px}.tx-from{margin:0;color:var(--ink-2)}.tx-from a{font-weight:500}
.estimate-chip.is-done{background:var(--forest-green-soft);color:var(--forest-green)}.estimate-chip.is-missing{background:var(--angelus-red-soft);color:var(--terra)}
.tx-crumb{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--ink-2);font-size:13px}.tx-crumb a{color:var(--ink-2)}
.tx-head-actions{display:flex;align-items:center;gap:10px}
.tx-return{display:grid;gap:var(--space-md)}
.tx-road-card{padding:22px 24px 20px}
.tx-road{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}
.tx-road li{position:relative;display:flex;flex-direction:column;gap:4px;padding-right:12px}
.tx-road li::before{content:'';position:absolute;top:10px;left:22px;right:0;height:2px;background:var(--border)}
.tx-road li:last-child::before{display:none}.tx-road li.is-done::before{background:var(--forest-green)}
.tx-road i{position:relative;z-index:1;display:grid;place-items:center;width:22px;height:22px;box-sizing:border-box;border:2px solid var(--border-strong);border-radius:50%;background:var(--surface)}
.tx-road .is-done i{border-color:var(--forest-green);background:var(--forest-green)}
.tx-road .is-current i{border-color:var(--accent);background:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.tx-road .is-current i::after{content:'';width:6px;height:6px;border-radius:50%;background:var(--surface)}
.tx-road b{margin-top:6px;font-size:13px;font-weight:600}.tx-road .is-ahead b{color:var(--ink-2);font-weight:500}
.tx-road small{color:var(--ink-2);font-size:12px;line-height:1.35}
.tx-cols{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:var(--space-lg);align-items:start}
.tx-main,.tx-side{display:grid;gap:var(--space-md);min-width:0}
.tx-docs{display:grid;gap:var(--space-md)}
.tx-count{display:inline-block;margin-left:4px;padding:1px 8px;border-radius:999px;background:var(--stone-gray);color:var(--ink-2);font-size:12px;font-weight:600}
.tx-cover{padding:10px var(--panel-inset) var(--panel-inset);border-top:1px solid var(--line-soft)}
.tx-cover .season-cover>summary{display:flex;align-items:center;justify-content:center;min-height:42px;border:1.5px dashed var(--border-strong);border-radius:var(--radius-base);color:var(--ink-2);font-size:13.5px;cursor:pointer;list-style:none}
.tx-stage{display:grid;gap:var(--space-sm);padding:var(--panel-inset)}.tx-stage .season-line{margin:0;font-size:16px;font-weight:600}
.tx-person{display:flex;align-items:center;gap:12px;padding:14px var(--panel-inset)}
.tx-person div{flex:1;min-width:0}.tx-person small{display:block;color:var(--ink-2);font-size:12px}.tx-person strong{font-size:14px;font-weight:600}
.portal-page:has(.tx-return){max-width:1148px}
@media(max-width:900px){
  .tx-cols{grid-template-columns:minmax(0,1fr)}
  .figs{grid-template-columns:repeat(2,minmax(0,1fr))}.fig:nth-child(odd){padding-left:0;border-left:0}.fig:nth-child(n+3){border-top:1px solid var(--border)}
  .tx-road{grid-template-columns:repeat(5,minmax(0,1fr))}.tx-road small{display:none}
  .tx-road-card{padding:16px}
  .tx-head-actions{flex-wrap:wrap}
}
/* Reporting a payment in its row on Taxes (CP-095). */
.tx-table .estimate-form-row td{padding:10px 0 14px;background:var(--paper)}
.tx-table .estimate-report-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.tx-table .estimate-report-actions{display:flex;gap:8px;margin-top:10px}
.portal-overview-row-action.is-quiet{border-color:transparent;background:none;color:var(--ink-2)}
.tx-payments-foot .estimate-how>summary{cursor:pointer;color:var(--ink-2);font-size:13px;font-weight:500}
.tx-payments-foot .estimate-how p{margin:6px 0 0;color:var(--ink-2);font-size:13px;line-height:1.5}
@media(max-width:700px){.tx-table .estimate-report-fields{grid-template-columns:minmax(0,1fr)}}
/* Taxes in two columns, How to pay as a card, a change told in place (CP-095, Sonny 9/27). */
.portal-page:has(.tx-page .tx-cols){max-width:1148px}
@media(min-width:901px){.tx-year-cols{grid-template-columns:minmax(0,1fr) 320px}}
.fig b{white-space:nowrap}
@media(min-width:701px){.tx-table td:nth-child(-n+2){white-space:nowrap}}
.portal-overview-row-action>svg{width:15px;height:15px;flex:none}
a.portal-overview-row-action:has(>svg){display:inline-flex;align-items:center;gap:6px}
.tx-page>.taxyear-change{margin-bottom:var(--space-sm)}
.tx-pay{display:grid}
.tx-pay-auth{display:grid;gap:10px;padding:14px var(--panel-inset);border-top:1px solid var(--line-soft)}
.tx-pay-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.tx-pay-head b{font-size:14px;font-weight:600}.tx-pay-head small{color:var(--ink-2);font-size:12px}
.tx-pay-go{justify-content:center;width:100%;box-sizing:border-box}
.tx-pay-pick{display:grid;gap:4px;margin:0}
.tx-pay-pick div{display:grid;gap:1px;font-size:13px}
.tx-pay-pick dt{color:var(--ink-2);font-size:12px}.tx-pay-pick dd{margin:0;font-weight:500}
.tx-pay-mail{margin:0;font-size:13px;line-height:1.45;color:var(--ink)}
.tx-pay-mail span,.tx-pay-after b{display:block;color:var(--ink-2);font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin-bottom:2px}
.tx-pay-after{margin:0;padding:12px var(--panel-inset) 14px;border-top:1px solid var(--line-soft);background:var(--paper);font-size:13px;line-height:1.45;border-radius:0 0 var(--radius-lg,12px) var(--radius-lg,12px)}
.tx-pay-mail a{color:var(--accent);font-weight:500}
/* Taxes' tables on a phone: each row stacks, name and date left, amounts right, state below (CP-095). */
@media(max-width:700px){
  .tx-table-wrap{overflow:visible;padding-top:0}
  .tx-table,.tx-table tbody{display:block}.tx-table thead{display:none}
  .tx-table tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;padding:12px 0;border-bottom:1px solid var(--line-soft)}
  .tx-table td{display:block;padding:0;border:0;word-break:normal;overflow-wrap:normal;min-width:0}
  .tx-table td:empty{display:none}
  .tx-table td:nth-child(1){grid-column:1;grid-row:1;font-weight:500}
  .tx-table td:nth-child(2){grid-column:1;grid-row:2;color:var(--ink-2);font-size:12.5px}
  .tx-table td:nth-child(3){grid-column:2;grid-row:1;text-align:right}
  .tx-table td:nth-child(4){grid-column:2;grid-row:2;text-align:right;font-size:12.5px}
  .tx-table td:nth-child(5){grid-column:1/-1;grid-row:3}
  .tx-table .tx-state{justify-content:flex-start;margin-top:6px}
  .estimate-row td:nth-child(3)::before,.tx-table tr.tot td:nth-child(3)::before{content:'Planned ';color:var(--ink-2);font-size:12px}
  .estimate-row td:nth-child(4)::before,.tx-table tr.tot td:nth-child(4)::before{content:'Paid ';color:var(--ink-2)}
  .tx-table tr.tot{border-top:1px solid var(--ink);border-bottom:0}.tx-table tr.tot td{border:0}
  .tx-table .estimate-form-row{display:block;padding:0 0 12px}.tx-table .estimate-form-row[hidden]{display:none}.tx-table .estimate-form-row td{display:block}
  .estimate-row td:nth-child(3):has(.estimate-dim){display:none}
  .tx-history .tx-table td.tx-result{font-size:13px}
  .tx-history .tx-table td.tx-links{grid-column:1/-1;grid-row:3;white-space:normal;margin-top:4px;text-align:left}
}
.tx-history .tx-table td.tx-result{white-space:nowrap}
/* On a phone the year reads in order of use: payments, how to pay them, what is kept, then past years. */
@media(max-width:900px){
  .tx-year-cols{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-md)}
  .tx-year-cols>.tx-main,.tx-year-cols>.tx-side{display:contents}
  .tx-year-cols .tx-pay{order:1}.tx-year-cols .tx-kept{order:2}.tx-year-cols .tx-history-kick,.tx-year-cols .tx-history{order:3}
}
.view-as-bar.is-drafts{flex-wrap:wrap;gap:10px}.view-as-send{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0}.view-as-send label{display:flex;gap:6px;align-items:center;font-weight:500}
.view-as-send button{font-weight:600}
.view-as-send button{padding:5px 14px;border-radius:999px;border:1px solid var(--ink);background:var(--ink);color:var(--surface);font:inherit;font-weight:600;cursor:pointer}
.view-as-send select{font:inherit;padding:3px 6px;border-radius:6px;border:1px solid var(--border)}
.request-files-to{margin:8px 0 0;font-size:13px;color:var(--ink-3,var(--ink-2))}
.ask-attached .information-request-files{margin:6px 0 0}

/* A request's own button (CP-107) waits in its card or page on a phone, so the row stays one line. */
@media(max-width:700px){.portal-overview-action-register .request-row-actions>.request-link{display:none}}
/* Under its row the request needs no header of its own: the row above already names it and its kind (Sonny 9/30). Close is the row, or Esc. */
li.request-inline>.beside-open .portal-page-head{display:none}
/* One rule under the open request's header, not the header's and the first panel's both. */
[data-dock] .portal-page-head+.proto-panel-stack>.portal-overview-panel:first-child{border-top:0}
/* ======== Today (UI-073): the shared block draws the page (app/kit/blocks/today.css, in /kit-portal.css), For you with the
   shared Requests block (requests.css). Here only what the page itself places: the frame around it (edge to edge; the cover
   bleeds to the window's edges). ======== */
.portal-shell[data-guided] .portal-workspace.portal-content:has(.k-td){padding:0 0 56px}
@media(max-width:700px){.portal-shell[data-guided] .portal-workspace.portal-content:has(.k-td){padding:0 0 24px}}
