:root{--enso-color-primary:#131313;--enso-color-secondary:#444444;--enso-color-accent:#444444;--enso-bg-primary:#FFFFFF;--enso-bg-secondary:#F8F8F7;--enso-bg-tertiary:#EBEBEB;--enso-text-primary:#1A1A1A;--enso-text-secondary:#5C5C5C;--enso-text-muted:#6E6E6E;--enso-text-inverse:#FFFFFF;--enso-border-color:#D4D4D4;--enso-link-color:#131313;--enso-link-on-light:#131313;--enso-color-primary-on-light:#131313;--enso-color-success:#2D5A3D;--enso-color-warning:#7A5C0F;--enso-color-error:#8A2C2C;--enso-font-primary:"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--enso-font-secondary:"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--enso-font-mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;--enso-font-size-base:calc(15 * 1px);--enso-font-size-sm:calc(var(--enso-font-size-base)*0.875);--enso-font-size-lg:calc(var(--enso-font-size-base)*1.125);--enso-font-size-xl:calc(var(--enso-font-size-base)*1.25);--enso-font-size-2xl:calc(var(--enso-font-size-base)*1.5);--enso-font-size-3xl:calc(var(--enso-font-size-base)*1.875);--enso-font-size-4xl:calc(var(--enso-font-size-base)*2.25);--enso-line-height-base:1.6;--enso-line-height-tight:1.25;--enso-line-height-relaxed:1.75;--enso-font-weight-normal:400;--enso-font-weight-medium:500;--enso-font-weight-bold:700;--enso-heading-font-weight:600;--enso-heading-line-height:1.2;--enso-heading-letter-spacing:-0.02em;--enso-container-width:calc(1120 * 1px);--enso-container-narrow:720px;--enso-container-wide:1440px;--enso-content-width:calc(720 * 1px);--enso-sidebar-width:calc(280 * 1px);--enso-spacing-unit:8px;--enso-spacing-xs:calc(var(--enso-spacing-unit)*0.25);--enso-spacing-sm:calc(var(--enso-spacing-unit)*0.5);--enso-spacing-md:var(--enso-spacing-unit);--enso-spacing-lg:calc(var(--enso-spacing-unit)*1.5);--enso-spacing-xl:calc(var(--enso-spacing-unit)*2);--enso-spacing-2xl:calc(var(--enso-spacing-unit)*3);--enso-spacing-3xl:calc(var(--enso-spacing-unit)*4);--enso-border-radius:calc(2 * 1px);--enso-border-radius-sm:calc(var(--enso-border-radius)*0.5);--enso-border-radius-lg:calc(var(--enso-border-radius)*1.5);--enso-border-radius-full:9999px;--enso-border-width:1px;--enso-shadow-sm:0 1px 2px rgba(0,0,0,.05);--enso-shadow-md:0 4px 6px rgba(0,0,0,.07);--enso-shadow-lg:0 10px 15px rgba(0,0,0,.1);--enso-header-height:calc(72 * 1px);--enso-header-bg:#FFFFFF;--enso-header-text:#1A1A1A;--enso-header-link-color:var(--enso-header-text);--enso-header-link-hover:color-mix(in srgb,var(--enso-header-text) 72%,var(--enso-header-bg));--enso-hero-bg:#131313;--enso-hero-text:#FFFFFF;--enso-hero-height:480px;--enso-hero-overlay-opacity:calc(50 / 100);--enso-footer-bg:#F8F8F7;--enso-footer-text:#575757;--enso-footer-link-color:#1A1A1A;--enso-footer-link-hover:color-mix(in srgb,var(--enso-footer-link-color) 80%,var(--enso-footer-bg));--enso-button-radius:var(--enso-border-radius);--enso-card-radius:var(--enso-border-radius);--enso-card-shadow:var(--enso-shadow-md);--enso-input-radius:var(--enso-border-radius-sm);--enso-input-border:var(--enso-border-color);--enso-input-focus:var(--enso-color-primary);--enso-dropdown-shadow:var(--enso-shadow-lg);--enso-transition-fast:150ms ease;--enso-transition-base:250ms ease;--enso-transition-slow:350ms ease;--enso-z-dropdown:1000;--enso-z-sticky:1020;--enso-z-fixed:1030;--enso-z-modal-backdrop:1040;--enso-z-modal:1050;--enso-z-popover:1060;--enso-z-tooltip:1070}[data-theme=dark]{--enso-color-primary:#F8F8F7;--enso-color-secondary:#ABABAB;--enso-color-accent:#ABABAB;--enso-bg-primary:#131313;--enso-bg-secondary:#1A1A1A;--enso-bg-tertiary:#2E2E2E;--enso-text-primary:#F8F8F7;--enso-text-secondary:#ABABAB;--enso-text-muted:#8A8A8A;--enso-text-inverse:#131313;--enso-border-color:#2E2E2E;--enso-link-color:#F8F8F7;--enso-color-success:#6FAE84;--enso-color-warning:#C9A23F;--enso-color-error:#C97A7A;--enso-header-bg:#131313;--enso-header-text:#F8F8F7;--enso-footer-bg:#131313;--enso-footer-text:#ABABAB;--enso-footer-link-color:#F8F8F7}*,:after,:before{box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-behavior:smooth}body{background-color:var(--enso-bg-primary);color:var(--enso-text-primary);font-family:var(--enso-font-primary);font-size:var(--enso-font-size-base);font-weight:var(--enso-font-weight-normal);line-height:var(--enso-line-height-base);margin:0;padding:0}blockquote,dl,figure,h1,h2,h3,h4,h5,h6,hr,ol,p,pre,ul{margin:0 0 var(--enso-spacing-md)}ol,ul{padding-inline-start:var(--enso-spacing-lg)}a{color:var(--enso-link-color);-webkit-text-decoration:none;text-decoration:none;transition:color var(--enso-transition-fast)}a:focus,a:hover{color:var(--enso-color-primary)}a:focus-visible{outline:2px solid var(--enso-color-primary);outline-offset:2px}img{height:auto;max-width:100%;vertical-align:middle}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button{cursor:pointer}table{border-collapse:collapse;width:100%}h1,h2,h3,h4,h5,h6{color:var(--enso-text-primary);font-family:var(--enso-font-secondary);font-weight:var(--enso-heading-font-weight);letter-spacing:var(--enso-heading-letter-spacing);line-height:var(--enso-heading-line-height)}h1{font-size:var(--enso-font-size-4xl);margin-bottom:var(--enso-spacing-lg)}h2{font-size:var(--enso-font-size-3xl)}h2,h3{margin-bottom:var(--enso-spacing-md)}h3{font-size:var(--enso-font-size-2xl)}h4{font-size:var(--enso-font-size-xl)}h4,h5{margin-bottom:var(--enso-spacing-sm)}h5{font-size:var(--enso-font-size-lg)}h6{font-size:var(--enso-font-size-base);margin-bottom:var(--enso-spacing-sm)}p{margin-bottom:var(--enso-spacing-md)}b,strong{font-weight:var(--enso-font-weight-bold)}small{font-size:var(--enso-font-size-sm)}blockquote{background-color:var(--enso-bg-secondary);border-inline-start:4px solid var(--enso-color-primary);font-style:italic;padding:var(--enso-spacing-md) var(--enso-spacing-lg)}code,kbd,pre,samp{font-family:var(--enso-font-mono);font-size:.9em}code{border-radius:var(--enso-border-radius-sm);padding:.2em .4em}code,pre{background-color:var(--enso-bg-tertiary)}pre{border-radius:var(--enso-border-radius);overflow-x:auto;padding:var(--enso-spacing-md)}pre code{background:none;padding:0}.enso-container{margin-left:auto;margin-right:auto;max-width:var(--enso-container-width);padding-left:var(--enso-spacing-md);padding-right:var(--enso-spacing-md);width:100%}.enso-container--narrow{max-width:var(--enso-container-narrow)}.enso-container--wide{max-width:var(--enso-container-wide)}.enso-container--fluid{max-width:100%}.enso-row{display:flex;flex-wrap:wrap;margin-left:calc(var(--enso-spacing-md)*-.5);margin-right:calc(var(--enso-spacing-md)*-.5)}.enso-col{flex:1 1 0%;padding-left:calc(var(--enso-spacing-md)*.5);padding-right:calc(var(--enso-spacing-md)*.5)}.enso-col--1{flex:0 0 8.333333%;max-width:8.333333%}.enso-col--2{flex:0 0 16.666667%;max-width:16.666667%}.enso-col--3{flex:0 0 25%;max-width:25%}.enso-col--4{flex:0 0 33.333333%;max-width:33.333333%}.enso-col--5{flex:0 0 41.666667%;max-width:41.666667%}.enso-col--6{flex:0 0 50%;max-width:50%}.enso-col--7{flex:0 0 58.333333%;max-width:58.333333%}.enso-col--8{flex:0 0 66.666667%;max-width:66.666667%}.enso-col--9{flex:0 0 75%;max-width:75%}.enso-col--10{flex:0 0 83.333333%;max-width:83.333333%}.enso-col--11{flex:0 0 91.666667%;max-width:91.666667%}.enso-col--12{flex:0 0 100%;max-width:100%}.enso-col--auto{flex:0 0 auto;max-width:100%;width:auto}@media (min-width:576px){.enso-col--sm-1{flex:0 0 8.333333%;max-width:8.333333%}.enso-col--sm-2{flex:0 0 16.666667%;max-width:16.666667%}.enso-col--sm-3{flex:0 0 25%;max-width:25%}.enso-col--sm-4{flex:0 0 33.333333%;max-width:33.333333%}.enso-col--sm-5{flex:0 0 41.666667%;max-width:41.666667%}.enso-col--sm-6{flex:0 0 50%;max-width:50%}.enso-col--sm-7{flex:0 0 58.333333%;max-width:58.333333%}.enso-col--sm-8{flex:0 0 66.666667%;max-width:66.666667%}.enso-col--sm-9{flex:0 0 75%;max-width:75%}.enso-col--sm-10{flex:0 0 83.333333%;max-width:83.333333%}.enso-col--sm-11{flex:0 0 91.666667%;max-width:91.666667%}.enso-col--sm-12{flex:0 0 100%;max-width:100%}}@media (min-width:768px){.enso-container{padding-left:var(--enso-spacing-lg);padding-right:var(--enso-spacing-lg)}.enso-col--md-1{flex:0 0 8.333333%;max-width:8.333333%}.enso-col--md-2{flex:0 0 16.666667%;max-width:16.666667%}.enso-col--md-3{flex:0 0 25%;max-width:25%}.enso-col--md-4{flex:0 0 33.333333%;max-width:33.333333%}.enso-col--md-5{flex:0 0 41.666667%;max-width:41.666667%}.enso-col--md-6{flex:0 0 50%;max-width:50%}.enso-col--md-7{flex:0 0 58.333333%;max-width:58.333333%}.enso-col--md-8{flex:0 0 66.666667%;max-width:66.666667%}.enso-col--md-9{flex:0 0 75%;max-width:75%}.enso-col--md-10{flex:0 0 83.333333%;max-width:83.333333%}.enso-col--md-11{flex:0 0 91.666667%;max-width:91.666667%}.enso-col--md-12{flex:0 0 100%;max-width:100%}}@media (min-width:992px){.enso-col--lg-1{flex:0 0 8.333333%;max-width:8.333333%}.enso-col--lg-2{flex:0 0 16.666667%;max-width:16.666667%}.enso-col--lg-3{flex:0 0 25%;max-width:25%}.enso-col--lg-4{flex:0 0 33.333333%;max-width:33.333333%}.enso-col--lg-5{flex:0 0 41.666667%;max-width:41.666667%}.enso-col--lg-6{flex:0 0 50%;max-width:50%}.enso-col--lg-7{flex:0 0 58.333333%;max-width:58.333333%}.enso-col--lg-8{flex:0 0 66.666667%;max-width:66.666667%}.enso-col--lg-9{flex:0 0 75%;max-width:75%}.enso-col--lg-10{flex:0 0 83.333333%;max-width:83.333333%}.enso-col--lg-11{flex:0 0 91.666667%;max-width:91.666667%}.enso-col--lg-12{flex:0 0 100%;max-width:100%}}@media (min-width:1200px){.enso-col--xl-1{flex:0 0 8.333333%;max-width:8.333333%}.enso-col--xl-2{flex:0 0 16.666667%;max-width:16.666667%}.enso-col--xl-3{flex:0 0 25%;max-width:25%}.enso-col--xl-4{flex:0 0 33.333333%;max-width:33.333333%}.enso-col--xl-5{flex:0 0 41.666667%;max-width:41.666667%}.enso-col--xl-6{flex:0 0 50%;max-width:50%}.enso-col--xl-7{flex:0 0 58.333333%;max-width:58.333333%}.enso-col--xl-8{flex:0 0 66.666667%;max-width:66.666667%}.enso-col--xl-9{flex:0 0 75%;max-width:75%}.enso-col--xl-10{flex:0 0 83.333333%;max-width:83.333333%}.enso-col--xl-11{flex:0 0 91.666667%;max-width:91.666667%}.enso-col--xl-12{flex:0 0 100%;max-width:100%}}@media (min-width:1440px){.enso-col--xxl-1{flex:0 0 8.333333%;max-width:8.333333%}.enso-col--xxl-2{flex:0 0 16.666667%;max-width:16.666667%}.enso-col--xxl-3{flex:0 0 25%;max-width:25%}.enso-col--xxl-4{flex:0 0 33.333333%;max-width:33.333333%}.enso-col--xxl-5{flex:0 0 41.666667%;max-width:41.666667%}.enso-col--xxl-6{flex:0 0 50%;max-width:50%}.enso-col--xxl-7{flex:0 0 58.333333%;max-width:58.333333%}.enso-col--xxl-8{flex:0 0 66.666667%;max-width:66.666667%}.enso-col--xxl-9{flex:0 0 75%;max-width:75%}.enso-col--xxl-10{flex:0 0 83.333333%;max-width:83.333333%}.enso-col--xxl-11{flex:0 0 91.666667%;max-width:91.666667%}.enso-col--xxl-12{flex:0 0 100%;max-width:100%}}.enso-light-only{display:block!important}.enso-dark-only,[data-theme=dark] .enso-light-only{display:none!important}[data-theme=dark] .enso-dark-only{display:block!important}.enso-light-only--inline{display:inline!important}.enso-dark-only--inline,[data-theme=dark] .enso-light-only--inline{display:none!important}[data-theme=dark] .enso-dark-only--inline{display:inline!important}.enso-hidden{display:none!important}.enso-visible{display:block!important}.enso-invisible{visibility:hidden!important}.enso-sr-only{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;border:0!important;white-space:nowrap!important}.enso-sr-only-focusable:active,.enso-sr-only-focusable:focus{height:auto!important;overflow:visible!important;position:static!important;width:auto!important;clip:auto!important;white-space:normal!important}.enso-hidden--lg,.enso-hidden--md,.enso-hidden--sm{display:none}@media (min-width:576px){.enso-hidden--sm{display:block}.enso-hidden--sm-up{display:none}}@media (min-width:768px){.enso-hidden--md{display:block}.enso-hidden--md-up{display:none}.enso-hidden--md-down{display:block}}@media (min-width:992px){.enso-hidden--lg{display:block}.enso-hidden--lg-up{display:none}.enso-hidden--lg-down{display:block}}@media (max-width:575.98px){.enso-hidden--sm-down{display:none}}@media (max-width:767.98px){.enso-hidden--md-down{display:none}}@media (max-width:991.98px){.enso-hidden--lg-down{display:none}}.enso-mobile-only{display:block}.enso-desktop-only{display:none}@media (min-width:992px){.enso-mobile-only{display:none}.enso-desktop-only{display:block}}.enso-text-left{text-align:left!important}.enso-text-center{text-align:center!important}.enso-text-right{text-align:right!important}.enso-text-primary{color:var(--enso-text-primary)!important}.enso-text-secondary{color:var(--enso-text-secondary)!important}.enso-text-muted{color:var(--enso-text-muted)!important}.enso-text-success{color:var(--enso-color-success)!important}.enso-text-warning{color:var(--enso-color-warning)!important}.enso-text-error{color:var(--enso-color-error)!important}.enso-bg-primary{background-color:var(--enso-bg-primary)!important}.enso-bg-secondary{background-color:var(--enso-bg-secondary)!important}.enso-bg-tertiary{background-color:var(--enso-bg-tertiary)!important}.enso-m-0{margin:0!important}.enso-m-1{margin:var(--enso-spacing-xs)!important}.enso-m-2{margin:var(--enso-spacing-sm)!important}.enso-m-3{margin:var(--enso-spacing-md)!important}.enso-m-4{margin:var(--enso-spacing-lg)!important}.enso-m-5{margin:var(--enso-spacing-xl)!important}.enso-mt-0{margin-top:0!important}.enso-mt-1{margin-top:var(--enso-spacing-xs)!important}.enso-mt-2{margin-top:var(--enso-spacing-sm)!important}.enso-mt-3{margin-top:var(--enso-spacing-md)!important}.enso-mt-4{margin-top:var(--enso-spacing-lg)!important}.enso-mt-5{margin-top:var(--enso-spacing-xl)!important}.enso-mb-0{margin-bottom:0!important}.enso-mb-1{margin-bottom:var(--enso-spacing-xs)!important}.enso-mb-2{margin-bottom:var(--enso-spacing-sm)!important}.enso-mb-3{margin-bottom:var(--enso-spacing-md)!important}.enso-mb-4{margin-bottom:var(--enso-spacing-lg)!important}.enso-mb-5{margin-bottom:var(--enso-spacing-xl)!important}.enso-p-0{padding:0!important}.enso-p-1{padding:var(--enso-spacing-xs)!important}.enso-p-2{padding:var(--enso-spacing-sm)!important}.enso-p-3{padding:var(--enso-spacing-md)!important}.enso-p-4{padding:var(--enso-spacing-lg)!important}.enso-p-5{padding:var(--enso-spacing-xl)!important}.enso-d-flex{display:flex!important}.enso-d-inline-flex{display:inline-flex!important}.enso-d-block{display:block!important}.enso-d-inline{display:inline!important}.enso-d-inline-block{display:inline-block!important}.enso-d-none{display:none!important}.enso-flex-row{flex-direction:row!important}.enso-flex-column{flex-direction:column!important}.enso-flex-wrap{flex-wrap:wrap!important}.enso-flex-nowrap{flex-wrap:nowrap!important}.enso-justify-start{justify-content:flex-start!important}.enso-justify-end{justify-content:flex-end!important}.enso-justify-center{justify-content:center!important}.enso-justify-between{justify-content:space-between!important}.enso-justify-around{justify-content:space-around!important}.enso-align-start{align-items:flex-start!important}.enso-align-end{align-items:flex-end!important}.enso-align-center{align-items:center!important}.enso-align-stretch{align-items:stretch!important}.enso-gap-1{gap:var(--enso-spacing-xs)!important}.enso-gap-2{gap:var(--enso-spacing-sm)!important}.enso-gap-3{gap:var(--enso-spacing-md)!important}.enso-gap-4{gap:var(--enso-spacing-lg)!important}.enso-gap-5{gap:var(--enso-spacing-xl)!important}.enso-skip-link{background-color:var(--enso-color-primary);color:var(--enso-text-inverse);font-weight:var(--enso-font-weight-medium);left:0;padding:var(--enso-spacing-sm) var(--enso-spacing-md);position:absolute;-webkit-text-decoration:none;text-decoration:none;top:-100%;transition:top var(--enso-transition-fast);z-index:var(--enso-z-tooltip)}.enso-skip-link:focus{outline:2px solid var(--enso-text-inverse);outline-offset:2px;top:0}.enso-btn{align-items:center;border:var(--enso-border-width) solid transparent;border-radius:var(--enso-button-radius);cursor:pointer;display:inline-flex;font-family:inherit;font-size:var(--enso-font-size-base);font-weight:var(--enso-font-weight-medium);gap:var(--enso-spacing-sm);justify-content:center;line-height:1.5;padding:var(--enso-spacing-sm) var(--enso-spacing-lg);text-align:center;-webkit-text-decoration:none;text-decoration:none;transition:all var(--enso-transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.enso-btn:focus-visible{outline:2px solid var(--enso-color-primary);outline-offset:2px}.enso-btn:disabled{cursor:not-allowed;opacity:.6}.enso-btn--primary{background-color:var(--enso-color-primary);border-color:var(--enso-color-primary);color:var(--enso-text-inverse)}.enso-btn--primary:hover:not(:disabled){background-color:color-mix(in srgb,var(--enso-color-primary) 85%,#000);border-color:color-mix(in srgb,var(--enso-color-primary) 85%,#000);color:var(--enso-text-inverse)}.enso-btn--secondary{background-color:transparent;border-color:var(--enso-border-color);color:var(--enso-text-primary)}.enso-btn--secondary:hover:not(:disabled){background-color:var(--enso-bg-secondary);border-color:var(--enso-text-secondary);color:var(--enso-text-primary)}.enso-btn--ghost{background-color:transparent;border-color:transparent;color:var(--enso-link-color)}.enso-btn--ghost:hover:not(:disabled){background-color:var(--enso-bg-secondary);color:var(--enso-link-color)}.enso-btn--sm{font-size:var(--enso-font-size-sm);min-height:24px;min-width:24px;padding:var(--enso-spacing-xs) var(--enso-spacing-md)}.enso-btn--lg{font-size:var(--enso-font-size-lg);padding:var(--enso-spacing-md) var(--enso-spacing-xl)}.enso-input{background-color:var(--enso-bg-primary);border:var(--enso-border-width) solid var(--enso-input-border);border-radius:var(--enso-input-radius);color:var(--enso-text-primary);display:block;font-family:inherit;font-size:var(--enso-font-size-base);line-height:1.5;padding:var(--enso-spacing-sm) var(--enso-spacing-md);transition:border-color var(--enso-transition-fast),box-shadow var(--enso-transition-fast);width:100%}.enso-input:focus{border-color:var(--enso-input-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--enso-input-focus) 20%,transparent);outline:none}.enso-input::-moz-placeholder{color:var(--enso-text-muted)}.enso-input::placeholder{color:var(--enso-text-muted)}.enso-input:disabled{background-color:var(--enso-bg-secondary);cursor:not-allowed;opacity:.6}.enso-textarea{min-height:120px;resize:vertical}.enso-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");background-position:right var(--enso-spacing-sm) center;background-repeat:no-repeat;background-size:16px 12px;padding-right:calc(var(--enso-spacing-md) + 16px)}.enso-card{background-color:var(--enso-bg-primary);border:var(--enso-border-width) solid var(--enso-border-color);border-radius:var(--enso-card-radius);box-shadow:var(--enso-card-shadow);overflow:hidden}.enso-card__header{border-bottom:var(--enso-border-width) solid var(--enso-border-color);padding:var(--enso-spacing-md) var(--enso-spacing-lg)}.enso-card__body{padding:var(--enso-spacing-lg)}.enso-card__footer{background-color:var(--enso-bg-secondary);border-top:var(--enso-border-width) solid var(--enso-border-color);padding:var(--enso-spacing-md) var(--enso-spacing-lg)}.enso-dropdown{display:inline-block;position:relative}.enso-dropdown__toggle{align-items:center;display:inline-flex;gap:var(--enso-spacing-xs)}.enso-dropdown__menu{background-color:var(--enso-bg-primary);border:var(--enso-border-width) solid var(--enso-border-color);border-radius:var(--enso-border-radius);box-shadow:var(--enso-dropdown-shadow);left:0;margin-top:var(--enso-spacing-xs);min-width:200px;opacity:0;padding:var(--enso-spacing-sm) 0;position:absolute;top:100%;transform:translateY(-10px);transition:opacity var(--enso-transition-fast),transform var(--enso-transition-fast),visibility var(--enso-transition-fast);visibility:hidden;z-index:var(--enso-z-dropdown)}.enso-dropdown__menu--end{left:auto;right:0}.enso-dropdown:not([data-enso-instance]):focus-within .enso-dropdown__menu{opacity:1;transform:translateY(0);visibility:visible}.enso-dropdown__item{color:var(--enso-text-primary);display:block;padding:var(--enso-spacing-sm) var(--enso-spacing-md);-webkit-text-decoration:none;text-decoration:none;transition:background-color var(--enso-transition-fast)}.enso-dropdown__item:focus,.enso-dropdown__item:hover{background-color:var(--enso-bg-secondary);-webkit-text-decoration:none;text-decoration:none;color:var(--enso-text-primary)}.enso-dropdown__divider{border-top:var(--enso-border-width) solid var(--enso-border-color);height:0;margin:var(--enso-spacing-sm) 0}.enso-badge{align-items:center;background-color:var(--enso-bg-tertiary);border-radius:var(--enso-border-radius-full);color:var(--enso-text-primary);display:inline-flex;font-size:var(--enso-font-size-sm);font-weight:var(--enso-font-weight-medium);line-height:1;padding:.25em .5em}.enso-badge--primary{background-color:var(--enso-color-primary);color:var(--enso-text-inverse)}.enso-badge--success{background-color:var(--enso-color-success);color:var(--enso-text-inverse)}.enso-badge--warning{background-color:var(--enso-color-warning);color:var(--enso-text-primary)}.enso-badge--error{background-color:var(--enso-color-error);color:var(--enso-text-inverse)}.enso-avatar{align-items:center;background-color:var(--enso-bg-tertiary);border-radius:var(--enso-border-radius-full);display:inline-flex;height:40px;justify-content:center;overflow:hidden;width:40px}.enso-avatar img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.enso-avatar--sm{height:32px;width:32px}.enso-avatar--lg{height:56px;width:56px}.enso-breadcrumb{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.enso-breadcrumb__link{color:var(--enso-text-secondary)}.enso-breadcrumb__link:hover{color:var(--enso-link-color)}.enso-header{background-color:var(--enso-header-bg);color:var(--enso-header-text);min-height:var(--enso-header-height);position:relative;z-index:var(--enso-z-sticky)}.enso-header--sticky{position:sticky;top:0}.enso-header__inner{align-items:center;display:flex;justify-content:space-between;padding:var(--enso-spacing-md) 0}.enso-header__logo{align-items:center;display:flex;gap:var(--enso-spacing-sm)}.enso-header__logo img{max-height:var(--enso-logo-height,40px);width:auto}.enso-header__nav{display:none}@media (min-width:992px){.enso-header__nav{align-items:center;display:flex;gap:var(--enso-spacing-lg)}}.enso-header__nav-link{color:var(--enso-header-link-color);font-weight:var(--enso-font-weight-medium);-webkit-text-decoration:none;text-decoration:none;transition:color var(--enso-transition-fast)}.enso-header__nav-link:hover{color:var(--enso-header-link-hover)}.enso-header__actions{align-items:center;display:flex;gap:var(--enso-spacing-md)}.enso-header__menu-btn{align-items:center;background:transparent;border:none;color:var(--enso-header-text);cursor:pointer;display:flex;height:44px;justify-content:center;padding:0;width:44px}@media (min-width:992px){.enso-header__menu-btn{display:none}}.enso-hero{align-items:center;background-color:var(--enso-hero-bg);color:var(--enso-hero-text);display:flex;justify-content:center;min-height:var(--enso-hero-height);overflow:hidden;padding:var(--enso-spacing-3xl) 0;position:relative;text-align:center}.enso-hero__bg{-o-object-fit:cover;object-fit:cover;z-index:0}.enso-hero__bg,.enso-hero__bg-dark,.enso-hero__overlay{height:100%;left:0;position:absolute;top:0;width:100%}.enso-hero__bg-dark{background-position:center;background-size:cover;z-index:0}.enso-hero__overlay{background-color:rgba(0,0,0,var(--enso-hero-overlay-opacity));z-index:1}.enso-hero__content{max-width:var(--enso-container-narrow);padding:0 var(--enso-spacing-md);position:relative;z-index:2}.enso-hero__title{color:inherit;font-size:var(--enso-font-size-4xl);margin-bottom:var(--enso-spacing-md)}.enso-hero__subtitle{font-size:var(--enso-font-size-xl);margin-bottom:var(--enso-spacing-xl);opacity:.9}.enso-hero__search{margin:0 auto;max-width:600px}.enso-search{position:relative}.enso-footer{background-color:var(--enso-footer-bg);color:var(--enso-footer-text);padding:var(--enso-spacing-2xl) 0}.enso-footer a{color:var(--enso-footer-link-color)}.enso-footer a:hover{color:var(--enso-footer-link-hover)}.enso-footer__inner{align-items:center;display:flex;flex-wrap:wrap;gap:var(--enso-spacing-xl);justify-content:space-between}.enso-footer__nav{display:flex;flex-wrap:wrap;gap:var(--enso-spacing-md) var(--enso-spacing-lg)}.enso-footer__social{display:flex;gap:var(--enso-spacing-md)}.enso-footer__social-link{align-items:center;background-color:color-mix(in srgb,var(--enso-footer-link-color) 10%,transparent);border-radius:var(--enso-border-radius-full);display:flex;height:40px;justify-content:center;transition:background-color var(--enso-transition-fast);width:40px}.enso-footer__social-link:hover{background-color:color-mix(in srgb,var(--enso-footer-link-color) 20%,transparent)}.enso-footer__bottom{border-top:var(--enso-border-width) solid color-mix(in srgb,var(--enso-footer-text) 20%,transparent);color:var(--enso-footer-text);font-size:var(--enso-font-size-sm);margin-top:var(--enso-spacing-xl);padding-top:var(--enso-spacing-lg);text-align:center}.enso-footer__bottom a{text-decoration:underline}.enso-article{max-width:var(--enso-content-width)}.enso-article__header{margin-bottom:var(--enso-spacing-xl)}.enso-article__title{font-size:var(--enso-font-size-3xl);margin-bottom:var(--enso-spacing-md)}.enso-article__meta{color:var(--enso-text-secondary);display:flex;flex-wrap:wrap;font-size:var(--enso-font-size-sm);gap:var(--enso-spacing-md)}.enso-article__body{line-height:var(--enso-line-height-relaxed)}.enso-article__body h2{margin-top:var(--enso-spacing-2xl)}.enso-article__body h3{margin-top:var(--enso-spacing-xl)}.enso-article__body img{border-radius:var(--enso-border-radius)}.enso-article__body table{border:var(--enso-border-width) solid var(--enso-border-color);margin:var(--enso-spacing-lg) 0}.enso-article__body td,.enso-article__body th{border:var(--enso-border-width) solid var(--enso-border-color);padding:var(--enso-spacing-sm) var(--enso-spacing-md);text-align:start}.enso-article__body th{background-color:var(--enso-bg-secondary);font-weight:var(--enso-font-weight-medium)}.enso-sidebar{width:var(--enso-sidebar-width)}.enso-sidebar--sticky{position:sticky;top:calc(var(--enso-header-height) + var(--enso-spacing-lg))}.enso-toc{background-color:var(--enso-bg-secondary);border-radius:var(--enso-border-radius);padding:var(--enso-spacing-md)}.enso-toc__title{color:var(--enso-text-secondary);font-size:var(--enso-font-size-sm);font-weight:var(--enso-font-weight-bold);letter-spacing:.05em;margin-bottom:var(--enso-spacing-sm);text-transform:uppercase}.enso-toc__list{list-style:none;margin:0;padding:0}.enso-toc__item{margin-bottom:var(--enso-spacing-xs)}.enso-toc__link{border-left:2px solid transparent;color:var(--enso-text-secondary);display:block;font-size:var(--enso-font-size-sm);padding:var(--enso-spacing-xs) var(--enso-spacing-sm);transition:all var(--enso-transition-fast)}.enso-toc__link--active,.enso-toc__link:hover{background-color:color-mix(in srgb,var(--enso-color-primary) 5%,transparent);border-left-color:var(--enso-color-primary);color:var(--enso-color-primary)}.enso-toc__list--nested{padding-left:var(--enso-spacing-md)}[dir=rtl]{text-align:right}[dir=rtl] .enso-dropdown__menu{left:auto;right:0}[dir=rtl] .enso-dropdown__menu--end{left:0;right:auto}[dir=rtl] .enso-toc__link{border-left:none;border-right:2px solid transparent}[dir=rtl] .enso-toc__link--active,[dir=rtl] .enso-toc__link:hover{border-left-color:transparent;border-right-color:var(--enso-color-primary)}@media print{.enso-btn,.enso-footer,.enso-header,.enso-hero,.enso-search,.enso-sidebar,.enso-skip-link{display:none!important}body{background:#fff;font-size:12pt;line-height:1.5}a,body{color:#000}a{-webkit-text-decoration:underline;text-decoration:underline}.enso-article{max-width:100%}}

/* ==========================================================================
   ENSO — Content-section styles (WS8, 2026-06-06)
   Adds the rules for template components that shipped with no CSS (home
   categories/promoted/cta/helper-blocks/activity, breadcrumbs, article chrome,
   list items, comments, community, requests, errors, etc.). Token-driven so
   colours + dark mode (`[data-theme=dark]` token overrides) apply for free.
   Appended in readable form; do NOT run `build:css` (cssnano mangles $vars).
   ========================================================================== */

/* ---- Section scaffolding ------------------------------------------------ */
.enso-section { padding: var(--enso-spacing-3xl) 0; }
.enso-section + .enso-section { padding-top: 0; }
.enso-section__title {
  font-family: var(--enso-font-secondary);
  font-size: var(--enso-font-size-2xl);
  font-weight: var(--enso-heading-font-weight);
  line-height: var(--enso-heading-line-height);
  color: var(--enso-text-primary);
  margin: 0 0 var(--enso-spacing-sm);
}
.enso-section__subtitle {
  font-size: var(--enso-font-size-lg);
  color: var(--enso-text-secondary);
  margin: 0 0 var(--enso-spacing-xl);
}
/* Wider gutter for the .enso-col percentage grid. Uses the row's own
   negative-margin + per-col padding model (NOT flex `gap`): flex gap is laid out
   ON TOP of the 33.333% column widths, so three .enso-col--md-4 (=100%) + 2 gaps
   overflow the row and the 3rd wraps. Padding gutters live inside the border-box
   width, so the columns still sum to 100% and sit N-across. */
.enso-row--gap-4 { margin-left: calc(var(--enso-spacing-xl) * -.5); margin-right: calc(var(--enso-spacing-xl) * -.5); }
.enso-row--gap-4 > .enso-col { padding-left: calc(var(--enso-spacing-xl) * .5); padding-right: calc(var(--enso-spacing-xl) * .5); }

/* Shared card surface for category / article cards */
.enso-category-card,
.enso-article-card,
.enso-helper-block,
.enso-category-expanded {
  display: block;
  background-color: var(--enso-bg-primary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-card-radius);
  box-shadow: var(--enso-card-shadow);
  transition: transform var(--enso-transition-base), box-shadow var(--enso-transition-base);
}
.enso-category-card:hover,
.enso-article-card:hover,
.enso-helper-block:hover {
  transform: translateY(-2px);
  box-shadow: var(--enso-shadow-lg);
}
a.enso-category-card,
a.enso-article-card,
.enso-article-card__link,
a.enso-helper-block { text-decoration: none; color: inherit; }

/* ---- Categories -------------------------------------------------------- */
.enso-categories__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr));
  gap: var(--enso-spacing-xl);
}
.enso-category-card { padding: var(--enso-spacing-xl); }
.enso-category-card__icon { color: var(--enso-color-primary); margin-bottom: var(--enso-spacing-md); }
.enso-category-card__title {
  font-size: var(--enso-font-size-lg);
  font-weight: var(--enso-font-weight-bold);
  color: var(--enso-text-primary);
  margin: 0 0 var(--enso-spacing-xs);
}
.enso-category-card__description { color: var(--enso-text-secondary); margin: 0; font-size: var(--enso-font-size-sm); }

.enso-categories__list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--enso-spacing-sm); }
.enso-categories__list-item { border-bottom: var(--enso-border-width) solid var(--enso-border-color); }
.enso-categories__link {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--enso-spacing-md) var(--enso-spacing-sm);
  text-decoration: none; color: var(--enso-link-color);
  transition: color var(--enso-transition-fast);
}
.enso-categories__link:hover { color: var(--enso-color-primary); }
.enso-categories__name { font-weight: var(--enso-font-weight-medium); }

.enso-categories__expanded { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr)); gap: var(--enso-spacing-xl); }
.enso-category-expanded { padding: var(--enso-spacing-xl); }
.enso-category-expanded__header { margin-bottom: var(--enso-spacing-md); padding-bottom: var(--enso-spacing-sm); border-bottom: var(--enso-border-width) solid var(--enso-border-color); }
.enso-category-expanded__title { font-size: var(--enso-font-size-lg); font-weight: var(--enso-font-weight-bold); color: var(--enso-text-primary); text-decoration: none; }
.enso-category-expanded__sections { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--enso-spacing-xs); }
.enso-category-expanded__section-link { color: var(--enso-link-color); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-category-expanded__section-link:hover { color: var(--enso-color-primary); text-decoration: underline; }

/* ---- Promoted articles ------------------------------------------------- */
.enso-promoted__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr)); gap: var(--enso-spacing-xl); }
.enso-article-card { padding: var(--enso-spacing-lg); }
.enso-article-card__title { font-size: var(--enso-font-size-lg); font-weight: var(--enso-font-weight-medium); color: var(--enso-text-primary); margin: 0; }

.enso-promoted__carousel { position: relative; }
.enso-promoted__carousel-track { display: flex; gap: var(--enso-spacing-xl); overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: var(--enso-spacing-sm); -webkit-overflow-scrolling: touch; }
.enso-promoted__slide { flex: 0 0 280px; scroll-snap-align: start; }
.enso-promoted__carousel-prev,
.enso-promoted__carousel-next {
  position: absolute; top: 50%; transform: translateY(-50%);
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-border-radius-full); background-color: var(--enso-bg-primary);
  color: var(--enso-text-primary); cursor: pointer; box-shadow: var(--enso-shadow-md);
}
.enso-promoted__carousel-prev { left: calc(var(--enso-spacing-md) * -1); }
.enso-promoted__carousel-next { right: calc(var(--enso-spacing-md) * -1); }

.enso-promoted__featured { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(220px, 100%), 1fr)); gap: var(--enso-spacing-xl); }
.enso-article-card--featured { grid-column: 1 / -1; padding: var(--enso-spacing-2xl); background-color: var(--enso-bg-secondary); }
@media (min-width: 768px) { .enso-article-card--featured { grid-column: span 2; } }

/* ---- Helper blocks ----------------------------------------------------- */
.enso-helper-block { padding: var(--enso-spacing-xl); height: 100%; }
.enso-helper-block__icon { color: var(--enso-color-primary); margin-bottom: var(--enso-spacing-md); }
.enso-helper-block__icon img { width: 40px; height: 40px; object-fit: contain; }
.enso-helper-block__title { font-size: var(--enso-font-size-lg); font-weight: var(--enso-font-weight-bold); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-xs); }
.enso-helper-block__description { color: var(--enso-text-secondary); margin: 0; font-size: var(--enso-font-size-sm); }
.enso-helper-blocks--tiles .enso-helper-block { text-align: center; }
.enso-helper-blocks--minimal .enso-helper-block { border: 0; box-shadow: none; background: transparent; padding: var(--enso-spacing-md); }

/* ---- Activity feed ----------------------------------------------------- */
.enso-activity__feed { display: grid; gap: var(--enso-spacing-md); }
.enso-activity-item { display: flex; gap: var(--enso-spacing-md); padding: var(--enso-spacing-md) 0; border-bottom: var(--enso-border-width) solid var(--enso-border-color); }
.enso-activity-item__icon { color: var(--enso-color-primary); flex: 0 0 auto; }
.enso-activity-item__title { font-weight: var(--enso-font-weight-medium); color: var(--enso-text-primary); }
.enso-activity-item__meta { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }

/* ---- Call to action ---------------------------------------------------- */
.enso-cta { padding: var(--enso-spacing-3xl) 0; }
.enso-cta .enso-container { display: grid; gap: var(--enso-spacing-2xl); align-items: center; }
.enso-cta--split .enso-container { grid-template-columns: 1fr; }
@media (min-width: 768px) { .enso-cta--split .enso-container { grid-template-columns: 1fr 1fr; } }
.enso-cta__content { text-align: start; }
.enso-cta__title { font-family: var(--enso-font-secondary); font-size: var(--enso-font-size-2xl); font-weight: var(--enso-heading-font-weight); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-sm); }
.enso-cta__description { color: var(--enso-text-secondary); font-size: var(--enso-font-size-lg); margin: 0 0 var(--enso-spacing-xl); }
.enso-cta__buttons { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); }
.enso-cta__image { border-radius: var(--enso-card-radius); overflow: hidden; }
.enso-cta__img { display: block; width: 100%; height: auto; }
/* Style variants tint the section background using brand tokens */
.enso-cta--solid { background-color: var(--enso-bg-secondary); }
.enso-cta--gradient { background-image: linear-gradient(135deg, var(--enso-color-primary), var(--enso-color-secondary)); }
.enso-cta--gradient .enso-cta__title,
.enso-cta--gradient .enso-cta__description { color: var(--enso-text-inverse); }

/* ---- Standalone search section ---------------------------------------- */
.enso-search-section { padding: var(--enso-spacing-3xl) 0; }
.enso-search-section__badge { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); margin-top: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }

/* ---- Breadcrumbs ------------------------------------------------------- */
.enso-breadcrumbs { padding: var(--enso-spacing-lg) 0; }
.enso-breadcrumbs ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-xs); }
.enso-breadcrumbs__item { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); font-size: var(--enso-font-size-sm); color: var(--enso-text-muted); }
.enso-breadcrumbs__item a { color: var(--enso-link-color); text-decoration: none; }
.enso-breadcrumbs__item a:hover { text-decoration: underline; }
.enso-breadcrumbs__separator { color: var(--enso-text-muted); flex: 0 0 auto; }
.enso-breadcrumbs__current { color: var(--enso-text-secondary); font-weight: var(--enso-font-weight-medium); }

/* ---- Section / sub-section pages --------------------------------------- */
.enso-section-header { padding: var(--enso-spacing-xl) 0; }
.enso-section-header__title { font-family: var(--enso-font-secondary); font-size: var(--enso-font-size-3xl); font-weight: var(--enso-heading-font-weight); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-sm); }
.enso-section-header__description { color: var(--enso-text-secondary); font-size: var(--enso-font-size-lg); margin: 0; }
.enso-subsections { margin-bottom: var(--enso-spacing-2xl); }
.enso-subsections__heading { font-size: var(--enso-font-size-xl); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-md); }
.enso-subsections__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(200px, 100%), 1fr)); gap: var(--enso-spacing-md); }

.enso-article-list { display: grid; gap: var(--enso-spacing-md); list-style: none; margin: 0; padding: 0; }
.enso-article-item { padding: var(--enso-spacing-lg) 0; border-bottom: var(--enso-border-width) solid var(--enso-border-color); }
.enso-article-item__link { text-decoration: none; }
.enso-article-item__title { font-size: var(--enso-font-size-lg); font-weight: var(--enso-font-weight-medium); color: var(--enso-link-color); margin: 0 0 var(--enso-spacing-xs); }
.enso-article-item__link:hover .enso-article-item__title { color: var(--enso-color-primary); }
.enso-article-item__meta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }

/* ---- Article page ------------------------------------------------------ */
.enso-article-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--enso-spacing-2xl); }
@media (min-width: 992px) {
  .enso-article-layout--left { grid-template-columns: var(--enso-sidebar-width) minmax(0, 1fr); }
  .enso-article-layout--right { grid-template-columns: minmax(0, 1fr) var(--enso-sidebar-width); }
}
.enso-article__header { margin-bottom: var(--enso-spacing-xl); }
.enso-article__title { font-family: var(--enso-font-secondary); font-size: var(--enso-font-size-4xl); font-weight: var(--enso-heading-font-weight); line-height: var(--enso-heading-line-height); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-md); }
.enso-article__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-article__author { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-article__author-name { font-weight: var(--enso-font-weight-medium); color: var(--enso-text-secondary); }
.enso-article__footer { margin-top: var(--enso-spacing-2xl); padding-top: var(--enso-spacing-xl); border-top: var(--enso-border-width) solid var(--enso-border-color); }
.enso-article__labels { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-sm); margin-top: var(--enso-spacing-md); }
.enso-article__voting, .enso-article__sharing { display: flex; align-items: center; gap: var(--enso-spacing-md); margin-top: var(--enso-spacing-lg); flex-wrap: wrap; }
.enso-article__voting-label, .enso-article__sharing-label { font-weight: var(--enso-font-weight-medium); color: var(--enso-text-secondary); }
.enso-article__voting-buttons, .enso-article__sharing-buttons { display: flex; gap: var(--enso-spacing-sm); }
.enso-article__vote-count { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-article__attachments { margin-top: var(--enso-spacing-2xl); }
.enso-article__attachments-title { font-size: var(--enso-font-size-lg); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-md); }
.enso-article__attachments-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--enso-spacing-sm); }
.enso-article__attachment-link { color: var(--enso-link-color); text-decoration: none; }
.enso-article__attachment-link:hover { text-decoration: underline; }
.enso-article__attachment-size { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); margin-inline-start: var(--enso-spacing-xs); }

/* ---- Table of contents / related -------------------------------------- */
.enso-article-sidebar { align-self: start; }
.enso-toc { position: sticky; top: calc(var(--enso-header-offset, var(--enso-header-height)) + var(--enso-spacing-md)); background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); padding: var(--enso-spacing-lg); }
.enso-toc__heading { font-size: var(--enso-font-size-sm); text-transform: uppercase; letter-spacing: .05em; color: var(--enso-text-muted); margin: 0 0 var(--enso-spacing-md); }
.enso-toc__content a { display: block; padding: var(--enso-spacing-xs) 0; color: var(--enso-link-color); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-toc__content a:hover { color: var(--enso-color-primary); }
.enso-related-articles { margin-top: var(--enso-spacing-2xl); padding-top: var(--enso-spacing-xl); border-top: var(--enso-border-width) solid var(--enso-border-color); }

/* ---- Comments ---------------------------------------------------------- */
.enso-comments { margin-top: var(--enso-spacing-2xl); }
.enso-comments__heading { font-size: var(--enso-font-size-xl); color: var(--enso-text-primary); margin: 0 0 var(--enso-spacing-lg); }
.enso-comments__count { color: var(--enso-text-muted); font-weight: var(--enso-font-weight-normal); }
.enso-comments__list { display: grid; gap: var(--enso-spacing-lg); list-style: none; margin: 0; padding: 0; }
.enso-comment { padding: var(--enso-spacing-lg); background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); }
.enso-comment__header { display: flex; align-items: center; gap: var(--enso-spacing-sm); margin-bottom: var(--enso-spacing-sm); }
.enso-comment__author-info { display: flex; flex-direction: column; }
.enso-comment__time { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-comment__body { color: var(--enso-text-primary); line-height: var(--enso-line-height-base); }
.enso-comments__empty, .enso-comments__sign-in { color: var(--enso-text-muted); }
.enso-comments__form { margin-top: var(--enso-spacing-xl); }
.enso-comments__form-actions { display: flex; justify-content: flex-end; gap: var(--enso-spacing-md); margin-top: var(--enso-spacing-md); }

/* ---- Pagination -------------------------------------------------------- */
.enso-pagination { display: flex; justify-content: center; gap: var(--enso-spacing-xs); margin-top: var(--enso-spacing-2xl); }

/* ---- Error page -------------------------------------------------------- */
.enso-error { text-align: center; padding: var(--enso-spacing-3xl) 0; max-width: var(--enso-container-narrow); margin: 0 auto; }
.enso-error__code { font-size: var(--enso-font-size-4xl); font-weight: var(--enso-font-weight-bold); color: var(--enso-color-primary); }
.enso-error__title { font-family: var(--enso-font-secondary); font-size: var(--enso-font-size-2xl); color: var(--enso-text-primary); margin: var(--enso-spacing-md) 0; }
.enso-error__message { color: var(--enso-text-secondary); margin-bottom: var(--enso-spacing-xl); }
.enso-error__actions { display: flex; justify-content: center; gap: var(--enso-spacing-md); flex-wrap: wrap; }

/* ---- Community / posts ------------------------------------------------- */
.enso-community__header { padding: var(--enso-spacing-2xl) 0; }
.enso-post-list, .enso-community__list { display: grid; gap: var(--enso-spacing-md); list-style: none; margin: 0; padding: 0; }
.enso-post-item, .enso-post { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-post__title, .enso-post-item__title { font-size: var(--enso-font-size-lg); font-weight: var(--enso-font-weight-medium); color: var(--enso-link-color); margin: 0 0 var(--enso-spacing-xs); }
.enso-post__meta, .enso-post-item__meta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }

/* ---- Requests / subscriptions / contributions ------------------------- */
.enso-requests, .enso-subscriptions, .enso-contributions { display: grid; gap: var(--enso-spacing-md); }
.enso-request-help { margin-top: var(--enso-spacing-2xl); padding: var(--enso-spacing-xl); background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); }
.enso-request-help__link { color: var(--enso-link-color); }

/* ---- Small shared UI: badge / tabs / stats / avatar / tip ------------- */
.enso-badge { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); padding: var(--enso-spacing-xs) var(--enso-spacing-sm); border-radius: var(--enso-border-radius-full); background-color: var(--enso-bg-tertiary); color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); font-weight: var(--enso-font-weight-medium); }
.enso-tabs { display: flex; gap: var(--enso-spacing-md); border-bottom: var(--enso-border-width) solid var(--enso-border-color); margin-bottom: var(--enso-spacing-xl); }
.enso-tabs__tab { padding: var(--enso-spacing-md) 0; color: var(--enso-text-secondary); text-decoration: none; border-bottom: 2px solid transparent; }
.enso-tabs__tab--active { color: var(--enso-color-primary); border-bottom-color: var(--enso-color-primary); }
.enso-stats { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-2xl); }
.enso-stat__value { font-size: var(--enso-font-size-2xl); font-weight: var(--enso-font-weight-bold); color: var(--enso-text-primary); display: block; }
.enso-stat__label { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-avatar { border-radius: var(--enso-border-radius-full); object-fit: cover; }
.enso-tip { padding: var(--enso-spacing-lg); border-inline-start: 3px solid var(--enso-color-primary); background-color: var(--enso-bg-secondary); border-radius: var(--enso-border-radius-sm); }

/* ---- Hero additions (cta/image not previously covered) ----------------- */
.enso-hero__cta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); margin-top: var(--enso-spacing-lg); }
.enso-hero--split .enso-container { display: grid; gap: var(--enso-spacing-2xl); align-items: center; }
@media (min-width: 768px) { .enso-hero--split .enso-container { grid-template-columns: 1fr 1fr; } }
.enso-hero__img { display: block; width: 100%; height: auto; border-radius: var(--enso-card-radius); }

/* ---- Mobile: collapse multi-column content sections -------------------- */
@media (max-width: 767.98px) {
  .enso-cta--split .enso-container,
  .enso-hero--split .enso-container { grid-template-columns: 1fr; }
  .enso-section { padding: var(--enso-spacing-2xl) 0; }
}

.enso-hero__image { border-radius: var(--enso-card-radius); overflow: hidden; }

/* ---- WS8 supplement: correct tab class names + community + breadcrumb aliases */
.enso-tabs__list { display: flex; gap: var(--enso-spacing-md); list-style: none; margin: 0; padding: 0; border-bottom: var(--enso-border-width) solid var(--enso-border-color); }
.enso-tabs__item { margin: 0; }
.enso-tabs__link { display: inline-block; padding: var(--enso-spacing-md) 0; color: var(--enso-text-secondary); text-decoration: none; border-bottom: 2px solid transparent; }
.enso-tabs__link:hover { color: var(--enso-text-primary); }
.enso-tabs__link--active { color: var(--enso-color-primary); border-bottom-color: var(--enso-color-primary); }

.enso-community__content { display: grid; gap: var(--enso-spacing-2xl); }
@media (min-width: 992px) { .enso-community__content { grid-template-columns: minmax(0, 1fr) var(--enso-sidebar-width); } }
.enso-community__toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); margin-bottom: var(--enso-spacing-lg); }
.enso-community__sort { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-community__sort-label { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-community__featured, .enso-community__activity { background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); padding: var(--enso-spacing-lg); }

.enso-breadcrumbs__list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-xs); }
.enso-breadcrumbs__link { color: var(--enso-link-color); text-decoration: none; }
.enso-breadcrumbs__link:hover { text-decoration: underline; }
.enso-breadcrumbs__item--current .enso-breadcrumbs__text,
.enso-breadcrumbs__text { color: var(--enso-text-secondary); }

/* ======================================================================
   WS8 #4 — deep-page coverage (Pass 1: shared layout, header/footer
   extras, mobile nav, browse pages, search, error). Token-driven →
   dark-mode-free. Authored against real template markup (NOT build:css).
   ====================================================================== */

/* ---- Shared layout ---------------------------------------------------- */
.enso-main { display: block; padding: var(--enso-spacing-2xl) 0; }
.enso-content { display: block; }
.enso-label { display: inline-block; font-weight: var(--enso-font-weight-medium); color: var(--enso-text-secondary); }
.enso-visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }
.enso-page-header { margin-bottom: var(--enso-spacing-xl); }
.enso-page-header__top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); }
.enso-page-header__title { font-size: var(--enso-font-size-3xl); margin: 0 0 var(--enso-spacing-sm); }
.enso-page-header__description { color: var(--enso-text-secondary); margin: 0; max-width: var(--enso-container-narrow); }

/* ---- Header extras ---------------------------------------------------- */
.enso-header__brand { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-header__logo-link { display: inline-flex; align-items: center; gap: var(--enso-spacing-sm); text-decoration: none; color: inherit; }
.enso-header__brand-name { font-family: var(--enso-font-secondary); font-weight: var(--enso-heading-font-weight); font-size: var(--enso-font-size-lg); color: var(--enso-header-text); }
.enso-header__nav-list { display: flex; align-items: center; gap: var(--enso-spacing-lg); list-style: none; margin: 0; padding: 0; }
.enso-header__user-name { font-weight: var(--enso-font-weight-medium); color: var(--enso-header-text); }
.enso-header__user-toggle { color: var(--enso-header-text); background: transparent; border: 0; }
.enso-header__search-btn, .enso-header__theme-toggle { color: var(--enso-header-text); }
.enso-header__sign-in { white-space: nowrap; }
.enso-dropdown__chevron { flex: 0 0 auto; transition: transform var(--enso-transition-fast); }
.enso-dropdown__toggle[aria-expanded="true"] .enso-dropdown__chevron,
.enso-dropdown--open .enso-dropdown__chevron { transform: rotate(180deg); }

/* ---- Mobile navigation (collapsed until JS adds .enso-nav--open) ------ */
/* The divider is drawn only while the panel is open: on the collapsed (0-height)
   panel it still took 1px, so the header was header_height + 1 wherever the panel
   is laid out (below 992px, and the minimal variant at every width). With
   border-box the open panel's max-height includes it, so header + open panel is
   exactly the viewport height. */
.enso-header__mobile-nav { overflow: hidden; max-height: 0; opacity: 0; visibility: hidden; background-color: var(--enso-header-bg); transition: max-height var(--enso-transition-base), opacity var(--enso-transition-fast), visibility var(--enso-transition-fast); }
.enso-header__mobile-nav.enso-nav--open { max-height: calc(100vh - var(--enso-header-height)); opacity: 1; visibility: visible; overflow-y: auto; border-top: var(--enso-border-width) solid color-mix(in srgb, var(--enso-header-text) 15%, var(--enso-header-bg)); }
.enso-header__mobile-nav-inner { padding: var(--enso-spacing-md) var(--enso-spacing-md) var(--enso-spacing-lg); }
.enso-header__mobile-nav-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.enso-header__mobile-nav-link { display: block; padding: var(--enso-spacing-md) 0; color: var(--enso-header-link-color); font-weight: var(--enso-font-weight-medium); text-decoration: none; }
.enso-header__mobile-nav-link:hover { color: var(--enso-header-link-hover); }
.enso-header__mobile-user { padding: var(--enso-spacing-sm) 0; }
.enso-header__mobile-user-link { display: flex; align-items: center; gap: var(--enso-spacing-md); text-decoration: none; color: var(--enso-header-text); }
.enso-header__mobile-user-info { display: flex; flex-direction: column; }
.enso-header__mobile-user-name { font-weight: var(--enso-font-weight-medium); }
.enso-header__mobile-user-label { font-size: var(--enso-font-size-sm); color: color-mix(in srgb, var(--enso-header-text) 75%, var(--enso-header-bg)); }
.enso-header__mobile-divider { height: var(--enso-border-width); background-color: color-mix(in srgb, var(--enso-header-text) 15%, var(--enso-header-bg)); margin: var(--enso-spacing-sm) 0; }

/* ---- Footer extras ---------------------------------------------------- */
.enso-footer__brand { display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-footer__logo-link { display: inline-flex; align-items: center; }
.enso-footer__brand-name { font-family: var(--enso-font-secondary); font-weight: var(--enso-heading-font-weight); font-size: var(--enso-font-size-lg); color: var(--enso-footer-text); }
.enso-footer__description { color: var(--enso-footer-text); opacity: .85; max-width: 36ch; margin: 0; }
.enso-footer__nav-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--enso-spacing-sm) var(--enso-spacing-lg); }
.enso-footer__nav-link { color: var(--enso-footer-link-color); text-decoration: none; }
.enso-footer__nav-link:hover { color: var(--enso-footer-link-hover); }
.enso-footer__bottom-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); }
.enso-footer__copyright { color: var(--enso-footer-text); font-size: var(--enso-font-size-sm); }
.enso-footer__powered-by { color: var(--enso-footer-text); font-size: var(--enso-font-size-sm); }
.enso-footer__language-toggle { color: var(--enso-footer-text); background: transparent; border: 0; }

/* ---- Category / section pages (breadcrumbs/subsections already styled) - */
.enso-category-header { margin-bottom: var(--enso-spacing-xl); }
.enso-category-header__title { font-size: var(--enso-font-size-3xl); margin: 0 0 var(--enso-spacing-sm); }
.enso-category-header__description { color: var(--enso-text-secondary); margin: 0; max-width: var(--enso-container-narrow); }
.enso-section-header__count { display: inline-block; color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); margin-top: var(--enso-spacing-xs); }
.enso-sections-grid { display: grid; gap: var(--enso-spacing-lg); grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr)); }
.enso-section-card { display: flex; flex-direction: column; gap: var(--enso-spacing-sm); padding: var(--enso-spacing-lg); background-color: var(--enso-bg-primary); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); }
/* The title takes the row; the count sits beside it when both fit and wraps
   under it otherwise (a long or translated count label used to squash the title
   to one word per line and overflow the card). */
.enso-section-card__header { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--enso-spacing-xs) var(--enso-spacing-md); }
.enso-section-card__title { flex: 1 1 auto; min-width: 0; overflow-wrap: break-word; font-size: var(--enso-font-size-xl); margin: 0; }
.enso-section-card__link { color: var(--enso-text-primary); text-decoration: none; }
.enso-section-card__link:hover { color: var(--enso-color-primary); }
.enso-section-card__count { flex: 0 1 auto; min-width: 0; max-width: 100%; color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-section-card__description { color: var(--enso-text-secondary); margin: 0; }
.enso-section-card__articles { list-style: none; margin: var(--enso-spacing-xs) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-section-card__article-link { color: var(--enso-link-color); text-decoration: none; }
.enso-section-card__article-link:hover { text-decoration: underline; }
.enso-section-card__more { margin-top: var(--enso-spacing-sm); font-weight: var(--enso-font-weight-medium); color: var(--enso-color-primary); text-decoration: none; }
.enso-section-card__more:hover { text-decoration: underline; }
.enso-subsection-card { display: block; padding: var(--enso-spacing-lg); background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); text-decoration: none; transition: box-shadow var(--enso-transition-fast); }
.enso-subsection-card:hover { box-shadow: var(--enso-card-shadow); }
.enso-subsection-card__title { font-size: var(--enso-font-size-lg); margin: 0 0 var(--enso-spacing-xs); color: var(--enso-text-primary); }
.enso-subsection-card__description { color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); margin: 0 0 var(--enso-spacing-xs); }
.enso-subsection-card__count { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-articles-list { display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }

/* ---- Search results page ---------------------------------------------- */
.enso-search-header { margin-bottom: var(--enso-spacing-xl); }
.enso-search-header__title { font-size: var(--enso-font-size-3xl); margin: 0 0 var(--enso-spacing-md); }
.enso-search-header__form { max-width: var(--enso-container-narrow); }
.enso-search-header__count { color: var(--enso-text-secondary); margin: var(--enso-spacing-md) 0 0; }
/* Quick answers wrapper. Zendesk's app draws its own card inside a CLOSED
   shadow root (CSS can never see or hide its content), so the wrapper takes no
   space until the app renders. The inline ResizeObserver in search_results.hbs
   adds .is-populated once it has height. The app's card is transparent and
   assumes a white page, so on a tinted page its link (#1F73B7, 4.05:1 on sand),
   border and feedback icons lost contrast: once populated, the wrapper paints the
   card surface under it. No padding (the app's card fills the wrapper edge to
   edge); the radius matches the app's own 8px card corners, sampled from the live
   screenshots, so no surface corner shows outside its border. Dark mode keeps
   the page behind it: the app's dark link (~#2694D6) is 5.1:1 on the default
   dark page but 4.4:1 on the default dark bg-secondary. Never display:none here
   (guard #22). */
.enso-generative-answers.is-populated { margin-bottom: var(--enso-spacing-xl); background-color: var(--enso-bg-secondary); border-radius: 8px; }
[data-theme=dark] .enso-generative-answers.is-populated { background-color: transparent; }
.enso-search-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--enso-spacing-2xl); align-items: start; }
/* Two columns ONLY when the filters aside is rendered (search_show_filters);
   otherwise the results auto-placed into the 280px sidebar track. */
@media (min-width: 992px) { .enso-search-layout:has(> .enso-search-filters) { grid-template-columns: var(--enso-sidebar-width) minmax(0, 1fr); } }
.enso-search-filters { background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); padding: var(--enso-spacing-lg); }
.enso-search-filters__heading { font-size: var(--enso-font-size-sm); text-transform: uppercase; letter-spacing: .05em; color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-md); }
.enso-search-filter { margin-bottom: var(--enso-spacing-lg); }
.enso-search-filter__title { font-size: var(--enso-font-size-base); margin: 0 0 var(--enso-spacing-sm); }
.enso-search-filter__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-search-filter__link { display: flex; justify-content: space-between; gap: var(--enso-spacing-sm); color: var(--enso-text-secondary); text-decoration: none; padding: var(--enso-spacing-xs) 0; }
.enso-search-filter__link:hover { color: var(--enso-link-color); }
.enso-search-filter__link--active { color: var(--enso-color-primary); font-weight: var(--enso-font-weight-medium); }
.enso-search-filter__count { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
/* v1.5.4: results flow side by side, then stack. Each card is at least 22rem
   (or the full width on a phone): 3 across in the 1280px container, 2 beside the
   filters sidebar or on a tablet, 1 on a phone. auto-fit collapses empty tracks,
   so 1-2 results stretch instead of leaving dead space. Cards in a row share one
   height and the meta line sits at the bottom of each card. */
.enso-search-results { display: flex; flex-direction: column; gap: var(--enso-spacing-md); min-width: 0; }
.enso-search-results__list { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr)); gap: var(--enso-spacing-md); align-items: stretch; }
.enso-search-result { display: flex; flex-direction: column; min-width: 0; }
.enso-search-result__type { align-self: flex-start; }
.enso-search-result__meta { margin-top: auto; }
.enso-search-result { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); transition: box-shadow var(--enso-transition-fast); }
.enso-search-result:hover { box-shadow: var(--enso-card-shadow); }
/* The title is the link; ::after stretches its hit area over the whole card
   (the card is position:relative in the v1.4 section). */
.enso-search-result__link { text-decoration: none; color: inherit; }
.enso-search-result__type { margin-bottom: var(--enso-spacing-sm); }
.enso-search-result__title { font-size: var(--enso-font-size-lg); color: var(--enso-link-color); margin: 0 0 var(--enso-spacing-xs); }
.enso-search-result__snippet { color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-sm); overflow-wrap: anywhere; }
.enso-search-result__meta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
/* Path separator BETWEEN steps only (never after the last one, which used to
   point at the author). U+203A is Bidi_Mirrored, so RTL flips it on its own. */
.enso-search-result__category + .enso-search-result__category::before { content: "›"; margin-inline-end: var(--enso-spacing-md); color: var(--enso-text-muted); }
/* Middle dot between the meta groups (path · author · date), as Copenhagen. */
.enso-search-result__category + .enso-search-result__author::before,
.enso-search-result__category + .enso-search-result__date::before,
.enso-search-result__author + .enso-search-result__date::before { content: "·"; margin-inline-end: var(--enso-spacing-md); color: var(--enso-text-muted); }

/* ---- Native instant-search dropdown (zd-autocomplete) -------------------
   {{search instant=true}} injects Zendesk's <zd-autocomplete> web component in
   the LIGHT DOM (no shadow root). Zendesk's global application.css colours the
   result titles brand-blue via `zd-autocomplete-multibrand
   zd-autocomplete-title-multibrand{color:#1f73b7}` (specificity 0,0,2, no
   !important). A 3-tag descendant selector (0,0,3) beats it without !important.
   The dropdown panel is HARD-CODED white by Zendesk in BOTH themes, so titles
   use --enso-link-on-light (the light-mode link colour, never dark-swapped) to
   stay legible on the white panel even when the theme is in dark mode. Covers
   the modern -multibrand markup and the legacy single-brand markup. */
zd-autocomplete zd-autocomplete-multibrand zd-autocomplete-title-multibrand,
zd-autocomplete zd-autocomplete-option zd-autocomplete-title {
  color: var(--enso-link-on-light);
}

/* ---- Error page / empty states (error base/code/title already styled) -- */
.enso-error__icon { color: var(--enso-text-muted); margin-bottom: var(--enso-spacing-lg); display: flex; justify-content: center; }
.enso-error__suggestions { max-width: var(--enso-container-narrow); margin: var(--enso-spacing-xl) auto; text-align: start; background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); padding: var(--enso-spacing-lg) var(--enso-spacing-xl); }
.enso-error__suggestions-title { font-size: var(--enso-font-size-base); font-weight: var(--enso-font-weight-bold); margin: 0 0 var(--enso-spacing-sm); }
.enso-error__suggestions-list { margin: 0; padding-inline-start: var(--enso-spacing-lg); color: var(--enso-text-secondary); display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-error__search { max-width: var(--enso-container-narrow); margin: var(--enso-spacing-xl) auto 0; }
.enso-error__search-label { color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-sm); }
.enso-empty-state { text-align: center; padding: var(--enso-spacing-3xl) var(--enso-spacing-lg); color: var(--enso-text-secondary); }
.enso-empty-state__icon { color: var(--enso-text-muted); margin-bottom: var(--enso-spacing-md); }
.enso-empty-state__title { margin: 0 0 var(--enso-spacing-sm); }
.enso-empty-state__description { color: var(--enso-text-secondary); margin: 0 auto var(--enso-spacing-md); max-width: 48ch; }
.enso-empty-state__list { list-style: none; margin: 0 auto; padding: 0; max-width: 40ch; text-align: start; display: inline-flex; flex-direction: column; gap: var(--enso-spacing-xs); color: var(--enso-text-secondary); }

/* ---- Mobile collapse (Pass 1) ----------------------------------------- */
@media (max-width: 767.98px) {
  .enso-section-card__header { flex-direction: column; align-items: flex-start; gap: var(--enso-spacing-xs); }
  .enso-footer__bottom-inner { flex-direction: column; align-items: flex-start; }
}

/* ======================================================================
   WS8 #4 — Pass 2: forms, status/priority badges, requests list + ticket
   detail, shared sidebar cards. Token-driven.
   ====================================================================== */

/* ---- Forms ------------------------------------------------------------ */
.enso-form-group { margin-bottom: var(--enso-spacing-lg); }
.enso-form-label { display: inline-block; font-weight: var(--enso-font-weight-medium); color: var(--enso-text-primary); margin-bottom: var(--enso-spacing-xs); }
.enso-form-required { color: var(--enso-color-error); margin-inline-start: 2px; }
.enso-form-group--required > .enso-form-label::after { content: " *"; color: var(--enso-color-error); }
.enso-form-hint { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); margin: 0 0 var(--enso-spacing-xs); }
.enso-form-error { color: var(--enso-color-error); font-size: var(--enso-font-size-sm); margin-top: var(--enso-spacing-xs); }
.enso-form-control, .enso-form-textarea, .enso-form-select { display: block; width: 100%; background-color: var(--enso-bg-primary); color: var(--enso-text-primary); border: var(--enso-border-width) solid var(--enso-input-border); border-radius: var(--enso-input-radius); padding: var(--enso-spacing-sm) var(--enso-spacing-md); font-family: inherit; font-size: var(--enso-font-size-base); line-height: 1.5; transition: border-color var(--enso-transition-fast), box-shadow var(--enso-transition-fast); }
.enso-form-control:focus, .enso-form-textarea:focus, .enso-form-select:focus { border-color: var(--enso-input-focus); box-shadow: 0 0 0 3px color-mix(in srgb, var(--enso-input-focus) 20%, transparent); outline: none; }
.enso-form-textarea { min-height: 120px; resize: vertical; }
.enso-form-select--sm { width: auto; padding: var(--enso-spacing-xs) var(--enso-spacing-sm); font-size: var(--enso-font-size-sm); }
.enso-form-control--select, .enso-form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23676767' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"); background-position: right var(--enso-spacing-sm) center; background-repeat: no-repeat; background-size: 16px 12px; padding-right: calc(var(--enso-spacing-md) + 16px); }
.enso-form-file { display: block; width: 100%; font-size: var(--enso-font-size-sm); color: var(--enso-text-secondary); }
.enso-form-actions { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); margin-top: var(--enso-spacing-lg); }
.enso-suggestion-list { margin: var(--enso-spacing-sm) 0; }

/* ---- Badge status / priority / size modifiers ------------------------- */
.enso-badge--sm { padding: 2px var(--enso-spacing-xs); font-size: var(--enso-font-size-sm); }
.enso-badge--info { background-color: color-mix(in srgb, var(--enso-color-primary) 14%, transparent); color: var(--enso-color-primary); }
.enso-badge--official { background-color: var(--enso-color-accent); color: var(--enso-text-inverse); }
.enso-badge--new { background-color: color-mix(in srgb, var(--enso-color-primary) 14%, transparent); color: var(--enso-color-primary); }
.enso-badge--open { background-color: color-mix(in srgb, var(--enso-color-warning) 18%, transparent); color: color-mix(in srgb, var(--enso-color-warning) 70%, #000); }
.enso-badge--pending { background-color: color-mix(in srgb, var(--enso-color-warning) 18%, transparent); color: color-mix(in srgb, var(--enso-color-warning) 70%, #000); }
.enso-badge--hold { background-color: var(--enso-bg-tertiary); color: var(--enso-text-secondary); }
.enso-badge--solved { background-color: color-mix(in srgb, var(--enso-color-success) 16%, transparent); color: var(--enso-color-success); }
.enso-badge--closed { background-color: var(--enso-bg-tertiary); color: var(--enso-text-muted); }
.enso-badge--priority-low { background-color: var(--enso-bg-tertiary); color: var(--enso-text-secondary); }
.enso-badge--priority-normal { background-color: color-mix(in srgb, var(--enso-color-primary) 12%, transparent); color: var(--enso-color-primary); }
.enso-badge--priority-high { background-color: color-mix(in srgb, var(--enso-color-warning) 18%, transparent); color: color-mix(in srgb, var(--enso-color-warning) 70%, #000); }
.enso-badge--priority-urgent { background-color: color-mix(in srgb, var(--enso-color-error) 16%, transparent); color: var(--enso-color-error); }
.enso-badge-grid { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); }

/* ---- Requests list page ----------------------------------------------- */
.enso-requests-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); margin-bottom: var(--enso-spacing-lg); }
.enso-requests-tabs { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-xs); }
.enso-requests-tab { padding: var(--enso-spacing-xs) var(--enso-spacing-md); border-radius: var(--enso-border-radius-full); color: var(--enso-text-secondary); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-requests-tab:hover { background-color: var(--enso-bg-secondary); color: var(--enso-text-primary); }
.enso-requests-tab--active { background-color: var(--enso-color-primary); color: var(--enso-text-inverse); }
.enso-requests-search { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-md); }
.enso-requests-search__input-wrapper { position: relative; }
.enso-requests-search__icon { position: absolute; left: var(--enso-spacing-sm); top: 50%; transform: translateY(-50%); color: var(--enso-text-muted); pointer-events: none; }
.enso-requests-search__input { padding: var(--enso-spacing-sm) var(--enso-spacing-md) var(--enso-spacing-sm) calc(var(--enso-spacing-md) + 18px); border: var(--enso-border-width) solid var(--enso-input-border); border-radius: var(--enso-input-radius); background-color: var(--enso-bg-primary); color: var(--enso-text-primary); font-size: var(--enso-font-size-base); }
.enso-requests-search__input:focus { border-color: var(--enso-input-focus); outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--enso-input-focus) 20%, transparent); }
.enso-requests-org-toggle { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-requests-list { overflow-x: auto; }
.enso-requests-table { width: 100%; border-collapse: collapse; }
.enso-requests-table__th { text-align: start; padding: var(--enso-spacing-sm) var(--enso-spacing-md); font-size: var(--enso-font-size-sm); font-weight: var(--enso-font-weight-medium); color: var(--enso-text-secondary); border-bottom: var(--enso-border-width) solid var(--enso-border-color); white-space: nowrap; }
.enso-requests-table__td { padding: var(--enso-spacing-md); border-bottom: var(--enso-border-width) solid var(--enso-border-color); vertical-align: middle; }
.enso-requests-table__row:hover { background-color: var(--enso-bg-secondary); }
.enso-requests-table__link { color: var(--enso-link-color); text-decoration: none; font-weight: var(--enso-font-weight-medium); }
.enso-requests-table__link:hover { text-decoration: underline; }
.enso-requests-table__id { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-requests-table__td--created, .enso-requests-table__td--updated, .enso-requests-table__th--created, .enso-requests-table__th--updated { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); white-space: nowrap; }

/* ---- Request (ticket) detail page ------------------------------------- */
.enso-request-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--enso-spacing-2xl); align-items: start; }
@media (min-width: 992px) { .enso-request-layout { grid-template-columns: minmax(0, 1fr) var(--enso-sidebar-width); } }
.enso-request__header { margin-bottom: var(--enso-spacing-lg); }
.enso-request__header-top { display: flex; align-items: center; gap: var(--enso-spacing-md); margin-bottom: var(--enso-spacing-sm); }
.enso-request__id { color: var(--enso-text-muted); font-family: var(--enso-font-mono); font-size: var(--enso-font-size-sm); }
.enso-request__title { font-size: var(--enso-font-size-2xl); margin: 0 0 var(--enso-spacing-sm); }
.enso-request__meta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-request__description { line-height: var(--enso-line-height-relaxed); padding-bottom: var(--enso-spacing-lg); border-bottom: var(--enso-border-width) solid var(--enso-border-color); margin-bottom: var(--enso-spacing-lg); }
.enso-request__attachments { margin-bottom: var(--enso-spacing-lg); }
.enso-request__attachments-title { font-size: var(--enso-font-size-base); margin: 0 0 var(--enso-spacing-sm); }
.enso-request__attachments-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-request__attachment-link { display: inline-flex; align-items: center; gap: var(--enso-spacing-sm); color: var(--enso-link-color); text-decoration: none; }
.enso-request__attachment-link:hover { text-decoration: underline; }
.enso-request__attachment-size { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-request__comments { margin-top: var(--enso-spacing-xl); }
.enso-request__comments-heading { font-size: var(--enso-font-size-xl); margin: 0 0 var(--enso-spacing-lg); }
.enso-request__comments-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-lg); }
.enso-request__no-comments { color: var(--enso-text-muted); }
.enso-request-comment { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-request-comment__header { display: flex; align-items: center; gap: var(--enso-spacing-sm); margin-bottom: var(--enso-spacing-sm); }
.enso-request-comment__author-info { display: flex; flex-direction: column; }
.enso-request-comment__author { font-weight: var(--enso-font-weight-medium); }
.enso-request-comment__time { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-request-comment__body { line-height: var(--enso-line-height-relaxed); }
.enso-request-comment__attachments { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); margin-top: var(--enso-spacing-sm); }
.enso-request-comment__attachment { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); color: var(--enso-link-color); font-size: var(--enso-font-size-sm); text-decoration: none; }
.enso-request__reply { margin-top: var(--enso-spacing-xl); }
.enso-request__solved-action { margin-top: var(--enso-spacing-lg); padding: var(--enso-spacing-lg); background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); }
.enso-request__solved-text { margin: 0; font-weight: var(--enso-font-weight-medium); }
.enso-request-sidebar { display: flex; flex-direction: column; gap: var(--enso-spacing-lg); }
.enso-request-details, .enso-request-cc { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); }
.enso-request-details__heading, .enso-request-cc__heading { font-size: var(--enso-font-size-base); margin: 0 0 var(--enso-spacing-md); }
.enso-request-details__list { margin: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-request-details__item { display: flex; align-items: baseline; justify-content: space-between; gap: var(--enso-spacing-md); }
.enso-request-details__item dt { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); margin: 0; }
.enso-request-details__item dd { margin: 0; text-align: end; }
.enso-request-cc__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); color: var(--enso-text-secondary); }

/* ---- New request page chrome + help ----------------------------------- */
.enso-request-form-container { margin-bottom: var(--enso-spacing-xl); }
.enso-request-help__heading { font-size: var(--enso-font-size-base); margin: 0 0 var(--enso-spacing-sm); }
.enso-request-help__text { color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-sm); }
.enso-request-help__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }

/* ---- Shared sidebar cards / stats / details / quick links ------------- */
.enso-section-title { font-size: var(--enso-font-size-xl); margin: 0 0 var(--enso-spacing-md); }
.enso-sidebar-card { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); }
.enso-sidebar-card + .enso-sidebar-card { margin-top: var(--enso-spacing-lg); }
.enso-sidebar-card__title { font-size: var(--enso-font-size-base); font-weight: var(--enso-font-weight-bold); margin: 0 0 var(--enso-spacing-md); }
.enso-sidebar-card__link { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); margin-top: var(--enso-spacing-md); color: var(--enso-color-primary); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-details-list { margin: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-details-list__item { display: flex; flex-direction: column; gap: 2px; }
.enso-details-list__label { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-details-list__value { color: var(--enso-text-primary); }
.enso-quick-links { display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-quick-link { display: flex; align-items: center; gap: var(--enso-spacing-sm); padding: var(--enso-spacing-sm); border-radius: var(--enso-border-radius-sm); color: var(--enso-text-primary); text-decoration: none; }
.enso-quick-link:hover { background-color: var(--enso-bg-primary); color: var(--enso-color-primary); }
.enso-quick-link__icon { flex: 0 0 auto; color: var(--enso-text-muted); }
.enso-stats-grid { display: grid; gap: var(--enso-spacing-md); grid-template-columns: repeat(auto-fit, minmax(min(160px, 100%), 1fr)); }
.enso-stat-card { display: flex; align-items: center; gap: var(--enso-spacing-md); padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-stat-card__icon { flex: 0 0 auto; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--enso-border-radius); background-color: color-mix(in srgb, var(--enso-color-primary) 12%, transparent); color: var(--enso-color-primary); }
.enso-stat-card__content { display: flex; flex-direction: column; }
.enso-stat-card__value { font-size: var(--enso-font-size-2xl); font-weight: var(--enso-font-weight-bold); color: var(--enso-text-primary); line-height: 1.1; }
.enso-stat-card__label { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-info-card { display: flex; gap: var(--enso-spacing-md); padding: var(--enso-spacing-lg); border-radius: var(--enso-card-radius); background-color: color-mix(in srgb, var(--enso-color-primary) 8%, var(--enso-bg-secondary)); }
.enso-info-card__icon { flex: 0 0 auto; color: var(--enso-color-primary); }
.enso-info-card__title { font-size: var(--enso-font-size-base); margin: 0 0 var(--enso-spacing-xs); }
.enso-info-card__text { color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); margin: 0; }

/* ---- Pass 2 mobile collapse ------------------------------------------- */
@media (max-width: 767.98px) {
  .enso-requests-toolbar { flex-direction: column; align-items: stretch; }
  .enso-request__solved-action { flex-direction: column; align-items: flex-start; }
}

/* ======================================================================
   WS8 #4 — Pass 3: community, user profile, contributions, subscriptions,
   small shared modifiers. Token-driven.
   ====================================================================== */

/* ---- Small shared modifiers ------------------------------------------- */
.enso-avatar--xs { width: 24px; height: 24px; }
.enso-avatar--xl { width: 96px; height: 96px; }
.enso-btn--success { background-color: var(--enso-color-success); border-color: var(--enso-color-success); color: var(--enso-text-inverse); }
.enso-btn--success:hover:not(:disabled) { background-color: color-mix(in srgb, var(--enso-color-success) 85%, #000); border-color: color-mix(in srgb, var(--enso-color-success) 85%, #000); color: var(--enso-text-inverse); }
.enso-btn__icon { flex: 0 0 auto; }
.enso-activity-item__content { display: flex; flex-direction: column; gap: 2px; }
.enso-activity-item__type { color: var(--enso-text-secondary); }

/* ---- Community: shells + toolbar + sort ------------------------------- */
.enso-community { padding-bottom: var(--enso-spacing-2xl); }
.enso-community__main { min-width: 0; }
.enso-community__new-post { display: inline-flex; }
.enso-community-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); margin-bottom: var(--enso-spacing-lg); }
.enso-community-toolbar__sort { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-sort-nav { display: inline-flex; flex-wrap: wrap; gap: var(--enso-spacing-xs); }
.enso-sort-nav__link { padding: var(--enso-spacing-xs) var(--enso-spacing-sm); border-radius: var(--enso-border-radius-full); color: var(--enso-text-secondary); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-sort-nav__link:hover { background-color: var(--enso-bg-secondary); color: var(--enso-text-primary); }
.enso-sort-nav__link--active { background-color: var(--enso-color-primary); color: var(--enso-text-inverse); }
.enso-featured-posts { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-featured-posts__item a { color: var(--enso-link-color); text-decoration: none; }
.enso-featured-posts__item a:hover { text-decoration: underline; }

/* ---- Community: post cards (list + topic) ----------------------------- */
.enso-community-posts-list, .enso-post-list { display: flex; flex-direction: column; gap: var(--enso-spacing-md); list-style: none; margin: 0; padding: 0; }
.enso-post-card, .enso-community-post-card { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: var(--enso-spacing-lg); align-items: start; padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-post-card--featured, .enso-community-post-card--featured { border-color: var(--enso-color-primary); box-shadow: 0 0 0 1px var(--enso-color-primary); }
.enso-community-post-card--pinned { background-color: color-mix(in srgb, var(--enso-color-warning) 6%, var(--enso-bg-primary)); }
.enso-post-card__votes, .enso-community-post-card__votes { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 56px; padding: var(--enso-spacing-sm); border-radius: var(--enso-border-radius); background-color: var(--enso-bg-secondary); }
.enso-post-card__vote-count, .enso-community-post-card__vote-count { font-size: var(--enso-font-size-lg); font-weight: var(--enso-font-weight-bold); color: var(--enso-text-primary); }
.enso-post-card__vote-label, .enso-community-post-card__vote-label { font-size: var(--enso-font-size-sm); color: var(--enso-text-muted); }
.enso-post-card__content, .enso-community-post-card__content { min-width: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-post-card__header { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-xs); }
.enso-post-card__title, .enso-community-post-card__title { font-size: var(--enso-font-size-lg); margin: 0; }
.enso-post-card__title a, .enso-community-post-card__title a, .enso-community-post-card__link { color: var(--enso-text-primary); text-decoration: none; }
.enso-post-card__title a:hover, .enso-community-post-card__title a:hover { color: var(--enso-color-primary); }
.enso-post-card__meta, .enso-community-post-card__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-sm); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-post-card__author-name, .enso-community-post-card__author { color: var(--enso-text-secondary); }
.enso-community-post-card__separator { color: var(--enso-text-muted); }
.enso-community-post-card__comments { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); }
.enso-post-card__stats, .enso-community-post-card__badge { display: flex; align-items: center; gap: var(--enso-spacing-xs); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-post-card__stat { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); }

/* ---- Community: topic cards ------------------------------------------- */
.enso-community-topics { display: grid; gap: var(--enso-spacing-md); grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); }
.enso-community-topic-card { display: flex; align-items: center; gap: var(--enso-spacing-md); padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); text-decoration: none; transition: box-shadow var(--enso-transition-fast); }
.enso-community-topic-card:hover { box-shadow: var(--enso-card-shadow); }
.enso-community-topic-card__icon { flex: 0 0 auto; display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: var(--enso-border-radius); background-color: color-mix(in srgb, var(--enso-color-primary) 12%, transparent); color: var(--enso-color-primary); }
.enso-community-topic-card__content { flex: 1 1 auto; min-width: 0; }
.enso-community-topic-card__title { font-size: var(--enso-font-size-lg); margin: 0 0 var(--enso-spacing-xs); color: var(--enso-text-primary); }
.enso-community-topic-card__description { color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); margin: 0 0 var(--enso-spacing-sm); }
.enso-community-topic-card__stats { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-community-topic-card__stat { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); }
.enso-community-topic-card__arrow { flex: 0 0 auto; color: var(--enso-text-muted); }

/* ---- Community: topic header ------------------------------------------ */
.enso-community-topic-header { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--enso-spacing-lg); margin-bottom: var(--enso-spacing-xl); }
.enso-community-topic-header__content { flex: 1 1 320px; min-width: 0; }
.enso-community-topic-header__title { font-size: var(--enso-font-size-3xl); margin: 0 0 var(--enso-spacing-sm); }
.enso-community-topic-header__description { color: var(--enso-text-secondary); margin: 0; }
.enso-community-topic-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-md); }

/* ---- Community: single post + comments -------------------------------- */
.enso-community-post-layout { max-width: var(--enso-content-width); }
.enso-community-post__header { margin-bottom: var(--enso-spacing-lg); }
.enso-community-post__title { font-size: var(--enso-font-size-3xl); margin: var(--enso-spacing-sm) 0; }
.enso-community-post__meta { display: flex; align-items: center; gap: var(--enso-spacing-sm); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-community-post__author-info { display: flex; flex-direction: column; }
.enso-community-post__author { font-weight: var(--enso-font-weight-medium); color: var(--enso-text-secondary); }
.enso-community-post__body { line-height: var(--enso-line-height-relaxed); padding-bottom: var(--enso-spacing-lg); border-bottom: var(--enso-border-width) solid var(--enso-border-color); }
.enso-community-post__footer { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); padding: var(--enso-spacing-md) 0; }
.enso-community-post__voting { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-community-post__vote-count { font-weight: var(--enso-font-weight-bold); min-width: 2ch; text-align: center; }
.enso-community-post__actions { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-community-comments { margin-top: var(--enso-spacing-xl); }
.enso-community-comments__heading { font-size: var(--enso-font-size-xl); margin: 0 0 var(--enso-spacing-lg); }
.enso-community-comments__count { color: var(--enso-text-muted); font-weight: var(--enso-font-weight-normal); }
.enso-community-comments__form-container { margin-bottom: var(--enso-spacing-xl); }
.enso-community-comments__sign-in { padding: var(--enso-spacing-lg); background-color: var(--enso-bg-secondary); border-radius: var(--enso-card-radius); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-md); margin-bottom: var(--enso-spacing-xl); }
.enso-community-comments__empty { color: var(--enso-text-muted); }
.enso-community-comments__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-lg); }
.enso-community-comment { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-community-comment--official { border-color: var(--enso-color-accent); background-color: color-mix(in srgb, var(--enso-color-accent) 6%, var(--enso-bg-primary)); }
.enso-community-comment__header { display: flex; align-items: center; gap: var(--enso-spacing-sm); margin-bottom: var(--enso-spacing-sm); }
.enso-community-comment__author-info { display: flex; flex-direction: column; }
.enso-community-comment__author { font-weight: var(--enso-font-weight-medium); }
.enso-community-comment__time { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-community-comment__body { line-height: var(--enso-line-height-relaxed); margin-bottom: var(--enso-spacing-sm); }
.enso-community-comment__actions { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-community-comment__vote-count { min-width: 2ch; text-align: center; font-size: var(--enso-font-size-sm); }

/* ---- New post page (form + guidelines/tips sidebar) ------------------- */
.enso-new-post { display: grid; gap: var(--enso-spacing-2xl); align-items: start; }
@media (min-width: 992px) { .enso-new-post { grid-template-columns: minmax(0, 1fr) var(--enso-sidebar-width); } }
.enso-new-post__main { min-width: 0; }
.enso-new-post__sidebar { display: flex; flex-direction: column; gap: var(--enso-spacing-lg); }
.enso-post-form { display: block; }
.enso-guidelines-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-guidelines-list__item { display: flex; align-items: flex-start; gap: var(--enso-spacing-sm); color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); }
.enso-guidelines-list__icon { flex: 0 0 auto; color: var(--enso-color-success); margin-top: 2px; }
.enso-tip { display: flex; gap: var(--enso-spacing-sm); }
.enso-tip + .enso-tip { margin-top: var(--enso-spacing-md); }
.enso-tip__icon { flex: 0 0 auto; color: var(--enso-color-primary); }
.enso-tip__text { margin: 0; color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); }

/* ---- User profile ----------------------------------------------------- */
.enso-user-profile { display: grid; gap: var(--enso-spacing-2xl); align-items: start; }
@media (min-width: 992px) { .enso-user-profile { grid-template-columns: minmax(0, 1fr) var(--enso-sidebar-width); } }
.enso-user-profile__main { min-width: 0; }
.enso-user-profile__header { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-xl); margin-bottom: var(--enso-spacing-xl); }
.enso-user-profile__avatar-wrapper { position: relative; flex: 0 0 auto; }
.enso-user-profile__role-badge { position: absolute; bottom: 0; right: 0; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--enso-border-radius-full); background-color: var(--enso-bg-primary); color: var(--enso-color-primary); box-shadow: var(--enso-shadow-sm); }
.enso-user-profile__role-badge--admin { color: var(--enso-color-warning); }
.enso-user-profile__role-badge--agent { color: var(--enso-color-primary); }
.enso-user-profile__info { min-width: 0; }
.enso-user-profile__name { font-size: var(--enso-font-size-3xl); margin: 0 0 var(--enso-spacing-xs); }
.enso-user-profile__role { display: inline-block; color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); margin-bottom: var(--enso-spacing-sm); }
.enso-user-profile__meta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-user-profile__meta-item { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); }
.enso-user-profile__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-md); margin-top: var(--enso-spacing-md); }
.enso-user-profile__bio { margin-bottom: var(--enso-spacing-xl); }
.enso-user-profile__signature { line-height: var(--enso-line-height-relaxed); }
.enso-user-profile__stats { margin-bottom: var(--enso-spacing-xl); }
.enso-user-profile__contributions, .enso-user-profile__badges { margin-bottom: var(--enso-spacing-xl); }
.enso-user-profile__sidebar { display: flex; flex-direction: column; gap: var(--enso-spacing-lg); }
.enso-user-badge { display: flex; flex-direction: column; align-items: center; gap: var(--enso-spacing-xs); width: 96px; text-align: center; }
.enso-user-badge__icon, .enso-user-badge__icon-default { width: 48px; height: 48px; color: var(--enso-color-primary); }
.enso-user-badge__name { font-size: var(--enso-font-size-sm); color: var(--enso-text-secondary); }

/* ---- Contributions ---------------------------------------------------- */
.enso-contributions-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-md); }
.enso-contribution-card { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; gap: var(--enso-spacing-md); align-items: center; padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-contribution-card__icon { flex: 0 0 auto; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: var(--enso-border-radius); background-color: var(--enso-bg-secondary); color: var(--enso-text-secondary); }
.enso-contribution-card__content { min-width: 0; }
.enso-contribution-card__type { text-transform: uppercase; letter-spacing: .05em; font-size: var(--enso-font-size-sm); color: var(--enso-text-muted); }
.enso-contribution-card__title { font-size: var(--enso-font-size-lg); margin: var(--enso-spacing-xs) 0; }
.enso-contribution-card__title a { color: var(--enso-text-primary); text-decoration: none; }
.enso-contribution-card__title a:hover { color: var(--enso-color-primary); }
.enso-contribution-card__meta { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-contribution-card__stats, .enso-contribution-card__stat { display: flex; align-items: center; gap: var(--enso-spacing-xs); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-contribution-card__actions { display: flex; align-items: center; }

/* ---- Subscriptions ---------------------------------------------------- */
.enso-subscriptions-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-md); }
.enso-subscription-card { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: var(--enso-spacing-md); align-items: center; padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-primary); }
.enso-subscription-card__icon { flex: 0 0 auto; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: var(--enso-border-radius); background-color: var(--enso-bg-secondary); color: var(--enso-text-secondary); overflow: hidden; }
.enso-subscription-card__content { min-width: 0; }
.enso-subscription-card__type { text-transform: uppercase; letter-spacing: .05em; font-size: var(--enso-font-size-sm); color: var(--enso-text-muted); }
.enso-subscription-card__title { font-size: var(--enso-font-size-lg); margin: var(--enso-spacing-xs) 0; }
.enso-subscription-card__title a { color: var(--enso-text-primary); text-decoration: none; }
.enso-subscription-card__title a:hover { color: var(--enso-color-primary); }
.enso-subscription-card__meta { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-subscription-card__actions { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-subscriptions__tips { margin-top: var(--enso-spacing-xl); }

/* ---- Pass 3 mobile collapse ------------------------------------------- */
@media (max-width: 767.98px) {
  .enso-post-card, .enso-community-post-card { grid-template-columns: 1fr; }
  .enso-post-card__votes, .enso-community-post-card__votes { flex-direction: row; gap: var(--enso-spacing-xs); min-width: 0; align-self: flex-start; }
  .enso-contribution-card, .enso-subscription-card { grid-template-columns: auto minmax(0, 1fr); }
  .enso-contribution-card__stats, .enso-contribution-card__actions, .enso-subscription-card__actions { grid-column: 2; justify-content: flex-start; }
  .enso-community-topic-header { flex-direction: column; }
  .enso-user-profile__header { gap: var(--enso-spacing-md); }
}

/* ======================================================================
   WP-C — request / requests-list / profile / community: v4 data-model
   hooks (CSAT + follow-up callouts, upload, mark-as-solved checkbox,
   organization form, requests status filter + sorters, profile tabs /
   activities / private state, post + comment action menus, official
   checkbox). Wrappers only: the native {{subscribe}} / {{actions}} buttons
   are styled elsewhere. Token-driven, so dark mode follows [data-theme].
   ====================================================================== */

/* ---- Request page ------------------------------------------------------ */
.enso-request__satisfaction { margin: 0 0 var(--enso-spacing-lg); color: var(--enso-text-secondary); }
.enso-request__follow-up { margin-top: var(--enso-spacing-lg); color: var(--enso-text-secondary); }
.enso-request__satisfaction:empty, .enso-request__follow-up:empty { display: none; }
.enso-request__satisfaction a, .enso-request__follow-up a, .enso-community-comments__callout a { color: var(--enso-link-color); text-decoration: underline; }
/* Legacy-CSAT {{satisfaction}} emits .satisfaction-box, which the platform
   application.css paints #fbfbfb: re-token it so dark mode keeps contrast. */
.enso-request__satisfaction .satisfaction-box { background-color: var(--enso-bg-secondary); border-color: var(--enso-border-color); color: var(--enso-text-primary); }
.enso-request__upload .upload-dropzone { padding: var(--enso-spacing-md); border: var(--enso-border-width) dashed var(--enso-input-border); border-radius: var(--enso-input-radius); background-color: var(--enso-bg-primary); color: var(--enso-text-secondary); }
.enso-request__upload .upload-dropzone span { color: var(--enso-text-secondary); }
/* The platform makes the file input opacity:0 over the dropzone and its only
   focus cue (border-color on [data-hc-focus]) is overridden above, so ring
   the dropzone while the input inside it has focus (WCAG 2.4.7). */
.enso-request__upload .upload-dropzone:focus-within { outline: 2px solid var(--enso-input-focus); outline-offset: 2px; }
.enso-request-reply-form .enso-request__solved-action { margin: 0 0 var(--enso-spacing-lg); }
.enso-request__solved-field { display: inline-flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-request__solved-field input[type="checkbox"], .enso-community-comment-form__official input[type="checkbox"] { width: 18px; height: 18px; margin: 0; accent-color: var(--enso-color-primary); cursor: pointer; }
.enso-request__solved-field label, .enso-community-comment-form__official label { margin: 0; font-weight: var(--enso-font-weight-medium); color: var(--enso-text-primary); cursor: pointer; }
.enso-request-details__item dd { overflow-wrap: anywhere; }
.enso-request-details__rating { display: block; }
.enso-request-details__note { display: block; color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-request-org-form { margin-top: var(--enso-spacing-md); padding-top: var(--enso-spacing-md); border-top: var(--enso-border-width) solid var(--enso-border-color); display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-request-org-form__field { display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-request-org-form__label { color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-request-org-form select { width: 100%; background-color: var(--enso-bg-primary); color: var(--enso-text-primary); border: var(--enso-border-width) solid var(--enso-input-border); border-radius: var(--enso-input-radius); padding: var(--enso-spacing-xs) var(--enso-spacing-sm); font-family: inherit; font-size: var(--enso-font-size-sm); }
.enso-request-org-form select:focus-visible { border-color: var(--enso-input-focus); outline: 2px solid var(--enso-input-focus); outline-offset: 1px; }

/* ---- Requests list ----------------------------------------------------- */
.enso-requests-sort { flex-wrap: wrap; margin-bottom: var(--enso-spacing-lg); }
.enso-community-toolbar__sort { flex-wrap: wrap; }
.enso-community-toolbar__sort .enso-community__sort-label, .enso-requests-sort .enso-community__sort-label { white-space: nowrap; }
.enso-requests__search-info { margin: 0 0 var(--enso-spacing-md); color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }

/* ---- User profile ------------------------------------------------------ */
.enso-user-profile__tabs .enso-tabs__list { flex-wrap: wrap; column-gap: var(--enso-spacing-lg); row-gap: 0; }
.enso-user-profile__section-header { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--enso-spacing-sm) var(--enso-spacing-md); margin-bottom: var(--enso-spacing-md); }
.enso-user-profile__section-header .enso-section-header__title { font-size: var(--enso-font-size-xl); margin: 0; }
.enso-user-profile__section-description { flex-basis: 100%; order: 1; margin: 0; color: var(--enso-text-muted); font-size: var(--enso-font-size-sm); }
.enso-user-profile__empty, .enso-user-profile__private-activity { margin: 0 0 var(--enso-spacing-xl); padding: var(--enso-spacing-lg); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); color: var(--enso-text-secondary); }
.enso-user-profile__private-activity { display: flex; align-items: center; gap: var(--enso-spacing-sm); }
.enso-user-profile__private { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); background-color: var(--enso-bg-secondary); color: var(--enso-text-secondary); border: var(--enso-border-width) solid var(--enso-border-color); }
.enso-activity-item__excerpt { margin: 0; color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); overflow-wrap: anywhere; }
.enso-activity-item__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--enso-spacing-xs) var(--enso-spacing-sm); }
.enso-activity-item__link { font-size: var(--enso-font-size-sm); }
.enso-user-profile__badge-list { list-style: none; margin: 0; padding: 0; }
.enso-user-badge__description, .enso-user-badge__awarded { font-size: var(--enso-font-size-sm); color: var(--enso-text-muted); }

/* ---- Community post: action menus, callout, official checkbox ---------- */
.enso-community-post__manage:empty, .enso-community-comment__manage:empty, .enso-community-comments__callout:empty { display: none; }
.enso-community-comment__manage { margin-inline-start: auto; }
.enso-community-comments__callout { margin-bottom: var(--enso-spacing-lg); color: var(--enso-text-secondary); }
.enso-community-comment__header .enso-badge { margin-inline-start: auto; }
.enso-community-comment-form__official { display: flex; align-items: center; gap: var(--enso-spacing-sm); margin-bottom: var(--enso-spacing-md); }
.enso-community-comment-form__official:not(:has(input)) { display: none; }

/* ======================================================================
   WS8 #4 — Pass 4: article section-nav, activity list, + small polish for
   children not inside an already-styled flex/grid parent.
   ====================================================================== */

/* ---- Article sidebar: section navigation ------------------------------ */
.enso-section-nav { padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); }
.enso-section-nav__heading { font-size: var(--enso-font-size-sm); text-transform: uppercase; letter-spacing: .05em; color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-sm); }
.enso-section-nav__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-section-nav__link { display: block; padding: var(--enso-spacing-xs) var(--enso-spacing-sm); border-radius: var(--enso-border-radius-sm); color: var(--enso-text-secondary); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-section-nav__link:hover { background-color: var(--enso-bg-primary); color: var(--enso-link-color); }
.enso-section-nav__link--active { background-color: color-mix(in srgb, var(--enso-color-primary) 10%, transparent); color: var(--enso-color-primary); font-weight: var(--enso-font-weight-medium); }

/* ---- Profile activity list (ul reset; items already styled) ------------ */
.enso-activity-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-md); }

/* ---- Small polish: children outside an already-styled parent ----------- */
.enso-comment__author { font-weight: var(--enso-font-weight-medium); }
.enso-comments__form-container { margin-bottom: var(--enso-spacing-lg); }
.enso-info-card__content { display: flex; flex-direction: column; gap: var(--enso-spacing-xs); min-width: 0; }
.enso-community-topic-header__text { min-width: 0; }
.enso-subscription-card__unsubscribe { display: inline-flex; }

/* ======================================================================
   A1 contrast audit fix (WCAG 2.2 AA) — the soft same-hue badge text fell
   short of 4.5:1 (open 3.66, urgent 3.76, official 3.53, etc., worse on
   the grey sidebar bg and in dark). Fix: neutral foreground text on the
   hue tint (colour conveyed by background, status by the text label — not
   colour-alone). All pairs now >=4.5:1 in light AND dark, on card + sidebar
   backgrounds (verified: worst 7.3:1). Appended last so it wins the cascade.
   ====================================================================== */
.enso-badge { color: var(--enso-text-primary); }
.enso-badge--new, .enso-badge--info, .enso-badge--priority-normal { background-color: color-mix(in srgb, var(--enso-color-primary) 18%, transparent); color: var(--enso-text-primary); }
.enso-badge--open, .enso-badge--pending, .enso-badge--priority-high { background-color: color-mix(in srgb, var(--enso-color-warning) 24%, transparent); color: var(--enso-text-primary); }
.enso-badge--solved { background-color: color-mix(in srgb, var(--enso-color-success) 22%, transparent); color: var(--enso-text-primary); }
.enso-badge--priority-urgent { background-color: color-mix(in srgb, var(--enso-color-error) 22%, transparent); color: var(--enso-text-primary); }
.enso-badge--official { background-color: color-mix(in srgb, var(--enso-color-accent) 22%, transparent); color: var(--enso-text-primary); }
.enso-badge--hold, .enso-badge--closed, .enso-badge--priority-low { background-color: var(--enso-bg-tertiary); color: var(--enso-text-primary); }
.enso-info-card { background-color: var(--enso-bg-secondary); }

/* ---- A3 fixes: section-nav active contrast (dark) + share tap-target ---- */
/* active link: drop the faint primary tint (4.26:1 in dark) → border accent + primary text (4.95:1 dark / 5.96:1 light) */
.enso-section-nav__link--active { background-color: transparent; color: var(--enso-color-primary); font-weight: var(--enso-font-weight-medium); border-inline-start: 2px solid var(--enso-color-primary); padding-inline-start: calc(var(--enso-spacing-sm) - 2px); }
/* 2.5.8 target size: Zendesk {{share}} renders 12x22px social links; give them a 24x24 hit area */
.enso-article__sharing-buttons a, .enso-article__sharing a[class*="share-"] { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; min-height: 24px; }

/* ---- A5: wire JS-driven dropdown open state (controller adds .enso-dropdown--open) --
   visibility flips instantly on open (0s) so Dropdown.ts can move focus into the
   list in the same tick; closing still fades via the base rule's transition. */
.enso-dropdown--open .enso-dropdown__menu { opacity: 1; transform: translateY(0); visibility: visible; transition: opacity var(--enso-transition-fast), transform var(--enso-transition-fast), visibility 0s; }

/* ---- A4: badges must not stretch as flex-column children (community/post card status) -- */
.enso-badge { align-self: flex-start; }

/* ==== Article / section / category: v4 native helpers (WP-F) ================= */
/* Follow button ({{subscribe}}) on article + section pages. Zendesk mounts a plain
   <button data-selected aria-haspopup="menu"> into the wrapper; give it the
   secondary-button look, and the primary look while following. Token-driven, so
   it follows [data-theme=dark] with no extra rules. */
.enso-article__subscribe,
.enso-section-header__subscribe { margin-top: var(--enso-spacing-md); }
.enso-article__subscribe button[data-selected],
.enso-section-header__subscribe button[data-selected] {
  display: inline-flex;
  align-items: center;
  gap: var(--enso-spacing-xs);
  min-height: 36px;
  padding: var(--enso-spacing-xs) var(--enso-spacing-md);
  font-size: var(--enso-font-size-sm);
  font-weight: var(--enso-font-weight-medium);
  color: var(--enso-text-primary);
  background-color: transparent;
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-button-radius);
  cursor: pointer;
}
.enso-article__subscribe button[data-selected]:hover,
.enso-section-header__subscribe button[data-selected]:hover {
  background-color: var(--enso-bg-secondary);
  border-color: var(--enso-text-secondary);
  color: var(--enso-text-primary);
}
.enso-article__subscribe button[data-selected="true"],
.enso-section-header__subscribe button[data-selected="true"] {
  background-color: var(--enso-color-primary);
  border-color: var(--enso-color-primary);
  color: var(--enso-text-inverse);
}
.enso-article__subscribe button[data-selected="true"]:hover,
.enso-section-header__subscribe button[data-selected="true"]:hover {
  background-color: color-mix(in srgb, var(--enso-color-primary) 85%, #000);
  border-color: color-mix(in srgb, var(--enso-color-primary) 85%, #000);
  color: var(--enso-text-inverse);
}
.enso-article__subscribe button[data-selected]:focus-visible,
.enso-section-header__subscribe button[data-selected]:focus-visible {
  outline: 2px solid var(--enso-color-primary);
  outline-offset: 2px;
}

/* Article vote: the voted button ({{vote}} toggles aria-pressed and adds
   selected_class) must read as selected. Chained with .enso-btn so it outranks
   .enso-btn--secondary and its :hover:not(:disabled) state. */
.enso-btn.enso-article__vote-btn[aria-pressed="true"],
.enso-btn.enso-article__vote-btn.enso-article__vote-btn--voted,
.enso-btn.enso-article__vote-btn[aria-pressed="true"]:hover:not(:disabled),
.enso-btn.enso-article__vote-btn.enso-article__vote-btn--voted:hover:not(:disabled) {
  background-color: var(--enso-color-primary);
  border-color: var(--enso-color-primary);
  color: var(--enso-text-inverse);
}

/* Native {{comment_callout}} ("closed for comments" / "sign in to leave a
   comment" / "be the first…"); renders nothing once comments exist. */
.enso-comments__callout { margin: var(--enso-spacing-md) 0; color: var(--enso-text-secondary); font-size: var(--enso-font-size-sm); }
.enso-comments__callout:empty { display: none; }
.enso-comments__callout a { text-decoration: underline; }

/* Article comment: pending badge, per-comment vote + actions ({{actions}} menu) */
.enso-comment__pending { margin-inline-start: auto; }
.enso-comment__footer { display: flex; align-items: center; justify-content: space-between; gap: var(--enso-spacing-sm); margin-top: var(--enso-spacing-sm); }
.enso-comment__vote { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); }
.enso-comment__vote-sum { min-width: 2ch; text-align: center; font-size: var(--enso-font-size-sm); color: var(--enso-text-secondary); }
.enso-comment__vote-btn,
.enso-comment__actions button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 32px;
  min-height: 32px;
  padding: 0;
  color: var(--enso-text-muted);
  background-color: transparent;
  border: 0;
  border-radius: var(--enso-border-radius-sm);
  cursor: pointer;
}
.enso-comment__vote-btn:hover,
.enso-comment__actions button:hover { color: var(--enso-color-primary); background-color: var(--enso-bg-tertiary); }
.enso-comment__vote-btn[aria-pressed="true"],
.enso-comment__vote-btn--voted { color: var(--enso-color-primary); }
.enso-comment__vote-btn:focus-visible,
.enso-comment__actions button:focus-visible { outline: 2px solid var(--enso-color-primary); outline-offset: 2px; }

/* Article sidebar section nav: link to the full section (article page lists 10) */
.enso-section-nav__more { display: inline-block; margin-top: var(--enso-spacing-sm); padding: var(--enso-spacing-xs) var(--enso-spacing-sm); font-size: var(--enso-font-size-sm); font-weight: var(--enso-font-weight-medium); color: var(--enso-link-color); }

/* ==== Config wiring: code blocks (copy button + optional line numbers) ======= */
.enso-code-block { position: relative; }
.enso-code-block pre {
  overflow-x: auto;
  background: var(--enso-bg-tertiary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-card-radius);
  padding: var(--enso-spacing-md);
  font-family: var(--enso-font-mono);
  font-size: var(--enso-font-size-sm);
  line-height: 1.6;
}
.enso-code-copy {
  position: absolute;
  top: var(--enso-spacing-sm);
  right: var(--enso-spacing-sm);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  background: var(--enso-bg-primary);
  color: var(--enso-text-secondary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-border-radius);
  cursor: pointer;
  opacity: 0;
  transition: opacity var(--enso-transition-fast), color var(--enso-transition-fast);
}
.enso-code-block:hover .enso-code-copy,
.enso-code-copy:focus-visible { opacity: 1; }
.enso-code-copy:hover { color: var(--enso-color-primary); }
.enso-code-copy--success { color: var(--enso-color-success); opacity: 1; }
.enso-code-copy--error { color: var(--enso-color-error); opacity: 1; }
/* Line numbers: a gutter rendered before the <pre> inside a flex wrapper. */
.enso-code-block--numbered {
  display: flex;
  align-items: stretch;
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-card-radius);
  overflow: hidden;
}
.enso-code-block--numbered pre {
  border: 0;
  border-radius: 0;
  margin: 0;
  flex: 1 1 auto;
}
.enso-code-block__lines {
  flex: 0 0 auto;
  padding: var(--enso-spacing-md) var(--enso-spacing-sm);
  font-family: var(--enso-font-mono);
  font-size: var(--enso-font-size-sm);
  line-height: 1.6;
  white-space: pre;
  text-align: right;
  color: var(--enso-text-muted);
  background: var(--enso-bg-secondary);
  border-right: var(--enso-border-width) solid var(--enso-border-color);
  user-select: none;
  -webkit-user-select: none;
}

/* ==== Runtime JS contracts: anchors, embeds, external links, notices ======== */
/* Fragment targets (skip link, TOC links, in-page anchors) stop below the
   sticky header. --enso-sticky-offset is the header's measured height, set by
   script.js; --enso-header-height is the fallback before it runs. */
html:has(.enso-header--sticky) {
  scroll-padding-top: calc(var(--enso-sticky-offset, var(--enso-header-height)) + var(--enso-spacing-md));
}

/* Article embeds never overflow the column (editor iframes carry width="560");
   the article editor's video providers keep a 16:9 box at any width. */
.enso-article__body iframe { max-width: 100%; }
.enso-article__body iframe:is([src*="youtube.com"], [src*="youtube-nocookie.com"], [src*="player.vimeo.com"], [src*="loom.com"], [src*="wistia"], [src*="vidyard.com"], [src*="jwplayer.com"], [src*="jwplatform.com"], [src*="brightcove.net"], [src*="synthesia.io"]) {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
}

/* External-link icon added by script.js (aria-hidden; the spoken
   "opens in a new tab" cue is visually hidden .enso-sr-only text). */
.enso-external-icon {
  display: inline-block;
  margin-inline-start: 0.25em;
  vertical-align: -0.1em;
}

/* Copy-link success state (enso-ui-fixes.js), paired with a live-region announcement. */
.enso-article__share-btn.enso-copy-url--success {
  color: var(--enso-color-success);
  border-color: var(--enso-color-success);
}

/* Notifications: window.EnsoTheme.notify() and known #flash-<key> messages. */
.enso-notifications {
  position: fixed;
  top: var(--enso-spacing-lg);
  inset-inline-end: var(--enso-spacing-lg);
  z-index: var(--enso-z-tooltip);
  width: 100%;
  max-width: 400px;
  pointer-events: none;
}
.enso-notification {
  margin-bottom: var(--enso-spacing-md);
  background: var(--enso-bg-primary);
  color: var(--enso-text-primary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-inline-start-width: 4px;
  border-radius: var(--enso-card-radius);
  box-shadow: var(--enso-shadow-lg);
  opacity: 0;
  transform: translateY(-0.5rem);
  transition: opacity 0.3s ease, transform 0.3s ease;
  pointer-events: auto;
}
.enso-notification--visible { opacity: 1; transform: none; }
.enso-notification--closing { opacity: 0; transform: translateY(-0.5rem); }
.enso-notification--success { border-inline-start-color: var(--enso-color-success); }
.enso-notification--error { border-inline-start-color: var(--enso-color-error); }
.enso-notification--warning { border-inline-start-color: var(--enso-color-warning); }
.enso-notification--info { border-inline-start-color: var(--enso-color-primary); }
.enso-notification__content {
  display: flex;
  align-items: flex-start;
  gap: var(--enso-spacing-sm);
  padding: var(--enso-spacing-md);
}
.enso-notification__icon { flex-shrink: 0; margin-top: 2px; }
.enso-notification--success .enso-notification__icon { color: var(--enso-color-success); }
.enso-notification--error .enso-notification__icon { color: var(--enso-color-error); }
.enso-notification--warning .enso-notification__icon { color: var(--enso-color-warning); }
.enso-notification--info .enso-notification__icon { color: var(--enso-color-primary); }
.enso-notification__message {
  flex: 1;
  font-size: var(--enso-font-size-sm);
  line-height: 1.5;
}
.enso-notification__close {
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  padding: 0;
  background: none;
  border: 0;
  border-radius: var(--enso-border-radius-sm);
  color: var(--enso-text-secondary);
  cursor: pointer;
}
.enso-notification__close:hover { background-color: var(--enso-bg-secondary); color: var(--enso-text-primary); }
.enso-notification__close:focus-visible { outline: 2px solid var(--enso-color-primary); outline-offset: 2px; }
@media (max-width: 767.98px) {
  .enso-notifications {
    top: var(--enso-spacing-md);
    inset-inline: var(--enso-spacing-md);
    width: auto;
    max-width: none;
  }
}

/* ==== Config wiring: GDPR cookie-consent banner ============================= */
.enso-cookie-consent {
  position: fixed;
  z-index: var(--enso-z-tooltip);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--enso-spacing-md);
  max-width: 480px;
  padding: var(--enso-spacing-md) var(--enso-spacing-lg);
  background: var(--enso-bg-primary);
  color: var(--enso-text-primary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-card-radius);
  box-shadow: var(--enso-shadow-lg);
}
.enso-cookie-consent[hidden] { display: none; }
.enso-cookie-consent__message {
  margin: 0;
  flex: 1 1 220px;
  font-size: var(--enso-font-size-sm);
  line-height: var(--enso-line-height-base);
}
.enso-cookie-consent__actions {
  display: flex;
  gap: var(--enso-spacing-sm);
  flex-shrink: 0;
}
.enso-cookie-consent--bottom { left: 50%; bottom: var(--enso-spacing-lg); transform: translateX(-50%); }
.enso-cookie-consent--bottom-left { left: var(--enso-spacing-lg); bottom: var(--enso-spacing-lg); }
.enso-cookie-consent--bottom-right { right: var(--enso-spacing-lg); bottom: var(--enso-spacing-lg); }
.enso-cookie-consent--top { left: 50%; top: var(--enso-spacing-lg); transform: translateX(-50%); }
@media (max-width: 767.98px) {
  .enso-cookie-consent { left: var(--enso-spacing-md); right: var(--enso-spacing-md); max-width: none; transform: none; }
  .enso-cookie-consent--bottom,
  .enso-cookie-consent--bottom-left,
  .enso-cookie-consent--bottom-right { bottom: var(--enso-spacing-md); top: auto; }
  .enso-cookie-consent--top { top: var(--enso-spacing-md); bottom: auto; }
}

/* ============================================================
   v1.3.1 — visual-QA cosmetic fixes (live audit 2026-06-06)
   ============================================================ */
/* Native {{breadcrumbs}} (article/community): Zendesk emits
   <ol class="breadcrumbs"><li><a>… with NO separators. Scope strictly
   to .breadcrumbs so the custom enso breadcrumb (which already has SVG
   separators) is untouched. */
.enso-breadcrumbs .breadcrumbs{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0}
.enso-breadcrumbs .breadcrumbs li{display:flex;align-items:center;min-width:0}
.enso-breadcrumbs .breadcrumbs li + li::before{content:"/";color:var(--enso-text-muted);padding:0 var(--enso-spacing-sm)}[dir=rtl] .enso-breadcrumbs .breadcrumbs li + li::before{content:"\\"}
.enso-breadcrumbs .breadcrumbs a{color:var(--enso-text-secondary);text-decoration:none}
.enso-breadcrumbs .breadcrumbs a:hover{color:var(--enso-link-color);text-decoration:underline}
.enso-breadcrumbs .breadcrumbs li:last-child a{color:var(--enso-text-primary)}
/* Article share row: native {{share}} renders <ul class="share"> with
   default disc bullets stacked vertically. Lay out inline + give the
   social links and the copy button matching icon-button styling. */
.enso-article__sharing{display:flex;align-items:center;flex-wrap:wrap;gap:var(--enso-spacing-sm)}
.enso-article__sharing-label{color:var(--enso-text-secondary);font-size:var(--enso-font-size-sm)}
.enso-article__sharing-buttons{display:flex;align-items:center;gap:var(--enso-spacing-xs)}
.enso-article__sharing-buttons .share{display:flex;align-items:center;gap:var(--enso-spacing-xs);list-style:none;margin:0;padding:0}
.enso-article__sharing-buttons .share li{display:flex}
.enso-article__sharing-buttons .share a,.enso-article__share-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border-radius:var(--enso-border-radius);color:var(--enso-text-secondary);background:var(--enso-bg-secondary);border:1px solid var(--enso-border-color);cursor:pointer;transition:color .15s,background .15s,border-color .15s}
.enso-article__sharing-buttons .share a:hover,.enso-article__share-btn:hover{color:var(--enso-link-color);background:var(--enso-bg-tertiary);border-color:var(--enso-link-color)}
.enso-article__sharing-buttons .share svg,.enso-article__share-btn svg{width:18px;height:18px}
/* User-profile grid is a direct child of .enso-main (no .enso-container
   wrapper) so it ran full-bleed + the sidebar sat flush to the viewport
   edge. Constrain it like a container. */
.enso-user-profile{max-width:var(--enso-container-width);margin-left:auto;margin-right:auto;padding-left:var(--enso-spacing-lg);padding-right:var(--enso-spacing-lg)}


/* ============================================================
   v1.3.2 — component polish (Gemini design review, live-verified)
   ============================================================ */
/* Hero/page search: native {{search}} emits a <form class="enso-search">
   with input[type=search]#query + input[type=submit] — NOT the
   .enso-search__input class the theme had authored CSS for. Style the
   real elements. */
.enso-search{display:flex;gap:var(--enso-spacing-sm);align-items:stretch}
.enso-search--hero,.enso-search--standalone{max-width:560px;margin-left:auto;margin-right:auto;margin-top:var(--enso-spacing-lg);width:100%}
.enso-search input[type=search]{flex:1 1 auto;min-width:0;padding:var(--enso-spacing-sm) var(--enso-spacing-md);font-size:var(--enso-font-size-base);line-height:1.4;color:var(--enso-text-primary);background:var(--enso-bg-primary);border:1px solid var(--enso-border-color);border-radius:var(--enso-border-radius);box-shadow:var(--enso-shadow-sm)}
.enso-search input[type=search]:focus{outline:none;border-color:var(--enso-color-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--enso-color-primary) 20%,transparent)}
.enso-search input[type=submit]{flex:0 0 auto;padding:var(--enso-spacing-sm) var(--enso-spacing-lg);font-size:var(--enso-font-size-base);font-weight:600;color:var(--enso-text-inverse);background:var(--enso-color-primary);border:1px solid var(--enso-color-primary);border-radius:var(--enso-border-radius);cursor:pointer;transition:background .15s,border-color .15s}
.enso-search input[type=submit]:hover{background:var(--enso-color-secondary);border-color:var(--enso-color-secondary)}
/* On the coloured hero a primary-indigo button would blend into the
   indigo hero bg -> use a white button there. */
.enso-search--hero input[type=submit]{background:#fff;color:var(--enso-color-primary-on-light);border-color:#fff}
/* The button stays a light surface in BOTH modes (dark bg-secondary made the label
   1.9:1 on hover in dark mode), so the hover is a light tint of the same hue. */
.enso-search--hero input[type=submit]:hover{background:color-mix(in srgb,var(--enso-color-primary-on-light) 10%,#fff);border-color:color-mix(in srgb,var(--enso-color-primary-on-light) 10%,#fff);color:var(--enso-color-primary-on-light)}
/* Sticky footer: body was display:block so on short pages the footer
   floated mid-viewport with a white void below. */
body{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}
body>main,.enso-main{flex:1 0 auto}
.enso-footer{flex-shrink:0}
/* Comment / request textareas rendered as tiny 2-row browser-default
   boxes. */
.enso-main textarea{width:100%;min-height:120px;padding:var(--enso-spacing-md);font-family:inherit;font-size:var(--enso-font-size-base);line-height:1.5;color:var(--enso-text-primary);background:var(--enso-bg-primary);border:1px solid var(--enso-border-color);border-radius:var(--enso-border-radius);resize:vertical}
.enso-main textarea:focus{outline:none;border-color:var(--enso-color-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--enso-color-primary) 20%,transparent)}
/* Responsive heading scale: page titles are sized for desktop and were
   oversized on phones. */
@media (max-width:767.98px){
  .enso-hero__title{font-size:var(--enso-font-size-3xl)}
  .enso-article__title,.enso-category-header__title,.enso-section-header__title,.enso-search-header__title,.enso-page-header__title,.enso-community-topic-header__title{font-size:var(--enso-font-size-2xl)}
}


/* ============================================================
   v1.3.4 — footer dropdown void, empty AI-answer bar, mobile header
   ============================================================ */
/* Footer language dropdown sits at the page bottom; opening DOWNWARD
   (top:100%) made its hidden absolutely-positioned menu extend the
   document ~95px → white void beneath the footer. Open it upward. */
.enso-footer__language .enso-dropdown__menu{top:auto;bottom:calc(100% + var(--enso-spacing-xs));margin-top:0}
/* (v1.4: the {{generative_answers}} :empty / :not(:has(...)) hide rule that
   lived here was REMOVED. The Quick answer renders inside a closed shadow
   root, so :has() never matched and it hid every real answer. Never add a
   display:none rule for .enso-generative-answers.) */
/* Mobile header was crowded and the brand name wrapped to two lines next
   to the logo; the logo already identifies the brand. */
@media (max-width:767.98px){.enso-header__brand-name{display:none}}


/* ============================================================
   v1.4 — search results, Quick answers, palette, CTA image
   ============================================================ */
/* Result card: the title link is the only link; its ::after stretches the
   hit area over the card so the whole card stays clickable. The link keeps
   its own :focus-visible outline; the card also shows a ring. */
.enso-search-result { position: relative; }
.enso-search-result__link::after { content: ""; position: absolute; inset: 0; }
.enso-search-result:has(.enso-search-result__link:focus-visible) { outline: 2px solid var(--enso-color-primary); outline-offset: 2px; }
.enso-search-result__external-icon { display: inline-block; margin-inline-start: var(--enso-spacing-xs); vertical-align: baseline; }
/* Active content-tag filter chip (the link removes the tag). */
.enso-search-filter__tag { display: inline-flex; align-items: center; gap: var(--enso-spacing-xs); min-height: 24px; padding: var(--enso-spacing-xs) var(--enso-spacing-sm); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-border-radius-full); color: var(--enso-text-primary); font-size: var(--enso-font-size-sm); text-decoration: none; }
.enso-search-filter__tag:hover { border-color: var(--enso-color-primary); }
/* Command palette: "See all results" option, and the no-results message
   shown above it (the dialog is a flex column). */
.enso-cmdk__list { order: 1; }
.enso-cmdk__option--all { margin-top: var(--enso-spacing-xs); border-top: var(--enso-border-width) solid var(--enso-border-color); }
/* CTA "image" style (cta_style=image): cta_image as the background under a
   dark overlay; cta_image_dark swaps in via .enso-dark-only. With no image
   uploaded it falls back to the solid surface. */
.enso-cta--image { position: relative; background-color: var(--enso-bg-secondary); background-position: center; background-size: cover; }
.enso-cta__bg-dark,.enso-cta__overlay { position: absolute; inset: 0; }
.enso-cta__bg-dark { background-position: center; background-size: cover; }
.enso-cta__overlay { background-color: rgb(0 0 0 / 55%); }
.enso-cta--has-image .enso-container { position: relative; z-index: 1; }
.enso-cta--has-image .enso-cta__title,.enso-cta--has-image .enso-cta__description { color: #fff; }
/* Backgrounded CTA bands keep their top padding: the generic
   .enso-section + .enso-section{padding-top:0} otherwise glued the title to
   the band's top edge (solid, gradient and image styles). */
.enso-section.enso-cta--solid,.enso-section.enso-cta--gradient,.enso-section.enso-cta--image { padding-top: var(--enso-spacing-3xl); }
@media (max-width: 767.98px) { .enso-section.enso-cta--solid,.enso-section.enso-cta--gradient,.enso-section.enso-cta--image { padding-top: var(--enso-spacing-2xl); } }


/* ============================================================
   v1.3.6 — hide empty CTA banner
   ============================================================ */
/* The CTA section renders whenever cta_enable is on, but title/text/button
   are each optional -> an enabled-but-unfilled CTA showed as an empty
   gradient strip above the footer. Hide it when it has no real content
   (reveals automatically once a title, description, or button is set). */
.enso-cta:not(:has(.enso-cta__title)):not(:has(.enso-cta__description)):not(:has(.enso-cta__buttons a)){display:none}


/* ============================================================
   v1.3.8 — responsive requests table
   ============================================================ */
/* The 5-column requests table squeezed into a phone width: Subject wrapped
   heavily and the Status column got cut off. Hide the secondary columns on
   mobile and keep the two that matter (Subject + Status). */
@media (max-width:767.98px){
  .enso-requests-table__th--id,.enso-requests-table__td--id,
  .enso-requests-table__th--created,.enso-requests-table__td--created,
  .enso-requests-table__th--updated,.enso-requests-table__td--updated{display:none}
  .enso-requests-table__th--subject,.enso-requests-table__td--subject{width:auto}
}

/* ============================================================================
   Native Zendesk module forms — dark-mode harmonisation
   The new-request / service-catalog / approval bundles render Garden widgets
   themed from server-rendered (light) colours and cannot follow Enso's runtime
   [data-theme=dark] toggle. Re-skin their field surfaces to Enso dark tokens
   whenever dark mode is active. Targets stable data-garden-id hooks (the hashed
   styled-component sc-* classes are NOT stable) plus generic field elements,
   scoped tightly to the native containers so nothing else is affected. The
   combobox listbox popovers portal inside these containers, so they're covered.
   ============================================================================ */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request){color:var(--enso-text-primary)}
/* Field surfaces: inputs, textareas, rich-text editor, combobox trigger + listbox, selects, faux/file inputs */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(input,textarea,select,[contenteditable="true"],[role="textbox"],[data-garden-id="forms.input"],[data-garden-id="forms.textarea"],[data-garden-id="forms.faux_input"],[data-garden-id="forms.media_input"],[data-garden-id="dropdowns.combobox.trigger"],[data-garden-id="dropdowns.combobox.listbox"],[data-garden-id="dropdowns.select"],[data-garden-id="dropdowns.menu"]){background-color:var(--enso-bg-secondary)!important;color:var(--enso-text-primary)!important;border-color:var(--enso-border-color)!important}
/* Muted text: combobox placeholder value, field hints, helper paragraphs, option meta.
   The live Garden ids are forms.input_hint / checkbox_hint / radio_hint / toggle_hint and
   dropdowns.combobox.hint (forms.hint and forms.message match nothing in the shipped
   bundles), so dark-mode hints stayed Garden grey #5C6970 at 3.24:1. */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is([data-garden-id="dropdowns.combobox.value"],[data-garden-id="typography.paragraph"],[data-garden-id="forms.message"],[data-garden-id="forms.hint"],[data-garden-id="forms.input_hint"],[data-garden-id="forms.checkbox_hint"],[data-garden-id="forms.radio_hint"],[data-garden-id="forms.toggle_hint"],[data-garden-id="dropdowns.combobox.hint"],[data-garden-id="dropdowns.combobox.option.meta"],[data-garden-id="dropdowns.menu.item.meta"]){color:var(--enso-text-secondary)!important}
/* Icons (chevrons etc.) */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is([data-garden-id="dropdowns.combobox.input_icon"] svg,[data-garden-id*="icon"] svg){color:var(--enso-text-secondary)!important}
/* Listbox/menu option rows + hover/selected (combobox options are role=option; menu items are dropdowns.menu.item) */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is([role="option"],[data-garden-id="dropdowns.item"],[data-garden-id="dropdowns.menu.item"]){background-color:var(--enso-bg-secondary)!important;color:var(--enso-text-primary)!important}
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is([role="option"]:hover,[role="option"][aria-selected="true"],[data-garden-id="dropdowns.item"]:hover,[data-garden-id="dropdowns.menu.item"]:hover,[data-garden-id="dropdowns.menu.item"][aria-checked="true"]){background-color:var(--enso-bg-tertiary)!important}
/* Labels stay primary text */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(label,[data-garden-id*="label"]){color:var(--enso-text-primary)!important}
/* Input placeholders */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(input,textarea)::placeholder{color:var(--enso-text-muted)!important}
/* Attached-file rows (Garden forms.file): no background, and Garden colours the
   filename with the light-mode text_color (foreground.default), so it sat on the
   dark page at ~1:1. The file-type icon and the remove button use Garden's light
   subtle grey. */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) [data-garden-id="forms.file"]{color:var(--enso-text-primary)!important;border-color:var(--enso-border-color)!important}
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is([data-garden-id="forms.file.icon"],[data-garden-id="forms.file.close"]){color:var(--enso-text-secondary)!important}
/* CKEditor 5 rich-text editor (Description field), both modes. The Garden fields
   paint background_color, which the mounts map to color_bg_secondary; CKEditor is
   not a Garden widget and keeps its own white --ck-color-base-background, so on
   any brand whose bg_secondary is not white the Description editor stood out from
   the fields around it. Its toolbar/panel/list/input colours are declared on :root
   as var(--ck-color-base-background), so they resolve to white there and must be
   set here too. The token follows the mode; the dark rules below override (higher
   specificity, !important). */
:is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) .ck{--ck-color-base-background:var(--enso-bg-secondary);--ck-color-toolbar-background:var(--enso-bg-secondary);--ck-color-panel-background:var(--enso-bg-secondary);--ck-color-dropdown-panel-background:var(--enso-bg-secondary);--ck-color-list-background:var(--enso-bg-secondary);--ck-color-input-background:var(--enso-bg-secondary)}
:is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(.ck-content,.ck-editor__editable){background:var(--enso-bg-secondary)}
/* CKEditor 5 rich-text editor (Description field) — dark theme via its CSS variables
   (official theming hook) + direct fallbacks for toolbar/panels/buttons. */
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) .ck{--ck-color-base-background:var(--enso-bg-secondary);--ck-color-base-foreground:var(--enso-bg-tertiary);--ck-color-base-border:var(--enso-border-color);--ck-color-text:var(--enso-text-primary);--ck-color-shadow-drop:rgba(0,0,0,.4);--ck-color-toolbar-background:var(--enso-bg-tertiary);--ck-color-toolbar-border:var(--enso-border-color);--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:var(--enso-bg-secondary);--ck-color-button-default-active-background:var(--enso-bg-primary);--ck-color-button-on-background:var(--enso-bg-secondary);--ck-color-button-on-hover-background:var(--enso-bg-primary);--ck-color-button-on-color:var(--enso-text-primary);--ck-color-panel-background:var(--enso-bg-secondary);--ck-color-panel-border:var(--enso-border-color);--ck-color-dropdown-panel-background:var(--enso-bg-secondary);--ck-color-dropdown-panel-border:var(--enso-border-color);--ck-color-list-background:var(--enso-bg-secondary);--ck-color-list-button-hover-background:var(--enso-bg-tertiary);--ck-color-list-button-on-background:var(--enso-bg-tertiary);--ck-color-input-background:var(--enso-bg-secondary);--ck-color-input-text:var(--enso-text-primary);--ck-color-input-border:var(--enso-border-color)}
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(.ck-toolbar,.ck.ck-toolbar,.ck-editor__top){background:var(--enso-bg-tertiary)!important;border-color:var(--enso-border-color)!important;color:var(--enso-text-primary)!important}
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(.ck-content,.ck-editor__editable){background:var(--enso-bg-secondary)!important;color:var(--enso-text-primary)!important}
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(.ck-button,.ck-button__label,.ck-toolbar__items,.ck-dropdown__button){color:var(--enso-text-primary)!important}
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(.ck-dropdown__panel,.ck-list,.ck-balloon-panel){background:var(--enso-bg-secondary)!important;border-color:var(--enso-border-color)!important}
/* Service-catalog + approval card text: the bundles colour titles/descriptions with
   the (light-mode) text_color we pass, which is invisible on the dark page. Force
   readable text in dark mode. Links keep link colour; Garden tags/badges (own colour)
   and brand buttons are excluded. (The new-request form is already handled above.) */
[data-theme=dark] :is(#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) :is(h1,h2,h3,h4,h5,h6,p,span,div,li,strong,b,small,td,th):not([data-garden-id*="tag"]):not([data-garden-id*="badge"]){color:var(--enso-text-primary)!important}
[data-theme=dark] :is(#service-catalog,#service-catalog-item,#approval-request-list,#approval-request) a:not([class*="utton"]):not([data-garden-id*="button"]){color:var(--enso-link-color)!important}

/* Copenhagen v4.51.4 service catalog layout. renderServiceCatalogPage renders an
   optional <aside class="service-catalog-sidebar"> (category tree, fixed 250px
   inner width) next to <main class="service-catalog-list"> inside the #service-catalog
   mount, which carries upstream's .service-catalog-main-content flex hook. Phones
   stack the sidebar above the list at full width, and the card grid's Garden row
   (-10px gutter margins) is held to the 8px phone container padding so it no
   longer causes a 2px horizontal page scroll. */
.service-catalog-main-content { display: flex; align-items: flex-start; gap: var(--enso-spacing-2xl); }
.service-catalog-main-content > .service-catalog-sidebar { flex: 0 0 auto; }
.service-catalog-main-content > .service-catalog-list { flex: 1 1 auto; min-width: 0; width: 100%; }
@media (max-width: 767.98px) {
  .service-catalog-main-content { flex-direction: column; align-items: stretch; gap: var(--enso-spacing-lg); }
  .service-catalog-main-content > .service-catalog-sidebar,
  .service-catalog-main-content > .service-catalog-sidebar > div { width: 100%; }
  #service-catalog [data-garden-id="grid.row"] { margin-inline: calc(var(--enso-spacing-md) * -1); }
}
/* Service item page: breadcrumbs row with the "Change category" menu the item
   module portals into #category-selector (empty when the item has < 2 categories). */
.enso-service-page__nav { display: flex; flex-wrap: wrap; align-items: center; column-gap: var(--enso-spacing-lg); }
.enso-service-page__nav > .enso-breadcrumbs { min-width: 0; }
#category-selector { margin-inline-start: auto; }
#category-selector:empty { display: none; }
/* Dark mode for the new module DOM. The category sidebar's expand chevrons are
   plain buttons coloured Garden grey-600, and the basic menu-trigger buttons
   (service list "A-Z" sort, item "Change category") use the light-mode brand
   colour; both are low contrast on the dark page. The "Change category" menu sits
   outside #service-catalog-item, so the harmonisation rules above miss it. */
[data-theme=dark] #service-catalog .service-catalog-sidebar button { color: var(--enso-text-secondary); }
[data-theme=dark] #service-catalog .service-catalog-sidebar button:hover { color: var(--enso-text-primary); }
[data-theme=dark] :is(#new-request-form,#service-catalog,#service-catalog-item,#approval-request-list,#approval-request,#category-selector) [data-garden-container-id="containers.menu.trigger"] { color: var(--enso-link-color); }
[data-theme=dark] #category-selector [data-garden-id="dropdowns.menu"] { background-color: var(--enso-bg-secondary); border-color: var(--enso-border-color); color: var(--enso-text-primary); }
[data-theme=dark] #category-selector :is([data-garden-id="dropdowns.menu.item"],[data-garden-id="dropdowns.menu.item.content"]) { color: var(--enso-text-primary); }
[data-theme=dark] #category-selector [data-garden-id="dropdowns.menu.item.meta"] { color: var(--enso-text-secondary); }
/* Service item submit panel (ItemRequestForm ButtonWrapper: "Requester", the
   user's name, the on-behalf "Change" link and the submit button, or its loading
   skeleton). At <=768px Garden makes it sticky with background.default, which is
   the light colour_bg_primary we pass, so the forced dark-mode text above would be
   invisible on it. Give it the dark page surface. Transparent on desktop anyway. */
[data-theme=dark] #service-catalog-item form div:has(> :is(button[type="submit"],[data-garden-id="loaders.skeleton"])) { background-color: var(--enso-bg-primary) !important; border-color: var(--enso-border-color) !important; }
/* Answer Bot modals (classic + generative) render inside #new-request-form via the
   module's modal container on Garden's light modal surfaces (white body, #f4f6f8
   answer/sources panel). The dark-mode muted-paragraph and label rules above would
   make their text low contrast there, so let it inherit the modal's own foreground. */
[data-theme=dark] #new-request-form [data-garden-id="modals.modal"] :is([data-garden-id="typography.paragraph"],label,[data-garden-id*="label"]) { color: inherit !important; }
/* Draft service item preview: <html> gets is-service-catalog-preview (inline script
   in service_page.hbs, or the bundle on a draft item). Hide the Zendesk product
   chrome under the bundle's fixed preview banner, as upstream Copenhagen does. */
.is-service-catalog-preview :is(#navbar-container,.navbar-container,.assembly-bar,[data-garden-id="chrome.subnav"]) { display: none !important; }

/* ============================================================
   v1.4.8 — Recently-viewed articles + variant re-skins
   ============================================================ */

/* Recently viewed — sidebar card (modelled on .enso-section-nav) */
.enso-recently-viewed { margin-top: var(--enso-spacing-2xl); padding: var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); }
.enso-recently-viewed__title { font-size: var(--enso-font-size-sm); text-transform: uppercase; letter-spacing: .05em; color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-sm); }
.enso-recently-viewed__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-recently-viewed__link { display: block; padding: var(--enso-spacing-xs) var(--enso-spacing-sm); border-radius: var(--enso-border-radius-sm); color: var(--enso-text-secondary); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-recently-viewed__link:hover { background-color: var(--enso-bg-primary); color: var(--enso-link-color); }

/* Recently viewed — home section variant (full-width card grid, not a sidebar card) */
.enso-recently-viewed--home { margin-top: 0; padding: 0; border: 0; background: transparent; }
.enso-recently-viewed--home .enso-recently-viewed__title { font-size: var(--enso-font-size-2xl); text-transform: none; letter-spacing: normal; color: var(--enso-text-primary); margin-bottom: var(--enso-spacing-lg); }
.enso-recently-viewed--home .enso-recently-viewed__list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr)); gap: var(--enso-spacing-md); }
.enso-recently-viewed--home .enso-recently-viewed__link { padding: var(--enso-spacing-md); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); color: var(--enso-text-primary); }
.enso-recently-viewed--home .enso-recently-viewed__link:hover { border-color: var(--enso-color-primary); color: var(--enso-link-color); }

/* Hero — minimal (compact, surface background) */
.enso-hero--minimal { min-height: auto; padding: var(--enso-spacing-2xl) 0; background-color: var(--enso-bg-secondary); color: var(--enso-text-primary); }
.enso-hero--minimal .enso-hero__title { font-size: var(--enso-font-size-2xl); }
.enso-hero--minimal .enso-hero__subtitle { font-size: var(--enso-font-size-lg); opacity: .85; }

/* Hero — stacked card (content elevated on a surface card) */
.enso-hero--stacked-card { background-color: var(--enso-bg-tertiary); }
.enso-hero--stacked-card .enso-hero__content { color: var(--enso-text-primary); background-color: var(--enso-bg-primary); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); box-shadow: var(--enso-shadow-md); padding: var(--enso-spacing-2xl); }

/* Helper blocks — icon grid (centered, prominent icons) */
.enso-helper-blocks--icon-grid .enso-helper-block { text-align: center; display: flex; flex-direction: column; align-items: center; }
.enso-helper-blocks--icon-grid .enso-helper-block__icon { margin-bottom: var(--enso-spacing-sm); }
.enso-helper-blocks--icon-grid .enso-helper-block__icon img { width: 56px; height: 56px; }

/* CTA — centered (single-column, centered content) */
.enso-cta--centered .enso-container { display: block; text-align: center; }
.enso-cta--centered .enso-cta__content { text-align: center; }
.enso-cta--centered .enso-cta__buttons { justify-content: center; }

/* Footer — columns (grid layout, vertical nav) */
.enso-footer--columns .enso-footer__inner { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: var(--enso-spacing-2xl); align-items: start; }
.enso-footer--columns .enso-footer__nav { flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-footer--columns .enso-footer__nav-list { display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
@media (max-width: 767.98px) { .enso-footer--columns .enso-footer__inner { grid-template-columns: 1fr; gap: var(--enso-spacing-lg); } }

/* Promoted — list (numbered rows) */
.enso-promoted__list { list-style: none; counter-reset: enso-promoted; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-sm); }
.enso-promoted__list-item { counter-increment: enso-promoted; }
.enso-promoted__list-link { display: flex; align-items: center; gap: var(--enso-spacing-md); padding: var(--enso-spacing-md) var(--enso-spacing-lg); border: var(--enso-border-width) solid var(--enso-border-color); border-radius: var(--enso-card-radius); background-color: var(--enso-bg-secondary); color: var(--enso-text-primary); text-decoration: none; }
.enso-promoted__list-link:hover { border-color: var(--enso-color-primary); color: var(--enso-link-color); }
.enso-promoted__list-link::before { content: counter(enso-promoted); flex: 0 0 auto; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--enso-border-radius-full); background-color: var(--enso-color-primary); color: var(--enso-text-inverse); font-weight: var(--enso-font-weight-bold); font-size: var(--enso-font-size-sm); }
.enso-promoted__list-title { font-weight: var(--enso-font-weight-medium); }
/* Article "not helpful" follow-up panel — revealed by initArticleFeedback on a down-vote.
   [hidden]-guarded so the attribute wins until JS removes it; token-driven = dark-safe. */
.enso-article__feedback[hidden] { display: none; }
.enso-article__feedback {
  margin-top: var(--enso-spacing-lg);
  padding: var(--enso-spacing-lg);
  background-color: var(--enso-bg-secondary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-inline-start: 3px solid var(--enso-color-primary);
  border-radius: var(--enso-border-radius);
}
.enso-article__feedback:focus { outline: none; }
.enso-article__feedback:focus-visible {
  outline: 2px solid var(--enso-color-primary);
  outline-offset: 2px;
}
.enso-article__feedback-title {
  margin: 0 0 var(--enso-spacing-xs);
  font-size: var(--enso-font-size-lg);
  font-weight: var(--enso-font-weight-bold);
  color: var(--enso-text-primary);
}
.enso-article__feedback-text {
  margin: 0 0 var(--enso-spacing-md);
  color: var(--enso-text-secondary);
}
.enso-article__feedback-actions { display: flex; flex-wrap: wrap; gap: var(--enso-spacing-sm); }
/* ===== card_style variants (settings.card_style) ===============================
   Applied to <html> as data-enso-cards (set pre-paint in enso-darkmode.js).
   "shadowed" is the CSS default (border + --enso-card-shadow) — no rule needed.
   Card surface selector group is repeated per variant; border-color:transparent
   keeps the 1px border box so layout never shifts between styles. Search result
   cards joined the groups in v1.5.0: they stayed bg-primary under "flat", so on a
   tinted page they were page-coloured with a 1.69:1 border while every other card
   was the flat bg-secondary surface. */
[data-enso-cards="bordered"] .enso-category-card,
[data-enso-cards="bordered"] .enso-article-card,
[data-enso-cards="bordered"] .enso-helper-block,
[data-enso-cards="bordered"] .enso-category-expanded,
[data-enso-cards="bordered"] .enso-section-card,
[data-enso-cards="bordered"] .enso-subsection-card,
[data-enso-cards="bordered"] .enso-post-card,
[data-enso-cards="bordered"] .enso-community-post-card,
[data-enso-cards="bordered"] .enso-community-topic-card,
[data-enso-cards="bordered"] .enso-contribution-card,
[data-enso-cards="bordered"] .enso-subscription-card,
[data-enso-cards="bordered"] .enso-stat-card,
[data-enso-cards="bordered"] .enso-sidebar-card,
[data-enso-cards="bordered"] .enso-search-result {
  box-shadow: none;
}

[data-enso-cards="flat"] .enso-category-card,
[data-enso-cards="flat"] .enso-article-card,
[data-enso-cards="flat"] .enso-helper-block,
[data-enso-cards="flat"] .enso-category-expanded,
[data-enso-cards="flat"] .enso-section-card,
[data-enso-cards="flat"] .enso-subsection-card,
[data-enso-cards="flat"] .enso-post-card,
[data-enso-cards="flat"] .enso-community-post-card,
[data-enso-cards="flat"] .enso-community-topic-card,
[data-enso-cards="flat"] .enso-contribution-card,
[data-enso-cards="flat"] .enso-subscription-card,
[data-enso-cards="flat"] .enso-stat-card,
[data-enso-cards="flat"] .enso-sidebar-card,
[data-enso-cards="flat"] .enso-search-result {
  border-color: transparent;
  box-shadow: none;
  background-color: var(--enso-bg-secondary);
}

[data-enso-cards="elevated"] .enso-category-card,
[data-enso-cards="elevated"] .enso-article-card,
[data-enso-cards="elevated"] .enso-helper-block,
[data-enso-cards="elevated"] .enso-category-expanded,
[data-enso-cards="elevated"] .enso-section-card,
[data-enso-cards="elevated"] .enso-subsection-card,
[data-enso-cards="elevated"] .enso-post-card,
[data-enso-cards="elevated"] .enso-community-post-card,
[data-enso-cards="elevated"] .enso-community-topic-card,
[data-enso-cards="elevated"] .enso-contribution-card,
[data-enso-cards="elevated"] .enso-subscription-card,
[data-enso-cards="elevated"] .enso-stat-card,
[data-enso-cards="elevated"] .enso-sidebar-card,
[data-enso-cards="elevated"] .enso-search-result {
  border-color: transparent;
  box-shadow: var(--enso-shadow-lg);
}
/* The groups above have the same specificity as .enso-search-result:hover and
   come later, so they also flattened the result card's only hover cue (the whole
   card is one stretched link). Restore it per style: the card shadow on bordered
   and flat, a deeper layered shadow on elevated (already shadow-lg at rest). */
[data-enso-cards="bordered"] .enso-search-result:hover,
[data-enso-cards="flat"] .enso-search-result:hover { box-shadow: var(--enso-card-shadow); }
[data-enso-cards="elevated"] .enso-search-result:hover { box-shadow: var(--enso-shadow-lg), var(--enso-shadow-md); }
/* ===== Command palette (Cmd/Ctrl+K) — settings.command_palette_enable ==========
   Server-rendered shell in footer.hbs, [hidden] until JS opens it. Token-driven
   so dark mode is free. */
.enso-cmdk[hidden] { display: none; }
.enso-cmdk {
  position: fixed;
  inset: 0;
  z-index: var(--enso-z-modal);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 10vh var(--enso-spacing-lg) var(--enso-spacing-lg);
}
.enso-cmdk__overlay {
  position: fixed;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.5);
}
.enso-cmdk__dialog {
  position: relative;
  display: flex;
  flex-direction: column;
  width: min(640px, 100%);
  max-height: 70vh;
  background-color: var(--enso-bg-primary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-border-radius);
  box-shadow: var(--enso-shadow-lg);
  overflow: hidden;
}
.enso-cmdk__search {
  display: flex;
  align-items: center;
  gap: var(--enso-spacing-sm);
  padding: var(--enso-spacing-md) var(--enso-spacing-lg);
  border-bottom: var(--enso-border-width) solid var(--enso-border-color);
}
.enso-cmdk__icon { flex: 0 0 auto; color: var(--enso-text-muted); }
.enso-cmdk__input {
  flex: 1 1 auto;
  min-width: 0;
  border: 0;
  background: transparent;
  color: var(--enso-text-primary);
  font-family: inherit;
  font-size: var(--enso-font-size-lg);
  line-height: 1.4;
  outline: none;
}
.enso-cmdk__input::placeholder { color: var(--enso-text-muted); }
.enso-cmdk__kbd {
  flex: 0 0 auto;
  padding: 2px 6px;
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-border-radius-sm);
  color: var(--enso-text-muted);
  font-family: var(--enso-font-mono);
  font-size: var(--enso-font-size-sm);
}
.enso-cmdk__list {
  flex: 1 1 auto;
  list-style: none;
  margin: 0;
  padding: var(--enso-spacing-sm);
  overflow-y: auto;
}
.enso-cmdk__option { border-radius: var(--enso-border-radius-sm); cursor: pointer; }
.enso-cmdk__option[aria-selected="true"] { background-color: var(--enso-bg-secondary); }
.enso-cmdk__option-link {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--enso-spacing-sm) var(--enso-spacing-md);
  text-decoration: none;
  color: inherit;
}
.enso-cmdk__option-title {
  color: var(--enso-text-primary);
  font-weight: var(--enso-font-weight-medium);
}
.enso-cmdk__option-snippet {
  color: var(--enso-text-secondary);
  font-size: var(--enso-font-size-sm);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.enso-cmdk__empty {
  margin: 0;
  padding: var(--enso-spacing-xl);
  color: var(--enso-text-secondary);
  text-align: center;
}
/* a11y (dark mode): the hero search submit is a white button in both modes. Its
   label uses --enso-color-primary-on-light (the LIGHT-mode primary, never dark-
   swapped; see :root), so a near-white color_primary_dark can no longer turn it
   into grey-on-white. The old color-mix(primary 55%, #000) override was removed. */

/* Hero variant coverage (review remediation) — every hero_style/size/type option resolves to a rule */
.enso-hero--gradient{background-image:linear-gradient(135deg,var(--enso-color-primary),var(--enso-color-secondary))}
.enso-hero--solid{background-color:var(--enso-hero-bg)}
.enso-hero--image{background-size:cover;background-position:center}
.enso-hero--compact{min-height:320px}
.enso-hero--standard{min-height:var(--enso-hero-height)}
.enso-hero--large{min-height:600px}
.enso-hero--centered{text-align:center}
.enso-hero--fullwidth .enso-container{max-width:none}
.enso-hero--asymmetric .enso-container{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--enso-spacing-2xl);align-items:center;text-align:start}

/* Dark-mode parity + motion/contrast (review remediation) */
[data-theme=dark]{--enso-shadow-sm:0 1px 2px rgba(0,0,0,.4);--enso-shadow-md:0 4px 8px rgba(0,0,0,.45);--enso-shadow-lg:0 10px 24px rgba(0,0,0,.5)}
[data-theme=dark] [data-enso-cards="elevated"] .enso-category-card,[data-theme=dark] [data-enso-cards="elevated"] .enso-article-card{border-color:var(--enso-border-color)}
[data-theme=dark] .enso-select,[data-theme=dark] .enso-form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23d1d5db' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}
@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.enso-category-card:hover,.enso-article-card:hover,.enso-helper-block:hover{transform:none}}

/* Mobile-nav in-panel close (review remediation, M25) */
.enso-header__mobile-nav-inner{position:relative}
.enso-header__mobile-nav-close{position:absolute;top:var(--enso-spacing-md);inset-inline-end:var(--enso-spacing-md);display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;background:transparent;color:var(--enso-header-text);cursor:pointer;border-radius:var(--enso-border-radius-sm)}
.enso-header__mobile-nav-close:hover{background-color:color-mix(in srgb,var(--enso-header-text) 10%,var(--enso-header-bg))}

/* Variant backlog remediation (review follow-up) */
.enso-article-layout--none{grid-template-columns:minmax(0,1fr)}
.enso-promoted--carousel .enso-promoted__carousel{position:relative}
.enso-promoted__carousel-track{display:flex;gap:var(--enso-spacing-lg);overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}
.enso-promoted__slide{flex:0 0 min(280px,80%);scroll-snap-align:start}
.enso-promoted__carousel-prev,.enso-promoted__carousel-next{position:absolute;top:50%;transform:translateY(-50%);z-index:2;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border:1px solid var(--enso-border-color);border-radius:var(--enso-border-radius-full);background:var(--enso-bg-primary);color:var(--enso-text-primary);cursor:pointer}
.enso-promoted__carousel-prev{left:calc(var(--enso-spacing-sm) * -1)}
.enso-promoted__carousel-next{right:calc(var(--enso-spacing-sm) * -1)}
.enso-promoted__carousel-prev[disabled],.enso-promoted__carousel-next[disabled]{opacity:.4;cursor:default}
/* variant-ok: enso-header--standard */
/* variant-ok: enso-helper-blocks--cards */
/* variant-ok: enso-categories--grid */
/* variant-ok: enso-promoted--grid */
/* variant-ok: enso-cta--banner */
/* variant-ok: enso-footer--standard */

/* Recent-activity native helper ({{recent_activity}}) — the theme's own .enso-activity-item__* BEM rules never matched (the helper emits .recent-activity-*), so the feed shipped unstyled. Style the real native markup (home + community). */
.recent-activity-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--enso-spacing-md)}
.recent-activity-item{padding:var(--enso-spacing-lg);background-color:var(--enso-bg-primary);border:var(--enso-border-width) solid var(--enso-border-color);border-radius:var(--enso-border-radius-lg);box-shadow:var(--enso-shadow-sm);transition:box-shadow .2s,transform .2s}
.recent-activity-item:hover{box-shadow:var(--enso-shadow-md);transform:translateY(-2px)}
.recent-activity-item h3{margin:0 0 var(--enso-spacing-xs);font-size:var(--enso-font-size-sm)}
.recent-activity-item-parent{font-size:var(--enso-font-size-sm);font-weight:var(--enso-font-weight-medium);color:var(--enso-color-primary);text-decoration:none;text-transform:uppercase;letter-spacing:.03em;display:inline-flex;align-items:center;min-height:24px}
.recent-activity-item-parent:hover{text-decoration:underline}
.recent-activity-item-link{display:block;font-size:var(--enso-font-size-lg);font-weight:var(--enso-font-weight-medium);color:var(--enso-text-primary);text-decoration:none;margin-bottom:var(--enso-spacing-sm)}
.recent-activity-item-link:hover{color:var(--enso-link-color)}
.recent-activity-item-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--enso-spacing-md);color:var(--enso-text-muted);font-size:var(--enso-font-size-sm)}
.recent-activity-item-comment{display:inline-flex;align-items:center;gap:var(--enso-spacing-xs)}
.recent-activity-no-activities{color:var(--enso-text-muted)}

/* Native pagination ({{pagination}}) — Zendesk emits <nav class="pagination"><ul
   class="pagination-list"><li class="pagination-{first,prev,page,next,last}"><a
   class="…-link">. Style GLOBALLY (the nav is NOT wrapped in .enso-pagination on
   every page — e.g. the requests list) and reset the <ul> (was showing raw bullets,
   same class as the recent-activity bug). */
.pagination{margin-top:var(--enso-spacing-xl)}
.pagination-list{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--enso-spacing-xs);list-style:none;margin:0;padding:0}
.pagination-list>li{margin:0}
.pagination-list a,.pagination-current-page{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:40px;min-height:40px;padding:0 var(--enso-spacing-sm);border:var(--enso-border-width) solid var(--enso-border-color);border-radius:var(--enso-border-radius-sm);font-size:var(--enso-font-size-sm);text-decoration:none}
/* Text controls ("« First", "‹ Previous", "Next ›", "Last »") get the 12px side
   padding of the other Enso buttons (4px left the label touching the border,
   v1.5.5 T6); numeric page items keep the 4px and the 40px minimum width. */
.pagination-list :is(.pagination-first,.pagination-prev,.pagination-next,.pagination-last)>a{padding:0 var(--enso-spacing-lg)}
.pagination-list a{color:var(--enso-link-color)}
.pagination-list a:hover{background-color:var(--enso-bg-secondary);border-color:var(--enso-color-primary)}
.pagination-current-page{background-color:var(--enso-color-primary);color:var(--enso-text-inverse);border-color:var(--enso-color-primary);font-weight:var(--enso-font-weight-medium)}
.pagination-prev.is-disabled,.pagination-next.is-disabled{opacity:.45;pointer-events:none}
/* Dropdown menus are <ul> — kill the default list bullets (showed when opened on every dropdown: user menu, language, sort/filter, item actions). */
.enso-dropdown__menu{list-style:none}
.enso-dropdown__menu>li{margin:0}

/* Homepage QA fixes (live review) */
.enso-hero--centered .enso-hero__content,.enso-hero--minimal .enso-hero__content,.enso-hero--fullwidth .enso-hero__content,.enso-hero--stacked-card .enso-hero__content{margin-left:auto;margin-right:auto}
.recent-activity-accessibility-label{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.recent-activity-comment-icon::after{content:attr(data-comment-count);margin-left:4px;color:var(--enso-text-muted)}
.enso-article__body a,.enso-comment__body a,.enso-community-comment__body a,.enso-community-post__body a,.enso-request__description a,.enso-request-comment__body a{text-decoration:underline}

/* ============================================================================
   v1.5.0 — CSS audit fixes (package D: css-header-footer)
   Token-driven; dark mode only via [data-theme=dark]. Every colour pair below
   was measured in light AND dark (manifest defaults + the live UKG tokens) and
   is >= 4.5:1 for text.
   ============================================================================ */

/* ---- Header offset (STICKY-1, VARIANT-1) ---------------------------------
   Anchor targets and keyboard focus scrolled into view must clear the sticky
   header (header_sticky defaults on). The centered header stacks the nav under
   the logo on desktop (~88px with a 40px logo), so it raises the offset; the
   sticky TOC uses the same token. */
:root { --enso-header-offset: var(--enso-header-height); }
@media (min-width: 992px) {
  html:has(.enso-header--centered) { --enso-header-offset: max(var(--enso-header-height), 88px); }
}
html:has(.enso-header--sticky) { scroll-padding-top: calc(var(--enso-header-offset) + var(--enso-spacing-md)); }

/* ---- Header / footer link colours follow the brand (BRAND-1) --------------
   The link tokens now derive from header_text_color / footer_link_color (line 1).
   Hover is a colour shift within the brand's own pair plus an underline, so no
   hard-coded indigo appears on non-indigo brands. :focus keeps the header colour
   (the global a:focus would repaint it primary, which can fail on dark headers),
   and focus rings use currentColor so they always contrast with the bar. */
.enso-header__nav-link:focus,
.enso-header__mobile-nav-link:focus { color: var(--enso-header-link-color); }
.enso-header__nav-link:hover,
.enso-header__mobile-nav-link:hover { color: var(--enso-header-link-hover); text-decoration: underline; text-underline-offset: .3em; }
.enso-header__nav-link:focus-visible,
.enso-header__mobile-nav-link:focus-visible,
.enso-header__ask-ai:focus-visible,
.enso-header__user-toggle:focus-visible,
.enso-header__logo-link:focus-visible,
.enso-header__mobile-nav-close:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
.enso-footer__nav-link:hover { text-decoration: underline; text-underline-offset: .3em; }
.enso-footer a:focus-visible,
.enso-footer__language-toggle:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
/* The footer logo carried height="32" but the global img{height:auto} ignored
   it, so the 220x64 placeholder rendered at 64px. */
.enso-footer__logo { max-height: 32px; width: auto; }

/* ---- Helper links that render nothing (V4-24) -----------------------------
   {{link 'applications'}}, {{link 'chat'}}, {{link 'approval_requests'}},
   {{contact_details}} and {{change_password}} output nothing when unavailable
   to the viewer; drop the empty <li> so lists don't announce blank items. */
:is(.enso-header__nav-list, .enso-header__mobile-nav-list, .enso-footer__nav-list, .enso-dropdown__menu) > li:not(:has(a, button)):not(.enso-dropdown__divider) { display: none; }

/* ---- Ask AI link (V4-24, Copenhagen v4.51.4 {{link 'chat'}}) ---------------
   Desktop: an outlined pill in the header's own colours. Mobile: a menu row. */
.enso-header__ask-ai { display: none; }
@media (min-width: 992px) {
  .enso-header__ask-ai {
    display: inline-flex; align-items: center; gap: var(--enso-spacing-xs);
    min-height: 32px; padding: var(--enso-spacing-xs) var(--enso-spacing-md);
    border: var(--enso-border-width) solid color-mix(in srgb, var(--enso-header-text) 50%, var(--enso-header-bg));
    border-radius: var(--enso-border-radius-full);
    color: var(--enso-header-text); font-size: var(--enso-font-size-sm); font-weight: var(--enso-font-weight-medium);
    line-height: 1.5; text-decoration: none; white-space: nowrap;
    transition: background-color var(--enso-transition-fast), border-color var(--enso-transition-fast);
  }
  .enso-header__ask-ai:hover,
  .enso-header__ask-ai:focus {
    color: var(--enso-header-text);
    background-color: color-mix(in srgb, var(--enso-header-text) 8%, var(--enso-header-bg));
    border-color: var(--enso-header-text);
  }
}
.enso-header__ask-ai-icon { flex: 0 0 auto; }
.enso-header__mobile-ask-ai { display: flex; align-items: center; gap: var(--enso-spacing-sm); }

/* ---- Header variants (VARIANT-1) ------------------------------------------
   centered: logo centred with the actions to its right, nav on its own row.
   minimal:  logo + actions only; the nav lives in the menu panel at all widths. */
@media (min-width: 992px) {
  .enso-header--centered .enso-header__inner {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    grid-template-areas: ". logo actions" "nav nav nav";
    align-items: center;
    row-gap: var(--enso-spacing-sm);
  }
  .enso-header--centered .enso-header__logo { grid-area: logo; justify-self: center; }
  .enso-header--centered .enso-header__actions { grid-area: actions; justify-self: end; }
  .enso-header--centered .enso-header__nav { grid-area: nav; justify-content: center; }
}
.enso-header--minimal .enso-header__nav { display: none; }
@media (min-width: 992px) {
  .enso-header--minimal .enso-header__menu-btn { display: flex; }
  .enso-header--minimal .enso-header__mobile-nav { display: block; }
  .enso-header--minimal .enso-header__mobile-nav-inner { max-width: var(--enso-container-width); margin-inline: auto; }
}

/* ---- Mobile menu panel (MOBNAV-1, NATIVE-1) --------------------------------
   Reserve room for the absolutely-positioned close button so the first row
   (profile or first link) never sits under it, in LTR or RTL. */
.enso-header__mobile-nav-close + * { padding-inline-end: calc(40px + var(--enso-spacing-sm)); }
/* The panel's side gutter (base rule under "Mobile navigation") widens from
   tablet up, matching the header's own container padding. */
@media (min-width: 768px) { .enso-header__mobile-nav-inner { padding-inline: var(--enso-spacing-lg); } }

/* {{contact_details}}, {{change_password}} and (profiles off) {{my_profile}}
   render a <button> carrying our class: strip the UA button chrome so it matches
   the link rows (the UA #efefef face made the label ~1.1:1 in dark mode). The
   existing :hover/:focus background rules still apply; the UA focus ring stays. */
button.enso-dropdown__item,
button.enso-header__mobile-nav-link,
button.enso-header__mobile-user-link {
  appearance: none;
  width: 100%;
  margin: 0;
  background: none;
  border: 0;
  border-radius: 0;
  text-align: start;
  cursor: pointer;
}

/* ---- Footer (TD-24, VARIANT-1) ---------------------------------------------
   No social URL set (the default): hide the nav, which also removes the empty
   "Social media links" landmark from the accessibility tree. */
.enso-footer__social:not(:has(a)) { display: none; }
/* minimal: compact single band, no description */
.enso-footer--minimal { padding: var(--enso-spacing-xl) 0; }
.enso-footer--minimal .enso-footer__inner { gap: var(--enso-spacing-lg); }
.enso-footer--minimal .enso-footer__description { display: none; }
.enso-footer--minimal .enso-footer__logo { max-height: 24px; }
.enso-footer--minimal .enso-footer__bottom { margin-top: var(--enso-spacing-lg); padding-top: var(--enso-spacing-md); }
/* expanded: brand block on its own row, roomier nav. It keeps the normal
   container width (container_width), so its edges line up with the header and
   the main content; the 1440px wide container overhung them by 80px a side on
   wide screens (v1.5.5, T3). */
.enso-footer--expanded { padding: var(--enso-spacing-3xl) 0 var(--enso-spacing-2xl); }
.enso-footer--expanded .enso-footer__inner { align-items: flex-start; row-gap: var(--enso-spacing-2xl); }
.enso-footer--expanded .enso-footer__brand { flex: 1 1 100%; }
.enso-footer--expanded .enso-footer__description { max-width: 60ch; }
.enso-footer--expanded .enso-footer__logo { max-height: 40px; }
.enso-footer--expanded .enso-footer__nav-list { gap: var(--enso-spacing-md) var(--enso-spacing-xl); font-size: var(--enso-font-size-lg); }

/* ---- Article / request layout (LAYOUT-1, LAYOUT-2) -------------------------
   The base grids now have a shrinkable minmax(0,1fr) track (edited in place).
   On phones, wide tables in user content scroll inside their own box instead
   of widening the page (WCAG 1.4.10). */
@media (max-width: 767.98px) {
  :is(.enso-article__body, .enso-request__description, .enso-request-comment__body, .enso-comment__body, .enso-community-post__body, .enso-community-comment__body) table {
    display: block;
    max-width: 100%;
    overflow-x: auto;
  }
}
/* sidebar position "left": the <aside> follows the <article> in the DOM, so
   auto-placement put the article in the narrow track. */
@media (min-width: 992px) {
  .enso-article-layout--left > .enso-article-sidebar { order: -1; }
}
/* sidebar_enable off: one full-width column whatever the position setting */
.enso-article-layout:not(:has(> .enso-article-sidebar)) { grid-template-columns: minmax(0, 1fr); }

/* ---- Related articles, native {{related_articles}} (NATIVE-3) ---------------
   Emits section.related-articles > h3.related-articles-title + ul > li > a.
   Match the sibling sidebar headings; hide the bordered wrapper when empty. */
.enso-related-articles:not(:has(li)) { display: none; }
.enso-related-articles .related-articles { margin: 0; }
.enso-related-articles .related-articles-title { font-family: var(--enso-font-primary); font-size: var(--enso-font-size-sm); font-weight: var(--enso-font-weight-bold); text-transform: uppercase; letter-spacing: .05em; line-height: var(--enso-line-height-base); color: var(--enso-text-secondary); margin: 0 0 var(--enso-spacing-sm); }
.enso-related-articles ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--enso-spacing-xs); }
.enso-related-articles li { margin: 0; }
.enso-related-articles li a { display: block; padding: var(--enso-spacing-xs) 0; color: var(--enso-link-color); font-size: var(--enso-font-size-sm); text-decoration: none; }
.enso-related-articles li a:hover { color: var(--enso-link-color); text-decoration: underline; }

/* ---- Follow button, native {{subscribe}} (NATIVE-2) --------------------------
   <button data-selected="false|true"> with no class: secondary-button look when
   not following, primary when following. Every state pins its own colour. */
.enso-main button[data-selected] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--enso-spacing-xs);
  min-height: 36px;
  padding: var(--enso-spacing-xs) var(--enso-spacing-lg);
  font-weight: var(--enso-font-weight-medium);
  line-height: 1.5;
  white-space: nowrap;
  color: var(--enso-text-primary);
  background-color: transparent;
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-button-radius);
  transition: background-color var(--enso-transition-fast), border-color var(--enso-transition-fast), color var(--enso-transition-fast);
}
.enso-main button[data-selected]:hover { color: var(--enso-text-primary); background-color: var(--enso-bg-secondary); border-color: var(--enso-text-secondary); }
.enso-main button[data-selected="true"] { color: var(--enso-text-inverse); background-color: var(--enso-color-primary); border-color: var(--enso-color-primary); }
.enso-main button[data-selected="true"]:hover { color: var(--enso-text-inverse); background-color: var(--enso-color-secondary); border-color: var(--enso-color-secondary); }
.enso-main button[data-selected]:focus-visible { outline: 2px solid var(--enso-color-primary); outline-offset: 2px; }

/* ---- Item actions, native {{actions}} ---------------------------------------
   Profile: {{actions class="enso-user-profile__actions-menu"}} (split button).
   Comments/posts: wrap {{actions}} in .enso-actions (Copenhagen uses .actions);
   its trigger is an icon <button>. */
.enso-user-profile__actions-menu { display: inline-flex; }
:is(button.enso-user-profile__actions-menu, .enso-user-profile__actions-menu button) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--enso-spacing-xs);
  min-height: 36px;
  padding: var(--enso-spacing-xs) var(--enso-spacing-md);
  font-weight: var(--enso-font-weight-medium);
  line-height: 1.5;
  color: var(--enso-text-primary);
  background-color: transparent;
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-button-radius);
}
.enso-user-profile__actions-menu button + button { margin-inline-start: -1px; }
:is(button.enso-user-profile__actions-menu, .enso-user-profile__actions-menu button):hover { color: var(--enso-text-primary); background-color: var(--enso-bg-secondary); }
:is(.enso-actions, .actions) { flex-shrink: 0; }
:is(.enso-actions, .actions) button {
  appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 32px;
  min-height: 32px;
  padding: var(--enso-spacing-xs);
  color: var(--enso-text-secondary);
  background: transparent;
  border: 0;
  border-radius: var(--enso-border-radius-sm);
}
:is(.enso-actions, .actions) button:hover { color: var(--enso-text-primary); background-color: var(--enso-bg-secondary); }
:is(button.enso-user-profile__actions-menu, .enso-user-profile__actions-menu button, .enso-actions button, .actions button):focus-visible { outline: 2px solid var(--enso-color-primary); outline-offset: 2px; }

/* ---- Vote state (VOTE-1) ----------------------------------------------------
   {{vote}} sets aria-pressed="true" on the chosen button after a vote. */
:is(.enso-article__voting, .enso-community-post__voting, .enso-community-comment__actions) .enso-btn[aria-pressed="true"],
:is(.enso-article__voting, .enso-community-post__voting, .enso-community-comment__actions) .enso-btn[aria-pressed="true"]:hover:not(:disabled) {
  color: var(--enso-text-inverse);
  background-color: var(--enso-color-primary);
  border-color: var(--enso-color-primary);
}

/* ---- Hero (DARK-1, HERO-2) + buttons on coloured bands ----------------------
   Dark mode swaps in the lighter *_dark primary/secondary, which put white hero
   text at 2.7-3.0:1. Deepen the gradient instead. hero_text_color has no dark
   variant, and a dark one (set for a light brand palette) would drop to ~2:1 on
   the deepened stops, so the text goes white here: a stop is at most 40% of
   white (#666), so white is >= 5.74:1 (title and subtitle; opacity 1 since v1.5.2)
   for any brand. minimal and stacked-card set their own `color`. */
[data-theme=dark] .enso-hero--gradient {
  --enso-hero-text: #fff;

  background-image: linear-gradient(135deg, color-mix(in srgb, var(--enso-color-primary) 40%, #000), color-mix(in srgb, var(--enso-color-secondary) 40%, #000));
}
/* asymmetric: text + image side by side only from tablet up, and only when an
   image is actually rendered (base rule above is single-column). */
@media (min-width: 768px) { .enso-hero--asymmetric .enso-container:has(> .enso-hero__image) { grid-template-columns: 3fr 2fr; } }
/* hero_type minimal is a quiet surface band whatever hero_style says: the
   gradient/solid/image backgrounds used to paint over it (dark text on indigo,
   2.7:1). !important only beats the inline style="background-image" of the
   image style. */
.enso-hero--minimal.enso-hero--gradient,
.enso-hero--minimal.enso-hero--solid,
.enso-hero--minimal.enso-hero--image { background-image: none !important; background-color: var(--enso-bg-secondary); }
.enso-hero--minimal .enso-hero__overlay,
.enso-hero--minimal .enso-hero__bg-dark { display: none !important; }
/* On the light minimal band / stacked card a white search button has no edge:
   restore the regular primary submit there. */
:is(.enso-hero--minimal, .enso-hero--stacked-card) .enso-search--hero input[type=submit] { color: var(--enso-text-inverse); background: var(--enso-color-primary); border-color: var(--enso-color-primary); }
:is(.enso-hero--minimal, .enso-hero--stacked-card) .enso-search--hero input[type=submit]:hover { color: var(--enso-text-inverse); background: var(--enso-color-secondary); border-color: var(--enso-color-secondary); }
/* A primary button on a primary-coloured band blends into it.
   Hero CTA: use the white button the hero search already uses. */
:is(.enso-hero--gradient, .enso-hero--solid, .enso-hero--image):not(.enso-hero--minimal, .enso-hero--stacked-card) .enso-hero__cta .enso-btn--primary {
  color: var(--enso-color-primary-on-light);
  background-color: #fff;
  border-color: #fff;
}
:is(.enso-hero--gradient, .enso-hero--solid, .enso-hero--image):not(.enso-hero--minimal, .enso-hero--stacked-card) .enso-hero__cta .enso-btn--primary:hover:not(:disabled) {
  color: var(--enso-color-primary-on-light);
  background-color: color-mix(in srgb, var(--enso-color-primary-on-light) 10%, #fff);
  border-color: color-mix(in srgb, var(--enso-color-primary-on-light) 10%, #fff);
}
/* CTA gradient: invert the brand's own tuned pair (the band already sets its
   title/description in --enso-text-inverse on this gradient), so the button
   keeps the brand's text-inverse/primary contrast even with a light primary.
   Rest/hover: defaults 6.29/5.25 light, 5.72/4.78 dark; amber #FBBF24 10.22/7.98. */
.enso-cta--gradient .enso-btn--primary {
  color: var(--enso-color-primary);
  background-color: var(--enso-text-inverse);
  border-color: var(--enso-text-inverse);
}
.enso-cta--gradient .enso-btn--primary:hover:not(:disabled) {
  color: var(--enso-color-primary);
  background-color: color-mix(in srgb, var(--enso-text-inverse) 88%, var(--enso-color-primary));
  border-color: color-mix(in srgb, var(--enso-text-inverse) 88%, var(--enso-color-primary));
}

/* ---- Logo height guard (LOGO-1) ---------------------------------------------
   logo_height is free text emitted as --enso-logo-height. A unitless "40"
   used to make max-height invalid (= none), so the logo rendered at its natural
   size. Registered as a length, a non-length value now falls back to the 40px
   cap instead. */
@property --enso-logo-height {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 40px;
}

/* ---- Code-block copy button on touch screens (audit follow-up) -------------
   It only appeared on :hover / :focus-visible, so touch users never saw it. */
@media (hover: none) {
  .enso-code-copy { opacity: 1; }
}

/* ---- Rich-text editor in comment/reply/post forms, dark mode (DARK-3) -------
   {{wysiwyg}} mounts the same CKEditor 5 as the request form; mirror the
   module-form re-skin for the theme's own forms. */
[data-theme=dark] :is(.enso-comments__form, .enso-community-comment-form, .enso-request-reply-form, .enso-post-form) .ck {
  --ck-color-base-background: var(--enso-bg-secondary);
  --ck-color-base-foreground: var(--enso-bg-tertiary);
  --ck-color-base-border: var(--enso-border-color);
  --ck-color-text: var(--enso-text-primary);
  --ck-color-shadow-drop: rgba(0, 0, 0, .4);
  --ck-color-toolbar-background: var(--enso-bg-tertiary);
  --ck-color-toolbar-border: var(--enso-border-color);
  --ck-color-button-default-background: transparent;
  --ck-color-button-default-hover-background: var(--enso-bg-secondary);
  --ck-color-button-default-active-background: var(--enso-bg-primary);
  --ck-color-button-on-background: var(--enso-bg-secondary);
  --ck-color-button-on-hover-background: var(--enso-bg-primary);
  --ck-color-button-on-color: var(--enso-text-primary);
  --ck-color-panel-background: var(--enso-bg-secondary);
  --ck-color-panel-border: var(--enso-border-color);
  --ck-color-dropdown-panel-background: var(--enso-bg-secondary);
  --ck-color-dropdown-panel-border: var(--enso-border-color);
  --ck-color-list-background: var(--enso-bg-secondary);
  --ck-color-list-button-hover-background: var(--enso-bg-tertiary);
  --ck-color-list-button-on-background: var(--enso-bg-tertiary);
  --ck-color-input-background: var(--enso-bg-secondary);
  --ck-color-input-text: var(--enso-text-primary);
  --ck-color-input-border: var(--enso-border-color);
}
[data-theme=dark] :is(.enso-comments__form, .enso-community-comment-form, .enso-request-reply-form, .enso-post-form) :is(.ck-toolbar, .ck.ck-toolbar, .ck-editor__top) { background: var(--enso-bg-tertiary) !important; border-color: var(--enso-border-color) !important; color: var(--enso-text-primary) !important; }
[data-theme=dark] :is(.enso-comments__form, .enso-community-comment-form, .enso-request-reply-form, .enso-post-form) :is(.ck-content, .ck-editor__editable) { background: var(--enso-bg-secondary) !important; color: var(--enso-text-primary) !important; }
[data-theme=dark] :is(.enso-comments__form, .enso-community-comment-form, .enso-request-reply-form, .enso-post-form) :is(.ck-button, .ck-button__label, .ck-toolbar__items, .ck-dropdown__button) { color: var(--enso-text-primary) !important; }
[data-theme=dark] :is(.enso-comments__form, .enso-community-comment-form, .enso-request-reply-form, .enso-post-form) :is(.ck-dropdown__panel, .ck-list, .ck-balloon-panel) { background: var(--enso-bg-secondary) !important; border-color: var(--enso-border-color) !important; }

/* ---- Home 'card' categories: see more (V4-4) --------------------------------
   v4 caps category.sections at 5; the link to the category page sits under the
   list, reusing the section-link colours. */
.enso-category-expanded__more { display: inline-block; margin-top: var(--enso-spacing-sm); font-weight: var(--enso-font-weight-medium); }

/* ---- Skip-link focus target (A11Y) -----------------------------------------
   #main-content is a non-interactive <div tabindex="-1"> the skip link focuses.
   Drop the UA ring only for mouse/programmatic focus; keyboard focus still
   matches :focus-visible and keeps its outline. */
#main-content:focus:not(:focus-visible) { outline: none; }

/* ---- Live-verify fixes (v1.5.0 theme preview, con-peven-pse) ----------------
   Found on the live UKG and WMSP previews; core bugs, so they apply to every brand. */

/* Responsive columns stack below their breakpoint (LIVE-1). .enso-col is
   flex:1 1 0% at every width and .enso-col--md-N only sizes itself inside
   @media (min-width:768px), so the three md-4 helper blocks shared one 375px row
   (~97px each, one word per line). Mobile-first, as Bootstrap does: a column
   sized from md up is full width below md, unless it also carries an sm size,
   which then applies from sm up. >= md is untouched (3 x 33.333% on the
   negative-margin gutter row). The row gap spaces the stacked cards; it only
   acts when columns wrap. Only the home helper blocks use .enso-col--md-*
   (categories and promoted use their own CSS grids). A column that also carries
   an explicit base size (.enso-col--1..12 or --auto) keeps it below its md/sm
   size, as mobile-first classes should, so those are excluded here. */
@media (max-width: 767.98px) {
  .enso-row > .enso-col[class*="enso-col--md-"]:not([class*="enso-col--sm-"]):not(.enso-col--1, .enso-col--2, .enso-col--3, .enso-col--4, .enso-col--5, .enso-col--6, .enso-col--7, .enso-col--8, .enso-col--9, .enso-col--10, .enso-col--11, .enso-col--12, .enso-col--auto) { flex: 0 0 100%; max-width: 100%; }
}
@media (max-width: 575.98px) {
  .enso-row > .enso-col[class*="enso-col--md-"]:not(.enso-col--1, .enso-col--2, .enso-col--3, .enso-col--4, .enso-col--5, .enso-col--6, .enso-col--7, .enso-col--8, .enso-col--9, .enso-col--10, .enso-col--11, .enso-col--12, .enso-col--auto) { flex: 0 0 100%; max-width: 100%; }
}
.enso-row--gap-4 { row-gap: var(--enso-spacing-xl); }

/* Home recent activity: the section's own h2 carries the settings/DC title, and
   {{recent_activity}} emits a second "Recent activity" h2.recent-activity-header
   (Copenhagen's native class). Drop the native one inside the theme's section. */
.enso-activity .recent-activity-header { display: none; }

/* Footer logo by the FOOTER's tone, not the page theme (LIVE-4). The default
   footer is dark in both modes, so the page-theme swap showed the dark-on-light
   wordmark on it in light mode (1.14:1). enso-ui-fixes.js measures the footer's
   effective background and sets data-footer-tone; a dark footer shows logo_dark,
   a light one (e.g. a sand footer in light mode) shows logo. Beats the
   .enso-light-only / .enso-dark-only !important utilities on specificity. With
   no JS the attribute is absent and the page-theme swap stays. */
.enso-footer[data-footer-tone="dark"] .enso-footer__logo.enso-light-only,
.enso-footer[data-footer-tone="light"] .enso-footer__logo.enso-dark-only { display: none !important; }
.enso-footer[data-footer-tone="dark"] .enso-footer__logo.enso-dark-only,
.enso-footer[data-footer-tone="light"] .enso-footer__logo.enso-light-only { display: block !important; }

/* Home: the full-bleed hero sits flush under the header. .enso-main's top
   padding left a 24px band of page background above it; keep the padding when
   the hero is off (or not the first block). */
.enso-main.enso-home:has(> .enso-hero:first-child) { padding-top: 0; }

/* Header row centred in --enso-header-height (LIVE-6). The height was a
   min-height on <header> only, so a taller header_height left the row at the top
   with an empty band under it (WMSP header_height 80: 23px). The row itself now
   fills the height and its flex items centre in it. The mobile menu panel is a
   sibling of the row, so opening it neither moves the row nor gets centred;
   sticky positioning stays on <header>. Centered variant (two grid rows from
   992px): pack the rows in the middle instead of stretching them apart. */
.enso-header__inner { min-height: var(--enso-header-height); }
@media (min-width: 992px) {
  .enso-header--centered .enso-header__inner { align-content: center; }
}

/* Native module forms (new request, service catalog, approvals): the attachments
   dropzone label is coloured from brand_color, which fails AA for a mid-tone
   primary (WMSP #C2510E-derived #BA4E0D on sand 4.06:1, on dark 3.65:1). It sits
   on the page, so use the theme's link colour (AA-checked on the page in both
   modes). */
:is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request) [data-garden-id="forms.file_upload"] { color: var(--enso-link-color) !important; }
/* Garden buttons in the module forms follow the theme's button radius (Garden's
   own is 4px; every other Enso button uses --enso-button-radius). */
:is(#new-request-form, #service-catalog, #service-catalog-item, #category-selector, #approval-request-list, #approval-request) [data-garden-id="buttons.button"] { border-radius: var(--enso-button-radius); }

/* Search input placeholders: the browser default grey (#757575) was 3.73:1 on a
   sand input and 3.98:1 on a dark one. Use the muted text token (AA on the input
   surface in both modes); opacity:1 stops Firefox fading it further. */
:is(.enso-search, .enso-hero, .enso-search-header, .enso-header, .enso-cmdk) input[type="search"]::placeholder { color: var(--enso-text-muted); opacity: 1; }

/* ---- Live re-check fixes (v1.5.2, UKG + WMSP previews) ---------------------- */

/* Hero buttons follow the hero text (RECHECK-1). .enso-hero__cta is a flex row,
   so text-align:center never reached it and the buttons sat at the start edge
   under a centred title and search box. Every hero_type centres its text except
   asymmetric (text-align:start), which keeps its start-aligned row. split centres
   its text inside its own column, and so does its button now. */
.enso-hero:not(.enso-hero--asymmetric) .enso-hero__cta { justify-content: safe center; } /* safe: an over-wide nowrap label falls back to the start edge instead of spilling off both sides */

/* Focus ring for hero buttons on the coloured and photo bands (RECHECK-1). The
   default ring is 2px primary, which disappears on a primary band and measured
   1.15:1 on a darkened photo. Use a white ring with a dark band between it and
   the button: the white ring is >= 4.7:1 on any photo under a 55% overlay (a
   white pixel darkens to #737373) and >= the white title's own ratio on
   gradient/solid bands; the dark band keeps the ring distinct from the white
   button and from any light pixel. Same in both modes (the bands stay dark). */
:is(.enso-hero--gradient, .enso-hero--solid, .enso-hero--image):not(.enso-hero--minimal, .enso-hero--stacked-card) .enso-hero__cta .enso-btn:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
  box-shadow: 0 0 0 2px #111;
}

/* Hero subtitle at full opacity (RECHECK-2). opacity .9 let bright photo pixels
   pull the 20px/400 subtitle to 4.33:1 on the WMSP photo. At 1 it matches the
   title (default gradient: white on #4F46E5 6.29:1, on #7C3AED 5.70:1; the
   default hero has no subtitle, so its look is unchanged). hero_type minimal
   keeps its own .85 (dark text on a surface band, set by a stronger rule). */
.enso-hero__subtitle { opacity: 1; }

/* Search result meta at phone width (RECHECK-3). The separators were ::before
   of the NEXT item, so a wrap started a line with "› Tracking your order" or
   "· 27 April 2026". Now:
   - "›" is ::after of every crumb that has a following crumb, and cannot break
     away from it (no break opportunity before U+203A), so a wrapped path ends a
     line with "›" instead of starting the next with it. U+203A is
     Bidi_Mirrored, so RTL still shows "‹" pointing along the path.
   - "·" hangs in the space before the author/date (an inline-block pulled back
     by its own width). When that item starts a line, the dot lies outside the
     meta box and overflow clips it, so the dot only shows between two items on
     the same line. The space itself is the previous item's end margin, so it
     only exists at a line end (invisible there), never as an indent.
   1280 keeps "A › B › C · author · date" at the same positions (the dot slot
   is two md gaps plus the dot's own width). Needs :has(); older browsers keep
   the previous rules above. */
@supports selector(:has(+ *)) {
  .enso-search-result__meta {
    --enso-meta-dot: calc(var(--enso-spacing-md) * 2 + .27em);

    column-gap: 0;
    overflow: hidden;
    overflow-wrap: anywhere;
  }
  .enso-search-result__category + .enso-search-result__category::before { content: none; }
  .enso-search-result__category:has(+ .enso-search-result__category) { margin-inline-end: var(--enso-spacing-md); }
  .enso-search-result__category:has(+ .enso-search-result__category)::after {
    content: "›";
    margin-inline-start: var(--enso-spacing-md);
    color: var(--enso-text-muted);
  }
  .enso-search-result__category:has(+ :is(.enso-search-result__author, .enso-search-result__date)),
  .enso-search-result__author:has(+ .enso-search-result__date) { margin-inline-end: var(--enso-meta-dot); }
  .enso-search-result__category + .enso-search-result__author::before,
  .enso-search-result__category + .enso-search-result__date::before,
  .enso-search-result__author + .enso-search-result__date::before {
    display: inline-block;
    width: var(--enso-meta-dot);
    margin-inline: calc(var(--enso-meta-dot) * -1) 0;
    text-align: center;
  }
}

/* Native module fields on tinted pages (RECHECK-4). Garden paints field edges
   #848F99 (2.67:1 on the WMSP sand page), and dark mode re-skinned them to
   --enso-border-color (#553C4D, 1.87:1). A decorative border token is too faint
   for a field edge on some brands (1.2-2.6:1), so derive one halfway to the text
   colour: >= 3.46:1 against both the page (bg-primary) and the field surface
   (bg-secondary) for the defaults and every brand branch, light and dark (WMSP
   5.26/6.50 light, 6.76/6.06 dark). Only the resting state changes: hover,
   focus, validation (aria-invalid) and disabled keep Garden's own colours in
   light; in dark mode (where the earlier rule flattened every state to the
   faint token) hover/focus take the theme primary, as Garden does in light,
   and an invalid field the error colour. The CKEditor
   Description field is not Garden but sits in the same form, so its border
   variables follow. Placeholders use the muted token (Garden's is 3.3:1). */
:is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) :is([data-garden-id="forms.input"], [data-garden-id="forms.textarea"], [data-garden-id="forms.faux_input"], [data-garden-id="forms.media_input"], [data-garden-id="dropdowns.combobox.trigger"], [data-garden-id="forms.file_upload"]):not(:is(:hover, :focus-visible, :focus-within, :disabled, [aria-disabled="true"], [aria-invalid="true"], :has([aria-invalid="true"]))) {
  border-color: color-mix(in srgb, var(--enso-border-color) 50%, var(--enso-text-primary)) !important;
}
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) :is([data-garden-id="forms.input"], [data-garden-id="forms.textarea"], [data-garden-id="forms.faux_input"], [data-garden-id="forms.media_input"], [data-garden-id="dropdowns.combobox.trigger"], [data-garden-id="forms.file_upload"]):is(:hover, :focus-visible, :focus-within):not(:is(:disabled, [aria-disabled="true"], [aria-invalid="true"], :has([aria-invalid="true"]))) {
  border-color: var(--enso-color-primary) !important;
}
/* Without this, a dark invalid field kept the faint token and read weaker than
   a valid one. */
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) :is([data-garden-id="forms.input"], [data-garden-id="forms.textarea"], [data-garden-id="forms.faux_input"], [data-garden-id="dropdowns.combobox.trigger"]):is([aria-invalid="true"], :has([aria-invalid="true"])) {
  border-color: var(--enso-color-error) !important;
}
:is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) .ck,
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) .ck {
  --ck-color-base-border: color-mix(in srgb, var(--enso-border-color) 50%, var(--enso-text-primary));
  --ck-color-toolbar-border: color-mix(in srgb, var(--enso-border-color) 50%, var(--enso-text-primary));
}
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) :is(.ck-toolbar, .ck.ck-toolbar, .ck-editor__top) { border-color: color-mix(in srgb, var(--enso-border-color) 50%, var(--enso-text-primary)) !important; }
/* The dark field-surface rule also matches the editor ([contenteditable]) and set
   its border straight to the faint token, over the variable. */
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) .ck.ck-editor__editable:not(.ck-focused) { border-color: color-mix(in srgb, var(--enso-border-color) 50%, var(--enso-text-primary)) !important; }
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) .ck.ck-editor__editable.ck-focused { border-color: var(--enso-color-primary) !important; }
:is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request, #category-selector) :is(input, textarea)::placeholder { color: var(--enso-text-muted); opacity: 1; }

/* ---- v1.5.3: brand-safe text colours (a11y sweep of the brand branches) ------
   A brand primary can be mid-tone (orange #FF5F1F is 3.03:1 on white), so text
   that sat in the primary colour at rest failed AA on 4 brands. It now uses the
   link token, which every brand sets to an AA-checked value in both modes.
   Underlines, borders and icons keep the primary (non-text, 3:1). */
.enso-tabs__tab--active,
.enso-tabs__link--active,
.enso-section-card__more,
.enso-search-filter__link--active,
.enso-sidebar-card__link,
.enso-user-profile__role-badge--agent,
.recent-activity-item-parent,
.enso-section-nav .enso-section-nav__link--active { color: var(--enso-link-color); }
/* The footer description had opacity .85 on top of footer_text_color, which cut
   brand footers to 3.65:1 (Charlotte Tilbury) and 4.47:1 (Thomas). The colour
   setting alone is the contrast contract. */
.enso-footer__description { opacity: 1; }

/* ---- v1.5.5 — live content review fixes (WMSP content review) -------------- */

/* Imported inline text colours in dark mode (C1). Content copied from an older
   help centre or an email client carries style="color:#303339" / "#000000" /
   "black" and <font color>, written for a white page: on a dark page it read
   1.2-1.4:1 (whole WMSP articles went black on plum). In dark mode such an
   element inherits its parent's colour instead, so it follows the body text,
   and inside a link the link colour; a link that carries its own inline colour
   takes the link colour. The patterns only match a real color declaration
   (start of the attribute, or after a space, ";", tab or newline, as email
   HTML in request comments has), never background-color, border-color and the
   like. An element that paints a background of its own (an inline background
   that is not transparent/none/initial, a bgcolor, or a <mark>), and
   everything inside one, keeps its colours: that pair was chosen together (a
   highlight, a callout, black on the yellow mark). A background that paints
   nothing does not count, so Google Docs pastes
   (color:#000000;background-color:transparent on every span) and text inside a
   background:none wrapper are fixed too (v1.5.5 review). Light mode is
   untouched. */
[data-theme=dark] :is(.enso-article__body, .enso-comment__body, .enso-community-post__body, .enso-community-comment__body, .enso-request__description, .enso-request-comment__body) :is([style^="color" i], [style*=" color" i], [style*=";color" i], [style*="\9 color" i], [style*="\a color" i], font[color]):not(:is([style*="background" i]:not([style*="background-color:transparent" i], [style*="background-color: transparent" i], [style*="background:transparent" i], [style*="background: transparent" i], [style*="background:none" i], [style*="background: none" i], [style*="background-color:initial" i], [style*="background-color: initial" i]), [bgcolor], mark), :is([style*="background" i]:not([style*="background-color:transparent" i], [style*="background-color: transparent" i], [style*="background:transparent" i], [style*="background: transparent" i], [style*="background:none" i], [style*="background: none" i], [style*="background-color:initial" i], [style*="background-color: initial" i]), [bgcolor], mark) *) {
  color: inherit !important;
}
[data-theme=dark] :is(.enso-article__body, .enso-comment__body, .enso-community-post__body, .enso-community-comment__body, .enso-request__description, .enso-request-comment__body) a:is([style^="color" i], [style*=" color" i], [style*=";color" i], [style*="\9 color" i], [style*="\a color" i]):not(:is([style*="background" i]:not([style*="background-color:transparent" i], [style*="background-color: transparent" i], [style*="background:transparent" i], [style*="background: transparent" i], [style*="background:none" i], [style*="background: none" i], [style*="background-color:initial" i], [style*="background-color: initial" i]), [bgcolor], mark), :is([style*="background" i]:not([style*="background-color:transparent" i], [style*="background-color: transparent" i], [style*="background:transparent" i], [style*="background: transparent" i], [style*="background:none" i], [style*="background: none" i], [style*="background-color:initial" i], [style*="background-color: initial" i]), [bgcolor], mark) *) {
  color: var(--enso-link-color) !important;
}

/* v1.5.6: Zendesk's legacy editor colour CLASSES (.wysiwyg-color-black*,
   -blue*, -purple*, -navy*) come from the platform's application.css, not from
   inline styles, so the rules above miss them. They are dark colours written
   for a white page (seen live on WMSP: black on plum, 1.15:1). In dark mode
   they inherit like inline colours; a link keeps the link colour. Bright hues
   (red, orange, yellow, green) read on a dark page and keep their meaning. */
[data-theme=dark] :is(.enso-article__body, .enso-comment__body, .enso-community-post__body, .enso-community-comment__body, .enso-request__description, .enso-request-comment__body) :is([class*="wysiwyg-color-black"], [class*="wysiwyg-color-blue"], [class*="wysiwyg-color-purple"], [class*="wysiwyg-color-navy"]):not(a) {
  color: inherit !important;
}
[data-theme=dark] :is(.enso-article__body, .enso-comment__body, .enso-community-post__body, .enso-community-comment__body, .enso-request__description, .enso-request-comment__body) a:is([class*="wysiwyg-color-black"], [class*="wysiwyg-color-blue"], [class*="wysiwyg-color-purple"], [class*="wysiwyg-color-navy"]) {
  color: var(--enso-link-color) !important;
}

/* v1.5.6: the sticky sidebar TOC sticks one spacing unit below the header, and
   text scrolling under it showed through that band. A page-coloured strip
   above the card (the sticky card is positioned, so it anchors ::before)
   covers the band; in normal flow it only paints over page background. */
.enso-toc::before { content: ""; position: absolute; left: 0; right: 0; top: calc(var(--enso-spacing-md) * -1); height: var(--enso-spacing-md); background-color: var(--enso-bg-primary); pointer-events: none; }

/* Article sidebar: one gap between its blocks (T4). Only the related articles
   and recently viewed blocks carried a top margin, so the section navigation
   touched whatever sat above it. The sidebar is now a flex column with a single
   gap; flex gaps skip blocks that are not rendered (an empty related list,
   recently viewed before it has items, a TOC with no headings), so there is
   never a stray gap at the top. The blocks' own top margins are reset here only
   (recently viewed keeps its margin on the home page). */
.enso-article-sidebar { display: flex; flex-direction: column; gap: var(--enso-spacing-2xl); }
.enso-article-sidebar > * { margin-block: 0; }

/* Table of contents above the article when the sidebar stacks (T9). Below the
   sidebar breakpoint (and with article_sidebar_position "none", where the
   sidebar always sits under the article) the sidebar TOC came after the whole
   article, so it could not help anyone navigate. article_page.hbs renders a
   collapsed <details> just before the article body and enso-ui-fixes.js fills
   it with a copy of the sidebar list. It is shown from the first paint, so the
   body never moves when the list arrives (it used to be inserted 60ms after
   DOMContentLoaded: CLS 0.02-0.05), but only when the body has an h2 or h3
   (the headings the list is built from) and the theme JS runs: [data-theme]
   is set in <head> by enso-darkmode.js before first paint, and without JS it
   stays empty and hidden. Only one copy is ever shown: the sidebar copy is
   hidden under exactly the same conditions. Without :has() nothing changes. */
.enso-toc-inline { display: none; }
@media (max-width: 991.98px) {
  [data-theme] .enso-toc-inline:has(+ .enso-article__body :is(h2, h3)) { display: block; }
  [data-theme] .enso-article-layout:has(> .enso-article > .enso-toc-inline + .enso-article__body :is(h2, h3)) > .enso-article-sidebar > .enso-toc { display: none; }
}
[data-theme] .enso-article-layout--none .enso-toc-inline:has(+ .enso-article__body :is(h2, h3)) { display: block; }
[data-theme] .enso-article-layout--none:has(> .enso-article > .enso-toc-inline + .enso-article__body :is(h2, h3)) > .enso-article-sidebar > .enso-toc { display: none; }
.enso-toc-inline {
  margin: 0 0 var(--enso-spacing-xl);
  background-color: var(--enso-bg-secondary);
  border: var(--enso-border-width) solid var(--enso-border-color);
  border-radius: var(--enso-card-radius);
}
.enso-toc-inline__summary {
  display: flex;
  align-items: center;
  gap: var(--enso-spacing-sm);
  min-height: 44px;
  padding: var(--enso-spacing-sm) var(--enso-spacing-lg);
  cursor: pointer;
  font-size: var(--enso-font-size-sm);
  font-weight: var(--enso-font-weight-bold);
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--enso-text-secondary);
  list-style: none;
}
.enso-toc-inline__summary::-webkit-details-marker { display: none; }
/* Chevron: points along the reading direction when closed, down when open. */
.enso-toc-inline__summary::before {
  content: "";
  flex: 0 0 auto;
  width: .45em;
  height: .45em;
  border-block-end: 2px solid currentColor;
  border-inline-end: 2px solid currentColor;
  transform: rotate(-45deg);
}
.enso-toc-inline[open] > .enso-toc-inline__summary::before { transform: rotate(45deg); }
[dir=rtl] .enso-toc-inline:not([open]) > .enso-toc-inline__summary::before { transform: rotate(45deg); }
[dir=rtl] .enso-toc-inline[open] > .enso-toc-inline__summary::before { transform: rotate(-45deg); }
.enso-toc-inline__summary:focus-visible { outline: 2px solid var(--enso-color-primary); outline-offset: 2px; border-radius: var(--enso-card-radius); }
.enso-toc-inline__nav { padding: 0 var(--enso-spacing-lg) var(--enso-spacing-md); }
.enso-toc-inline__nav .enso-toc__link { display: block; padding: var(--enso-spacing-xs) 0; color: var(--enso-link-color); text-decoration: none; font-size: var(--enso-font-size-sm); }
.enso-toc-inline__nav .enso-toc__link:hover { color: var(--enso-link-color); text-decoration: underline; }
/* Nested TOC items (an H3 under its H2) indent from the start edge, so RTL
   indents them too (the older rule sets padding-left only). */
.enso-toc__list--nested { padding-left: 0; padding-inline-start: var(--enso-spacing-md); }

/* Home grids with 3, 5, 6 or 9 items: 3 columns on desktop (T8). The auto-fill
   grids fit 4-5 cards across a 1280px container, so the common 6 left an orphan
   row of 2 and 3 left an empty track. Only the grid layouts (categories_type
   and promoted_type "grid") change; list, card, carousel and featured keep
   theirs, as does every other count. Below 992px the grids already hold at
   most 3 across. */
@media (min-width: 992px) {
  :is(.enso-categories__grid, .enso-promoted__grid):is(:has(> :nth-child(3):last-child), :has(> :nth-child(6):last-child), :has(> :nth-child(9):last-child)) {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
/* 5 items go to 3 columns (3 + 2) only while the grid holds exactly 4 tracks
   (4 x 240px + 3 gaps of 16px = 1008px, up to 5 x 240 + 4 x 16 = 1264px),
   where auto-fill left an orphan (4 + 1). From 1264px, a wide container_width
   (up to 1440) fits all 5 in one row, which is kept. The grid fills its
   .enso-container's content box, so that container is queried; it is a query
   container only when it holds a 5-item grid (an inline-size container makes
   its own formatting context; the section title's margin-top is 0, so nothing
   moves). */
.enso-container:has(> :is(.enso-categories__grid, .enso-promoted__grid) > :nth-child(5):last-child) { container: enso-home-grid / inline-size; }
@container enso-home-grid (min-width: 1008px) and (max-width: 1263.98px) {
  :is(.enso-categories__grid, .enso-promoted__grid):has(> :nth-child(5):last-child) {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* Garden primary (submit) buttons in the native module forms, dark mode (T7).
   The modules theme themselves from brand_color, the LIGHT primary, so the new
   request "Submit" kept the light primary with a white label while every Enso
   primary button switches to the dark primary with the inverse label. Garden
   exposes no primary hook, but a submit button is always its primary one.
   Rest: text-inverse on primary is 5.72:1 (default) and 7.53:1 (WMSP). Hover
   and active lighten toward the text colour instead of darkening, because the
   label is dark in dark mode (default 6.78 / 7.60:1, WMSP 8.54 / 9.28:1). The
   focus ring is the Enso one (primary, 2px, offset), >= 5.7:1 on the page.
   Disabled buttons keep Garden's disabled look. */
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request) [data-garden-id="buttons.button"][type="submit"]:not(:disabled, [aria-disabled="true"]) {
  background-color: var(--enso-color-primary) !important;
  border-color: var(--enso-color-primary) !important;
  color: var(--enso-text-inverse) !important;
}
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request) [data-garden-id="buttons.button"][type="submit"]:not(:disabled, [aria-disabled="true"]):hover {
  background-color: color-mix(in srgb, var(--enso-color-primary) 85%, var(--enso-text-primary)) !important;
  border-color: color-mix(in srgb, var(--enso-color-primary) 85%, var(--enso-text-primary)) !important;
}
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request) [data-garden-id="buttons.button"][type="submit"]:not(:disabled, [aria-disabled="true"]):active {
  background-color: color-mix(in srgb, var(--enso-color-primary) 75%, var(--enso-text-primary)) !important;
  border-color: color-mix(in srgb, var(--enso-color-primary) 75%, var(--enso-text-primary)) !important;
}
[data-theme=dark] :is(#new-request-form, #service-catalog, #service-catalog-item, #approval-request-list, #approval-request) [data-garden-id="buttons.button"][type="submit"]:focus-visible {
  outline: 2px solid var(--enso-color-primary) !important;
  outline-offset: 2px;
  box-shadow: none !important;
}

/* Search result meta: the path on its own line, author and date under it
   (T11). A first path step that is this help centre's own name
   (search_results.hbs marks it --root) repeats on every result, so it is
   hidden when more steps follow. Any other first step stays: in multibrand or
   federated search it names the help centre or source the result comes from.
   The v1.5.2 separator rules still apply inside the path ("›" ends a wrapped
   line, never starts one); author and date start their own line, so no "·"
   precedes them, and the "·" between them keeps its hanging logic. Without
   :has() the step after the hidden root drops its leading "›". A meta line
   with nothing in it (external result with the date hidden) takes no space. */
.enso-search-result__meta { row-gap: var(--enso-spacing-xs); }
.enso-search-result__path { display: flex; flex: 1 1 100%; flex-wrap: wrap; gap: 0 var(--enso-spacing-md); min-width: 0; }
.enso-search-result__path > .enso-search-result__category--root:first-child:not(:last-child) { display: none; }
.enso-search-result__path > .enso-search-result__category--root:first-child + .enso-search-result__category::before { content: none; }
@supports selector(:has(+ *)) {
  .enso-search-result__path { column-gap: 0; }
  .enso-search-result__meta:not(:has(*)) { display: none; }
}

/* ---- Print (PRINT-1) --------------------------------------------------------
   data-theme=dark stays on <html> when printing and browsers drop backgrounds,
   so reset the colour tokens to ink-on-paper for both modes, print the article
   full width, and hide page chrome (the old hide-list named .enso-sidebar,
   which no template emits). */
@media print {
  :root,
  :root[data-theme=dark] {
    --enso-text-primary: #111;
    --enso-text-secondary: #333;
    --enso-text-muted: #555;
    --enso-text-inverse: #fff;
    --enso-link-color: #000;
    --enso-color-primary: #000;
    --enso-bg-primary: #fff;
    --enso-bg-secondary: #fff;
    --enso-bg-tertiary: #f3f3f3;
    --enso-border-color: #ccc;
  }
  .enso-article-layout { display: block; }
  .enso-article-sidebar,
  .enso-toc-inline,
  .enso-breadcrumbs,
  .enso-article__voting,
  .enso-article__sharing,
  .enso-article__feedback,
  .enso-comments__form,
  .enso-cookie-consent,
  .enso-cmdk,
  .enso-code-copy { display: none !important; }
}
