/* CrewTend layout contract. Content widths exclude the shared outer gutters.
   Legacy selector aliases below are migration adapters, not new page widths. */
:root{--ct-prose:48rem;--ct-standard:68rem;--ct-wide:97.5rem;--ct-workspace:100%;--ct-gutter:clamp(1rem,2.5vw,3rem);--ct-gap:clamp(1rem,1.5vw,1.75rem);--ct-card-min:16rem;--ct-page-width:var(--ct-wide)}
/* Keep public headlines readable: wrap at words, never through “business”. */
.publicmode :is(.salesintro,.salessection,.product-story102,.free-estimate102,.product102) :is(h1,h2){word-break:normal;overflow-wrap:normal;hyphens:none}
[data-layout="prose"]{--ct-page-width:var(--ct-prose)}
[data-layout="standard"]{--ct-page-width:var(--ct-standard)}
[data-layout="wide"]{--ct-page-width:var(--ct-wide)}
[data-layout="workspace"]{--ct-page-width:var(--ct-workspace)}
.ct-container{box-sizing:border-box;width:100%;max-width:calc(var(--ct-page-width) + 2 * var(--ct-gutter));margin-inline:auto;padding-inline:var(--ct-gutter);min-width:0}
.ct-container .ct-container{width:100%;max-width:var(--ct-page-width);padding-inline:0}
.ct-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--ct-card-min)),1fr));gap:var(--ct-gap);align-items:stretch}
.ct-grid>*{min-width:0}.ct-prose{max-width:var(--ct-prose)}
/* Public shell: header, breadcrumbs, section boundaries and footer use the
   same grid. Introductory copy can keep its existing readable line length. */
body.publicmode #app{max-width:none;padding:0}
.publicmode :is(.salesnav,.saleshero,.salessection,.salesfeaturehero,.markethero,.marketsection,.marketpageintro,.industrydetailhero,.industrybody,.product102,.product-story102,.free-estimate102,.publicplans,.toolheading,.documentworkbench,.m96-public,.website50-hero,.cleaning50-public,.catalog52-controls,.catalog52-results,.catalog52-feature,.media52-section,.texas56,.franchise60-hero,.franchise60-start,.ct-connect-hero,.ct-section,.ct-control-section,.ct-home-ai,.trade-hero49,.trade-flow49,.native-compare-intro,.managed-marketing,.footer102-intro,.footer102-grid,.footer102-texas,.footer102-bottom,.public91-breadcrumbs,.public91-related),.publicmode #role-demos{box-sizing:border-box;width:100%;max-width:calc(var(--ct-wide) + 2 * var(--ct-gutter));margin-inline:auto;padding-inline:var(--ct-gutter)}
.publicmode :is(.salessection,.marketsection,.industrybody,.product102,.documentworkbench) :is(.salessection,.marketsection,.marketpageintro,.product102,.toolheading,.documentworkbench){max-width:100%;padding-inline:0}
.publicmode .saleshuman{max-width:calc(var(--ct-wide) + 2 * var(--ct-gutter));margin-inline:auto;padding-inline:var(--ct-gutter)}
.publicmode .salesintro{max-width:calc(var(--ct-wide) + 2 * var(--ct-gutter));margin-inline:auto;padding-inline:var(--ct-gutter)}
.publicmode .salesintro>p{max-width:var(--ct-prose);margin-inline:auto}
.publicmode .setup-layout.setup50{width:calc(100% - 2 * var(--ct-gutter));max-width:var(--ct-wide)}
.publicmode :is(.publicguide,.case-story){max-width:var(--ct-prose);margin-inline:auto}
.publicmode :is(.salesauth,.welcome50){max-width:calc(var(--ct-standard) + 2 * var(--ct-gutter));padding-inline:var(--ct-gutter)}
.publicmode .legal95{max-width:calc(var(--ct-wide) + 2 * var(--ct-gutter));padding-inline:var(--ct-gutter)}
.publicmode .legal95 :is(article,.legal95-content){max-width:var(--ct-prose)}
.publicmode #role-demos .roleexperiencegrid,.ct-grid{grid-auto-rows:1fr;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--ct-card-min)),1fr));gap:var(--ct-gap)}
.publicmode #role-demos .roleexperiencegrid article{grid-column:auto;padding:24px;min-width:0;display:flex;flex-direction:column}
.publicmode #role-demos .roleexperiencegrid .btn{margin-top:auto;white-space:normal}
/* App shell owns gutters; children consume its available width. Fixed map and
   capture canvases intentionally retain their viewport-specific rules. */
body:not(.publicmode):not(.tech-map92) main #app{box-sizing:border-box;width:100%;max-width:calc(var(--ct-page-width) + 2 * var(--ct-gutter))!important;padding-inline:var(--ct-gutter)!important;min-width:0}
body:not(.publicmode)>main>header{padding-inline:var(--ct-gutter)}
body:not(.publicmode) #app :is(.client-page,.drive-workspace,.document-tool-layout,.estimate-page,.studio50,.blueprint,.reports93,.estimate53,#automations84,#gallery84,.bank87,.import87,.truck87){width:100%;max-width:100%;margin-inline:0;min-width:0}
body:not(.publicmode) #app :is(.drive-workspace,.document-tool-layout,.estimate53){padding-inline:0}
body:not(.publicmode) #app :is(.security94,.orderstudio,.billing-hold-settings,.settings-home78,.card-layout74,.card-page-head74,.estimate-survey81){max-width:var(--ct-standard);margin-inline:0}
body:not(.publicmode) :is(.pagehead,.panelhead,.workflowbar,.focusedfilters){min-width:0;flex-wrap:wrap}
body:not(.publicmode) :is(.tablewrap,.rp-table-wrap93){max-width:100%;min-width:0;overflow-x:auto;overscroll-behavior-x:contain}
body:not(.publicmode) :is(.layout,.formgrid,.detailgrid,.metrics,.cards)>*{min-width:0}
#dialog[data-layout="wide"],#dialog:has(.planning101){width:calc(100vw - 2 * var(--ct-gutter))!important;max-width:var(--ct-wide)!important}
/* Independent Money/Internal shell shares the same workspace/form tokens. */
.m96-main{min-width:0}.m96-body{max-width:none!important;width:100%;padding-inline:var(--ct-gutter)!important;box-sizing:border-box;min-width:0}.m96-top{padding-inline:var(--ct-gutter)!important}
.m96-body :is(.m96-form,.m96-onboarding){max-width:var(--ct-standard)}
.m96-body :is(.m96-head,.m96-actions){flex-wrap:wrap;min-width:0}
@media(max-width:600px){.publicmode #role-demos .roleexperiencegrid{--ct-card-min:18rem}}
@media(prefers-reduced-motion:reduce){.ct-container{scroll-behavior:auto}}
.device-actions106{display:grid;gap:10px}.device-actions106 button:not(:first-child){background:#edf3fc;color:#22508b;border:1px solid #d4e0ef}
#device-readonly106{position:fixed;inset:0;z-index:99998;background:var(--bg,#f5f7fb);overflow:auto;padding-block:32px}
#device-readonly106 details{margin-block:18px}#device-readonly106 summary{font-weight:650;padding-block:12px;cursor:pointer}

/* release89 used viewport-derived padding equivalent to a hidden 1120px cap.
   It now owns one boundary. Its sections must not add a second gutter. */
.publicmode .public-layout89>:is(.salesintro,.salessection,.marketsection,.marketpageintro,.salesfeaturehero,.industrybody,.product102,.m96-public){max-width:100%;padding-inline:0}
.publicmode .public-layout89 #role-demos{max-width:100%;padding-inline:0}

/* Legacy workbench aliases choose the same modes as native containers. */
.publicmode :is(.estimate53,.calculator-workspace,.agreement-workspace,.pdf-public95){width:100%;max-width:calc(var(--ct-wide) + 2 * var(--ct-gutter));margin-inline:auto;padding-inline:var(--ct-gutter)}
.publicmode .public-layout89 :is(.estimate53,.calculator-workspace,.agreement-workspace,.pdf-public95){max-width:100%;padding-inline:0}
.publicmode :is(.connect-docs,.study-shell51,.source-note,.ai-facts,.media52-fine){max-width:var(--ct-prose)}
.publicmode :is(.support-page89,.launch59-service,.estimate53-invite){max-width:var(--ct-standard)}
#dialog:is(.auto-dialog84,.walk-dialog84,.dialog89){width:calc(100vw - 2 * var(--ct-gutter));max-width:var(--ct-wide)}
body.ct-shared-gallery106>main{box-sizing:border-box;max-width:calc(var(--ct-wide) + 2 * var(--ct-gutter));width:100%;margin-inline:auto;padding-inline:var(--ct-gutter)}
/* Inset surfaces retain their background and component padding within gutters. */
.ct-inset,.publicmode .ct-home-ai{box-sizing:border-box;width:calc(100% - 2 * var(--ct-gutter));max-width:var(--ct-wide)!important;margin-inline:auto!important}
@media(max-width:700px){.publicmode .product-grid102{margin-right:calc(-1 * var(--ct-gutter));padding-right:var(--ct-gutter)}}
