/* 2026-10-05 spec104: declaration fallbacks keep Core's root tokens authoritative. */
/* 2026-10-07 spec 112: theme 1.1.0 presentation (menus, hamburger, top bar, logo width, footer columns / logo, sidebar layout, buttons). */
/* 2026-10-08 spec 117: theme 1.3.0: buttons independent from links (T2-4), subtle submenu chevron (T2-2), link underline options (T2-6). */
/* 2026-10-10 spec 133: theme 1.4.0: no strip under the menu on Builder pages (T2), phone button stacking (T1), centred bottom bar (T7). */
/* 2026-10-11 spec 140: theme 1.6.0: menu arrangement tokens (Core --iw-menu-* / --iw-submenu-*, fallbacks = the look before) and the
   "Menu : début" / "Menu : fin" content blocks inside the menu bar (block at the end of this file). */
body.iw-site{margin:0;background:var(--iw-background,#fff);color:var(--iw-text,#17212b);font-family:var(--iw-font-body,system-ui,sans-serif);font-size:var(--iw-font-size,16px);line-height:var(--iw-line-height,1.6);font-weight:var(--iw-body-weight,400)}
.iw-site *,.iw-site *::before,.iw-site *::after{box-sizing:border-box}
.iw-site [hidden]{display:none!important}
.iw-site img,.iw-site video{max-width:100%;height:auto}
.iw-site iframe{max-width:100%}
/* 2026-10-08 spec 117 (T2-4): link colors never reach buttons (Builder, WordPress, WooCommerce, button presets); :where keeps the specificity. */
.iw-site a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:var(--iw-primary,#166534);text-underline-offset:.2em}
.iw-site a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])):hover{color:var(--iw-primary-hover,#14532d)}
.iw-site :focus-visible{outline:3px solid var(--iw-primary,#166534);outline-offset:4px}
.iw-site .screen-reader-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.iw-site .iw-skip-link{position:fixed;top:-100px;left:1rem;z-index:100000;padding:1rem;background:var(--iw-background,#fff);color:var(--iw-text,#17212b)}
.iw-site .iw-skip-link:focus{top:1rem}
.iw-site h1,.iw-site h2,.iw-site h3,.iw-site h4,.iw-site h5,.iw-site h6{font-family:var(--iw-font-heading,system-ui,sans-serif);font-weight:var(--iw-heading-weight,700);letter-spacing:var(--iw-letter-spacing,0);line-height:1.2;overflow-wrap:anywhere}
.iw-site h1{font-size:var(--iw-h1-size,clamp(2rem,5vw,3rem))}.iw-site h2{font-size:var(--iw-h2-size,2rem)}.iw-site h3{font-size:var(--iw-h3-size,1.5rem)}.iw-site h4{font-size:var(--iw-h4-size,1.25rem)}.iw-site h5{font-size:var(--iw-h5-size,1.125rem)}.iw-site h6{font-size:var(--iw-h6-size,1rem)}
/* 2026-10-30 THEME-TYPO-ELEMENTS TT-2: per-level heading tokens (Core --iw-t-hN-*, printed only for a set property); each chain ends in
   the shared value above, so an unset level renders exactly as before. Transform / font-style: zero-specificity block at the end. */
.iw-site h1{font-family:var(--iw-t-h1-family,var(--iw-font-heading,system-ui,sans-serif));font-weight:var(--iw-t-h1-weight,var(--iw-heading-weight,700));line-height:var(--iw-t-h1-line-height,1.2);letter-spacing:var(--iw-t-h1-letter-spacing,var(--iw-letter-spacing,0))}.iw-site h2{font-family:var(--iw-t-h2-family,var(--iw-font-heading,system-ui,sans-serif));font-weight:var(--iw-t-h2-weight,var(--iw-heading-weight,700));line-height:var(--iw-t-h2-line-height,1.2);letter-spacing:var(--iw-t-h2-letter-spacing,var(--iw-letter-spacing,0))}.iw-site h3{font-family:var(--iw-t-h3-family,var(--iw-font-heading,system-ui,sans-serif));font-weight:var(--iw-t-h3-weight,var(--iw-heading-weight,700));line-height:var(--iw-t-h3-line-height,1.2);letter-spacing:var(--iw-t-h3-letter-spacing,var(--iw-letter-spacing,0))}.iw-site h4{font-family:var(--iw-t-h4-family,var(--iw-font-heading,system-ui,sans-serif));font-weight:var(--iw-t-h4-weight,var(--iw-heading-weight,700));line-height:var(--iw-t-h4-line-height,1.2);letter-spacing:var(--iw-t-h4-letter-spacing,var(--iw-letter-spacing,0))}.iw-site h5{font-family:var(--iw-t-h5-family,var(--iw-font-heading,system-ui,sans-serif));font-weight:var(--iw-t-h5-weight,var(--iw-heading-weight,700));line-height:var(--iw-t-h5-line-height,1.2);letter-spacing:var(--iw-t-h5-letter-spacing,var(--iw-letter-spacing,0))}.iw-site h6{font-family:var(--iw-t-h6-family,var(--iw-font-heading,system-ui,sans-serif));font-weight:var(--iw-t-h6-weight,var(--iw-heading-weight,700));line-height:var(--iw-t-h6-line-height,1.2);letter-spacing:var(--iw-t-h6-letter-spacing,var(--iw-letter-spacing,0))}
.iw-site .iw-container{width:100%;max-width:var(--iw-container,1200px);margin-inline:auto;padding-inline:var(--iw-gutter,24px)}
.iw-site .iw-content{width:100%;max-width:var(--iw-content,800px);margin-inline:auto;padding-inline:var(--iw-gutter,24px)}
.iw-site .iw-main{min-height:40vh;padding-block:var(--iw-space-large,48px)}
.iw-site.iw-builder-page .iw-main{padding:0}
.iw-site .iw-builder-article,.iw-site .iw-builder-article>.entry-content{width:100%;max-width:none;margin:0;padding:0}
/* 2026-10-10 spec 133 (T2): the Builder wrapper is a child of .entry-content, so the 1em content rhythm below gave it 1em of body
   background above the first row and below the last one (the white strip under the menu). The rows touch the header and footer. */
.iw-site .iw-builder-article>.entry-content>.iwb-content{margin-block:0}
.iw-site .iwb-row:not(.iwb-row--full)>.iwb-row__container{max-width:var(--iw-container,1200px);margin-inline:auto;padding-inline:var(--iw-gutter,24px)}
.iw-site .iwb-row--full>.iwb-row__container{max-width:var(--iw-container,1200px);margin-inline:auto}
.iw-site .iwb-row--full.iwb-row--stretch>.iwb-row__container{max-width:100%}
.iw-site .iwb-content{overflow-wrap:anywhere}
.iw-site .iw-row--dark{background:var(--iw-text,#17212b);color:var(--iw-background,#fff)}
.iw-site .iw-row--dark h1,.iw-site .iw-row--dark h2,.iw-site .iw-row--dark h3,.iw-site .iw-row--dark h4,.iw-site .iw-row--dark h5,.iw-site .iw-row--dark h6{color:inherit}
.iw-site .iw-header{background:var(--iw-header-background,var(--iw-background,#fff));color:var(--iw-header-text,var(--iw-text,#17212b));border-bottom:1px solid var(--iw-border,#e2e8f0)}
.iw-site.iw-header-sticky .iw-header{position:sticky;top:0;z-index:100}
.iw-site.admin-bar.iw-header-sticky .iw-header{top:32px}
.iw-site .iw-header-inner{display:flex;align-items:center;justify-content:space-between;gap:var(--iw-space-medium,24px);min-height:var(--iw-header-height,80px);padding-block:12px;flex-wrap:wrap}
/* 2026-10-07 spec 112 (T-6): menu alignment (right = floated next to the logo, GeneratePress style), top bar. */
.iw-site.iw-menu-align-right .iw-header-inner,.iw-site.iw-menu-align-left .iw-header-inner,.iw-site.iw-menu-align-center .iw-header-inner{justify-content:flex-start}
.iw-site.iw-menu-align-right .iw-navigation{margin-left:auto}
.iw-site.iw-menu-align-center .iw-navigation{flex:1 1 auto}.iw-site.iw-menu-align-center .iw-menu{justify-content:center}
.iw-site.iw-menu-align-left .iw-languages,.iw-site.iw-menu-align-center .iw-languages{margin-left:auto}
.iw-site .iw-top-bar{background:var(--iw-surface,#f5f7fa);color:var(--iw-text,#17212b);font-size:var(--iw-t-top-bar-size,.875rem)} /* 2026-10-30 TT-2: element token, fallback = the former value */
.iw-site .iw-top-bar-inner{display:flex;align-items:center;gap:1rem;min-height:36px;padding-block:6px;flex-wrap:wrap}
.iw-site .iw-top-bar-right .iw-top-bar-inner{justify-content:flex-end}.iw-site .iw-top-bar-split .iw-top-bar-inner{justify-content:space-between}
.iw-site .iw-top-bar .iw-widget{margin:0}.iw-site .iw-top-bar .iw-widget-title{font-size:inherit;margin:0}.iw-site .iw-top-bar a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:inherit}
.iw-site.iw-header-centered .iw-header-inner,.iw-site.iw-header-stacked .iw-header-inner{justify-content:center}
.iw-site.iw-header-centered .iw-branding,.iw-site.iw-header-stacked .iw-branding{flex-basis:100%;text-align:center}
.iw-site .iw-header a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:inherit}
.iw-site .iw-site-title{font-weight:var(--iw-t-site-title-weight,700);font-size:var(--iw-t-site-title-size,1.4rem);text-decoration:none} /* 2026-10-30 TT-2: element token, fallback = the former value */
/* 2026-10-07 spec 114: logo width. The natural size is capped (64 px high, 200 px wide on phones); a chosen width lifts the cap and
   keeps the proportions (height auto). The Customizer preview toggles iw-logo-sized / iw-logo-sized-mobile live. */
.iw-site .custom-logo{display:block;width:var(--iw-logo-width,auto);height:auto;max-height:64px;max-width:100%}
.iw-site.iw-logo-sized .custom-logo{max-height:none}
.iw-site .iw-tagline{margin:0;font-size:var(--iw-t-site-description-size,.875rem)} /* 2026-10-30 TT-2: element token, fallback = the former value */
.iw-site .iw-menu,.iw-site .iw-languages ul,.iw-site .iw-footer-menu{list-style:none;margin:0;padding:0;display:flex;align-items:center;gap:1rem;flex-wrap:wrap}
.iw-site .iw-menu li{position:relative}
.iw-site .iw-navigation a{display:inline-block;padding:.5rem;text-decoration:none}
/* 2026-10-07 spec 112 (T-6): submenus open by button (keyboard, touch), and on hover / focus on desktop. Without JS they stay visible. */
.iw-site .iw-navigation.iw-js .sub-menu{display:none}
.iw-site .iw-navigation.iw-js .iw-open>.sub-menu{display:block}
.iw-site .iw-menu>li{display:flex;align-items:center;flex-wrap:wrap}
.iw-site .iw-navigation .current-menu-item>a,.iw-site .iw-navigation a[aria-current]{text-decoration:underline}
.iw-site .sub-menu{list-style:none;margin:0;padding:.5rem 1rem;border:1px solid var(--iw-border,#e2e8f0);background:var(--iw-submenu-background,var(--iw-header-background,var(--iw-background,#fff)));color:var(--iw-submenu-text,inherit);min-width:var(--iw-submenu-width,12rem)} /* 2026-10-11 spec 140: submenu width / colors */
.iw-site .iw-navigation .sub-menu .sub-menu{margin-left:1rem}
.iw-site .iw-languages [aria-current]{font-weight:700;text-decoration:underline}
/* 2026-10-08 spec 117 (T2-2): a subtle chevron right after the parent link, like GeneratePress: no background or box in any state, rotates when
   the submenu is open (button, hover or keyboard focus on desktop). The button keeps its name, aria-expanded and keyboard behaviour. */
.iw-site .iw-submenu-toggle{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;margin-left:-.35rem;border:0;background:transparent;color:inherit;border-radius:0;box-shadow:none;cursor:pointer}
.iw-site .iw-submenu-toggle:hover,.iw-site .iw-submenu-toggle:focus,.iw-site .iw-submenu-toggle:active{background:transparent;color:inherit}
.iw-site .iw-submenu-icon{position:relative;display:block;width:.42rem;height:.42rem}
.iw-site.iw-submenu-chevron .iw-submenu-icon{border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-20%) rotate(45deg);transition:transform .2s;opacity:.85}
.iw-site.iw-submenu-chevron .iw-submenu-toggle[aria-expanded=true] .iw-submenu-icon{transform:translateY(20%) rotate(-135deg)}
.iw-site.iw-submenu-plus .iw-submenu-icon::before,.iw-site.iw-submenu-plus .iw-submenu-icon::after{content:"";position:absolute;left:0;top:50%;width:100%;height:2px;margin-top:-1px;background:currentColor;transition:transform .2s}
.iw-site.iw-submenu-plus .iw-submenu-icon::after{transform:rotate(90deg)}
.iw-site.iw-submenu-plus .iw-submenu-toggle[aria-expanded=true] .iw-submenu-icon::after{transform:rotate(0)}
/* Hamburger (T-6): icon, optional visible label, animated bars. */
.iw-site .iw-menu-toggle{display:inline-flex;align-items:center;gap:.5rem;min-height:44px}
/* 2026-10-12 burger-align (theme 1.6.6): one icon geometry shared by the hamburger and the overlay X (24 x 18, three 2 px bars with
   rounded caps, 8 px apart): the X is drawn from the same bars, so it has the burger's width and centre. */
.iw-site .iw-menu-icon{position:relative;display:block;flex:0 0 auto;width:24px;height:18px}
.iw-site .iw-menu-icon span{position:absolute;left:0;width:100%;height:2px;background:currentColor;border-radius:2px;transition:transform .25s,opacity .2s,top .25s}
.iw-site .iw-menu-icon span:nth-child(1){top:0}.iw-site .iw-menu-icon span:nth-child(2){top:8px}.iw-site .iw-menu-icon span:nth-child(3){top:16px}
.iw-site.iw-toggle-animated .iw-menu-toggle[aria-expanded=true] .iw-menu-icon span:nth-child(1){top:8px;transform:rotate(45deg)}
.iw-site.iw-toggle-animated .iw-menu-toggle[aria-expanded=true] .iw-menu-icon span:nth-child(2){opacity:0}
.iw-site.iw-toggle-animated .iw-menu-toggle[aria-expanded=true] .iw-menu-icon span:nth-child(3){top:8px;transform:rotate(-45deg)}
.iw-site .iw-entry-header{margin-bottom:var(--iw-space-medium,24px)}
.iw-site .iw-entry-meta{font-size:.875rem;color:var(--iw-text-muted,#526274)}
.iw-site .entry-content{overflow-wrap:anywhere}
.iw-site .entry-content>*{margin-block:1em}
.iw-site .entry-content pre{overflow:auto;padding:1rem;background:var(--iw-surface,#f5f7fa)}
/* 2026-10-12 SPEC-177 (T3): content tables, never WooCommerce's (cart, order review, account: shop_table; product variations), which
   keep Woo's table layout. :where keeps the former specificity (0,2,1), so the look of ordinary tables is unchanged. */
.iw-site .entry-content table:where(:not(.shop_table,.variations)){border-collapse:collapse;width:100%;display:block;overflow:auto}
.iw-site .entry-content :where(table:not(.shop_table,.variations)) th,.iw-site .entry-content :where(table:not(.shop_table,.variations)) td{padding:.6rem;border:1px solid var(--iw-border,#e2e8f0)}
.iw-site .entry-content blockquote{border-left:4px solid var(--iw-primary,#166534);margin-inline:0;padding-left:1.5rem}
.iw-site .iw-summary{padding-block:var(--iw-space-medium,24px);border-bottom:1px solid var(--iw-border,#e2e8f0)}
.iw-site .navigation{max-width:var(--iw-content,800px);margin:2rem auto;padding-inline:var(--iw-gutter,24px)}
.iw-site .nav-links{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem}
.iw-site .page-numbers{padding:.5rem}
/* 2026-10-08 spec 117 (T2-4): form submits, <button> and .button take the BUTTON settings (colors, hover, font, weight, radius, padding), never the link ones. */
/* 2026-10-12 SPEC-177 (T4): the generic <button> skin spares WooCommerce's PhotoSwipe toolbar and every Core module button ([class*=iwc-]:
   checkout Back / summary / coupon toggles, floating cart, quick buy, swatches), which keep their own look as on GeneratePress; module
   buttons that carry .button (checkout Continue, coupon Apply) keep the site button through .button. Same specificity as before. */
/* Base like GeneratePress (element specificity 0,0,1): form controls the skin spares use the site font, never the browser's default
   button font; any module rule (one class) still wins. */
:where(.iw-site) :is(button,input,select,textarea){font-family:inherit;font-size:100%}
.iw-site input[type=submit],.iw-site .button,.iw-site button:not(.iw-submenu-toggle,.pswp__button,[class*=iwc-]){font:inherit;font-family:var(--iw-font-button,inherit);cursor:pointer;border:1px solid var(--iw-button-background,var(--iw-primary,#166534));background:var(--iw-button-background,var(--iw-primary,#166534));color:var(--iw-button-text,var(--iw-background,#fff));border-radius:var(--iw-button-radius,8px);padding:var(--iw-btn-padding,10px 22px);font-weight:var(--iw-button-weight,600);text-decoration:none}
.iw-site button:not(.iw-submenu-toggle,.pswp__button,[class*=iwc-]):hover,.iw-site input[type=submit]:hover,.iw-site .button:hover{background:var(--iw-button-hover,var(--iw-primary-hover,#14532d));border-color:var(--iw-button-hover,var(--iw-primary-hover,#14532d));color:var(--iw-button-text,var(--iw-background,#fff))}
/* 2026-10-07 spec 112 (T-7, T-9): button links are never underlined (normal / hover / focus) and a wrapping label keeps one
   shape: inline-flex box, centred balanced lines, no split background. Builder buttons (.iwb-btn) and WordPress buttons included. */
.iw-site a.iwb-btn,.iw-site .iwb-btn a,.iw-site a.button,.iw-site .wp-block-button__link,.iw-site .wp-element-button{text-decoration:none}
.iw-site a.iwb-btn:hover,.iw-site a.iwb-btn:focus,.iw-site .iwb-btn a:hover,.iw-site .iwb-btn a:focus,.iw-site a.button:hover,.iw-site a.button:focus,.iw-site .wp-block-button__link:hover,.iw-site .wp-block-button__link:focus,.iw-site .wp-element-button:hover,.iw-site .wp-element-button:focus{text-decoration:none}
/* 2026-10-08 spec 117 (T2-6): buttons are never underlined, in any state (visited, active included) and whatever the link underline option. */
.iw-site :is(a.iwb-btn,.iwb-btn a,a.button,.wp-block-button__link,.wp-element-button,a[class*=iw-btn-]):is(:link,:visited,:hover,:focus,:focus-visible,:active){text-decoration:none}
.iw-site .iwb-btn,.iw-site a.button,.iw-site .wp-block-button__link{display:inline-flex;align-items:center;justify-content:center;text-align:center;max-width:100%;white-space:normal;text-wrap:balance;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.3;font-family:var(--iw-font-button,inherit)}
.iw-site .iwb-btn--primary,.iw-site a.button{background:var(--iw-button-background,var(--iw-primary,#166534));color:var(--iw-button-text,var(--iw-background,#fff))}
.iw-site .iwb-btn--primary:hover,.iw-site a.button:hover{background:var(--iw-button-hover,var(--iw-primary-hover,#14532d));color:var(--iw-button-text,var(--iw-background,#fff))}
/* 2026-10-08 spec 117 (T2-4): the other Builder button variants had no style of their own under this theme, so they looked like links (link color,
   underline). Each now has a button look from the button and palette settings. Sizes keep the button padding (unchanged). */
.iw-site .iwb-btn{cursor:pointer;font-weight:var(--iw-button-weight,600);border-radius:var(--iw-button-radius,8px);padding:var(--iw-btn-padding,10px 22px)}
.iw-site .iwb-btn--secondary{background:var(--iw-secondary,#64748b);color:var(--iw-background,#fff)}.iw-site .iwb-btn--secondary:hover{background:var(--iw-secondary-hover,#475569);color:var(--iw-background,#fff)}
.iw-site .iwb-btn--outline{background:transparent;color:inherit;box-shadow:inset 0 0 0 2px currentColor}.iw-site .iwb-btn--outline:hover{background:var(--iw-button-background,var(--iw-primary,#166534));color:var(--iw-button-text,var(--iw-background,#fff));box-shadow:inset 0 0 0 2px var(--iw-button-background,var(--iw-primary,#166534))}
.iw-site .iwb-btn--ghost{background:transparent;color:inherit}.iw-site .iwb-btn--ghost:hover{background:rgba(127,127,127,.15);color:inherit}
.iw-site .iwb-btn--danger{background:var(--iw-danger,#dc2626);color:var(--iw-background,#fff)}.iw-site .iwb-btn--danger:hover{background:var(--iw-error,#ef4444);color:var(--iw-background,#fff)}
.iw-site :is(.iwb-btn,.button,input[type=submit],button,.wp-block-button__link,.wp-element-button):focus-visible{outline-color:var(--iw-button-background,var(--iw-primary,#166534))}
/* WooCommerce buttons (shop, product, cart, checkout) follow the button settings too, above WooCommerce's own .button / .button.alt colors. */
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) :is(a,button,input):is(.button,.button.alt){background:var(--iw-button-background,var(--iw-primary,#166534));color:var(--iw-button-text,var(--iw-background,#fff));border:1px solid var(--iw-button-background,var(--iw-primary,#166534));border-radius:var(--iw-button-radius,8px);padding:var(--iw-btn-padding,10px 22px);font-family:var(--iw-font-button,inherit);font-weight:var(--iw-button-weight,600);text-decoration:none}
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) :is(a,button,input):is(.button,.button.alt):hover{background:var(--iw-button-hover,var(--iw-primary-hover,#14532d));border-color:var(--iw-button-hover,var(--iw-primary-hover,#14532d));color:var(--iw-button-text,var(--iw-background,#fff));text-decoration:none}
/* 2026-10-08 spec 117 (T2-6): link underline like GeneratePress. Content links (main, sidebar, footer widgets, comments): always (browser default,
   no rule), on hover, never. Main menu links: never (default), on hover, always; the current page stays underlined. */
.iw-site.iw-links-hover :where(.iw-main,.iw-sidebar,.iw-footer-widgets,.iw-comments) a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])),.iw-site.iw-links-never :where(.iw-main,.iw-sidebar,.iw-footer-widgets,.iw-comments) a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){text-decoration:none}
.iw-site.iw-links-hover :where(.iw-main,.iw-sidebar,.iw-footer-widgets,.iw-comments) a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])):is(:hover,:focus-visible){text-decoration:underline}
.iw-site.iw-nav-links-hover .iw-navigation a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])):is(:hover,:focus-visible),.iw-site.iw-nav-links-always .iw-navigation a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){text-decoration:underline}
.iw-site input:not([type=submit]):not([type=checkbox]):not([type=radio]),.iw-site textarea,.iw-site select{font:inherit;max-width:100%;border:1px solid var(--iw-border,#8795a3);padding:.6rem;border-radius:var(--iw-radius,8px);background:var(--iw-background,#fff);color:var(--iw-text,#17212b)}
.iw-site .iw-search-form>div{display:flex;flex-wrap:wrap;gap:.5rem}
/* 2026-10-13 follow-up (1.7.2, light review item 8): the field keeps 15em beside the button (placeholder never cut at 390), else the button wraps below. */
.iw-site .iw-search-form input{flex:1 1 15em;min-width:0}
.iw-site .iw-footer{background:var(--iw-footer-background,var(--iw-surface,#f5f7fa));color:var(--iw-footer-text,var(--iw-text,#17212b));padding-block:var(--iw-footer-padding,48px)}
.iw-site .iw-footer a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:inherit}
/* 2026-10-07 spec 112 (queued F3): footer logo contrast option for logo images in footer widgets. */
.iw-site.iw-footer-logo-dark .iw-footer img.custom-logo,.iw-site.iw-footer-logo-dark .iw-footer img[src*=logo i],.iw-site.iw-footer-logo-dark .iw-footer img[alt*=logo i],.iw-site.iw-footer-logo-dark .iw-footer img[class*=logo i]{filter:brightness(0)}
.iw-site.iw-footer-logo-light .iw-footer img.custom-logo,.iw-site.iw-footer-logo-light .iw-footer img[src*=logo i],.iw-site.iw-footer-logo-light .iw-footer img[alt*=logo i],.iw-site.iw-footer-logo-light .iw-footer img[class*=logo i]{filter:brightness(0) invert(1)}
.iw-site .iw-footer-widgets{display:grid;grid-template-columns:repeat(var(--iw-footer-columns,3),minmax(0,1fr));gap:var(--iw-space-medium,24px)}
/* 2026-10-07 spec 112: content and sidebar layout for ordinary pages, posts and archives. */
.iw-site .iw-layout.iw-has-sidebar{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,300px);gap:var(--iw-space-large,48px);max-width:var(--iw-container,1200px);margin-inline:auto;padding-inline:var(--iw-gutter,24px)}
.iw-site.iw-sidebar-left .iw-layout.iw-has-sidebar{grid-template-columns:minmax(220px,300px) minmax(0,1fr)}.iw-site.iw-sidebar-left .iw-layout.iw-has-sidebar .iw-sidebar{order:-1}
.iw-site .iw-layout.iw-has-sidebar .iw-content{max-width:none;padding-inline:0}
.iw-site .iw-sidebar{padding-block:var(--iw-space-large,48px)}
.iw-site .iw-builder-title{padding-block:var(--iw-space-medium,24px) 0}
.iw-site .iw-widget{margin-bottom:1.5rem;overflow-wrap:anywhere}
.iw-site .iw-widget-title{font-size:1.25rem}
.iw-site .iw-copyright{font-size:var(--iw-t-footer-bar-size,.875rem);margin-bottom:0} /* 2026-10-30 TT-2: element token, fallback = the former value */
/* 2026-10-10 spec 133 (T7): the bottom bar (footer menu + default line or the "Barre du bas" widgets) is centred. */
.iw-site .iw-footer-bar{text-align:center}
.iw-site .iw-footer-bar .iw-footer-menu{justify-content:center}
.iw-site .iw-footer-bar .iw-widget{margin-bottom:0;font-size:var(--iw-t-footer-bar-size,.875rem)} /* 2026-10-30 TT-2: element token, fallback = the former value */
.iw-site .iw-footer-bar .iw-widget+.iw-widget{margin-top:.25rem}
.iw-site .iw-footer-bar .iw-widget p{margin:0}
.iw-site .iw-footer-bar-widgets{margin-top:1em}
.iw-site .iw-comments{padding-block:var(--iw-space-large,48px)}
.iw-site .comment-list{padding-left:1.5rem}
.iw-site .comment-form label{display:block}
.iw-site .iw-commerce{padding-block:var(--iw-space-large,48px)}
/* 2026-10-12 SPEC-177 (T2, from the 2026-10-12 outside package): the product page like on GeneratePress. Woo and Core own the product
   data, forms and hooks; the theme only lays out div.product: gallery left / summary right, 60 / 40 after the gap, full-width rows after
   (tabs, related, upsells), stacked at 768 px. Core's slider (div.iwc-gallery, inserted before Woo's .images, which it hides) or Woo's
   own gallery takes column 1. #content.iw-commerce (Woo's main in this theme) outranks Woo's ".woocommerce #content div.product
   div.images / div.summary {width:48%}". min-width:0 lets Swiper measure its grid cell; no Swiper width / flex-basis rule here
   (gallery.css hard rule). The shop loop grid (ul.products) is not part of this (SPEC-168, later). */
.iw-site.single-product .iw-commerce>div.product{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);column-gap:var(--iw-space-large,48px);row-gap:var(--iw-space-medium,24px);align-items:start}
.iw-site.single-product .iw-commerce>div.product::before,.iw-site.single-product .iw-commerce>div.product::after{display:none}
.iw-site.single-product .iw-commerce>div.product>*{grid-column:1/-1;min-width:0}
.iw-site.single-product #content.iw-commerce>div.product>:is(.images,.woocommerce-product-gallery,.iwc-gallery){grid-column:1;grid-row:1;width:100%;max-width:none;float:none;clear:none;margin:0}
.iw-site.single-product #content.iw-commerce>div.product>.summary{grid-column:2;grid-row:1;width:100%;float:none;clear:none;margin:0;min-width:0}
.iw-site.single-product #content.iw-commerce>div.product:not(:has(>:is(.images,.woocommerce-product-gallery,.iwc-gallery)))>.summary{grid-column:1/-1;grid-row:auto}
.iw-site.single-product .iw-commerce>div.product>.summary>:first-child{margin-top:0}
.iw-site.single-product .iw-commerce>div.product .product_title{margin-bottom:var(--iw-space-small,12px)}
.iw-site.single-product .iw-commerce>div.product .summary :is(p.price,span.price){color:var(--iw-text,#17212b);font-size:var(--iw-h3-size,1.5rem);font-weight:var(--iw-heading-weight,700)}
.iw-site.single-product .iw-commerce>div.product .summary .woocommerce-product-details__short-description{margin-block:var(--iw-space-medium,24px)}
.iw-site.single-product .iw-commerce>div.product .summary table.variations{display:table;width:100%;border-collapse:collapse;margin-bottom:var(--iw-space-small,12px)}
.iw-site.single-product .iw-commerce>div.product .summary table.variations :is(th,td){padding:0 0 var(--iw-space-small,12px);vertical-align:top;border:0}
.iw-site.single-product .iw-commerce>div.product .summary table.variations th{padding-right:var(--iw-space-small,12px);text-align:start}
.iw-site.single-product .iw-commerce>div.product .summary table.variations select{width:100%;max-width:100%}
.iw-site.single-product .iw-commerce>div.product .summary .qty{width:5.5em;max-width:100%}
.iw-site.single-product .iw-commerce>div.product .summary .product_meta{padding-top:var(--iw-space-medium,24px);border-top:1px solid var(--iw-border,#e2e8f0);font-size:var(--iw-font-base,1rem);color:var(--iw-text-muted,#526274)}
.iw-site.single-product .iw-commerce>div.product .summary .product_meta>span{display:block}
.iw-site.single-product .iw-commerce>div.product>.woocommerce-tabs{margin-top:var(--iw-space-medium,24px);min-width:0}
@media(max-width:1024px){.iw-site.single-product .iw-commerce>div.product{column-gap:var(--iw-space-medium,24px)}}
@media(max-width:768px){.iw-site.single-product .iw-commerce>div.product{grid-template-columns:minmax(0,1fr)}.iw-site.single-product #content.iw-commerce>div.product>:is(.images,.woocommerce-product-gallery,.iwc-gallery,.summary){grid-column:1;grid-row:auto}}
/* 2026-10-12 SPEC-177 (T3): cart, checkout and account have room for their native columns (no 800 px article width). */
.iw-site:is(.woocommerce-cart,.woocommerce-checkout,.woocommerce-account) .iw-content{max-width:var(--iw-container,1200px)}
/* 2026-10-12 SPEC-177 (T4): the stepped checkout (Core Checkout Suite, body.iwc-checkout-steps) shows no big page title, like on
   GeneratePress (Core's checkout.css hides only GP / WordPress title selectors); the H1 stays for screen readers. */
.iw-site.iwc-checkout-steps .iw-entry-header{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(min-width:768px){.iw-site:not(.iw-nav-collapsed) .iw-navigation .iw-menu>li>.sub-menu{position:absolute;left:0;top:100%;z-index:101;box-shadow:0 4px 12px #0002}.iw-site:not(.iw-nav-collapsed) .iw-navigation.iw-js .menu-item-has-children:hover>.sub-menu,.iw-site:not(.iw-nav-collapsed) .iw-navigation.iw-js .menu-item-has-children:focus-within>.sub-menu{display:block}.iw-site.iw-submenu-chevron:not(.iw-nav-collapsed) .iw-navigation.iw-js .menu-item-has-children:is(:hover,:focus-within)>.iw-submenu-toggle .iw-submenu-icon{transform:translateY(20%) rotate(-135deg)}}
@media(max-width:1024px){.iw-site.iw-footer-cols-3 .iw-footer-widgets,.iw-site.iw-footer-cols-4 .iw-footer-widgets,.iw-site.iw-footer-cols-5 .iw-footer-widgets,.iw-site.iw-footer-cols-6 .iw-footer-widgets{grid-template-columns:repeat(2,minmax(0,1fr))}.iw-site .iw-layout.iw-has-sidebar,.iw-site.iw-sidebar-left .iw-layout.iw-has-sidebar{grid-template-columns:1fr}.iw-site.iw-sidebar-left .iw-layout.iw-has-sidebar .iw-sidebar{order:0}}
/* 2026-10-07 spec 114: one footer column on phones whatever the column count (the 1024 px rule for 3+ columns is more specific
   than a plain phone rule), and the left sidebar stacks on tablets / phones like the right one (its desktop grid was more specific). */
@media(max-width:767px){.iw-site[class*=iw-footer-cols-] .iw-footer-widgets{grid-template-columns:1fr}}
/* 2026-10-07 spec 112 (T-6): collapsed navigation (JS adds iw-nav-collapsed below the chosen breakpoint: mobile 767, tablet 1024). */
.iw-site.iw-nav-collapsed .iw-navigation{width:100%;order:4;margin-left:0}
.iw-site.iw-nav-collapsed .iw-menu{display:block}
.iw-site.iw-nav-collapsed .iw-menu>li{margin-block:.25rem;justify-content:space-between;border-bottom:1px solid var(--iw-border,#e2e8f0)}
.iw-site.iw-nav-collapsed .iw-menu>li>a{flex:1 1 0%;min-width:0;overflow-wrap:break-word} /* 2026-10-11 repair round (1.6.4): a long label wraps beside its chevron instead of pushing it onto its own row */
.iw-site.iw-nav-collapsed .iw-navigation .sub-menu{position:static;width:100%;border:0;box-shadow:none;padding:0 0 .5rem 1rem;min-width:0}
.iw-site.iw-nav-collapsed .iw-menu-toggle{margin-left:auto}
.iw-site.iw-nav-collapsed .iw-submenu-toggle{width:2.75rem;height:2.75rem;margin-left:0} /* 2026-10-08 spec 117: a finger-sized target in the collapsed menu */
@media(max-width:767px){.iw-site .iw-header-inner{min-height:var(--iw-header-mobile-height,64px);gap:1rem}.iw-site .iw-navigation{width:100%;order:4}.iw-site .iw-menu{display:block}.iw-site .iw-menu>li{margin-block:.5rem}.iw-site .iw-footer-widgets{grid-template-columns:1fr}.iw-site .custom-logo{max-width:min(200px,100%);max-height:64px;width:var(--iw-logo-width-mobile,var(--iw-logo-width,auto))}.iw-site.iw-logo-sized-mobile .custom-logo{max-width:100%;max-height:none}.iw-site.admin-bar.iw-header-sticky .iw-header{top:46px}}
/* 2026-10-10 spec 139: theme 1.5.0, the approved mobile menu (mockup tab 5). Desktop: the menu is a flex row and the one "Bouton de fin
   de menu" is a real button after the last item. Phones: full-screen overlay in the overlay colors (default primary / background) with
   the logo copy + close button on top, big links, submenus opening in place, then at the bottom the end button, the CTA bar buttons and
   the language links; the hamburger alone at the right (icon only, label kept for screen readers); the phone logo fits the mobile header
   unless a phone width is chosen. Option "Liste sous l'en-tête" (iw-mobile-menu-dropdown) keeps the former list, end button at its end. */
.iw-site .iw-navigation{display:flex;align-items:center;gap:var(--iw-menu-gap,1rem)}
.iw-site.iw-menu-align-center .iw-navigation{justify-content:center}
.iw-site .iw-menu-top,.iw-site .iw-menu-cta,.iw-site .iw-languages--menu{display:none}
.iw-site .iw-menu-bottom{display:contents}
.iw-site .iw-navigation a.iw-menu-end-button{white-space:nowrap;text-decoration:none}
.iw-site .iw-navigation a.iw-menu-end-button:not([class*=iw-btn-]){display:inline-flex;padding:var(--iw-btn-padding,10px 22px)}
.iw-site.iw-nav-collapsed .iw-navigation{display:block}
@media(max-width:767px){.iw-site .iw-navigation{display:block}.iw-site:not(.iw-logo-mobile-width) .iw-branding .custom-logo{width:auto;max-width:min(200px,100%);max-height:calc(var(--iw-header-mobile-height,64px) - 24px)}.iw-site.iw-logo-sized:not(.iw-logo-mobile-width) .iw-branding .custom-logo{max-width:min(var(--iw-logo-width,200px),100%)}}
/* List under the header (option): the end button closes the list, full width. */
.iw-site.iw-mobile-menu-dropdown.iw-nav-collapsed .iw-menu-bottom{display:block;padding-block:.75rem}
.iw-site.iw-mobile-menu-dropdown.iw-nav-collapsed .iw-navigation a.iw-menu-end-button{display:flex;width:100%;white-space:normal}
/* Overlay (default): the header keeps the logo and the hamburger alone at the right. */
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-languages--header{display:none}
/* 2026-10-11 spec 139 (Stefan): with the icon, the menu button is the hamburger icon only, in every mobile style: no text, no background,
   no border; icon color navigation.toggle_color (--iw-menu-toggle-color); the accessible name stays (label visually hidden +
   aria-label); the focus ring shows on light and dark headers (current color + dark halo).
   2026-10-11 review repair 1.5.1: default auto, resolved by Core from the header background; without the token the icon takes the
   header text color (Core prints the token only when the icon differs from it), so it is never white on a white header. */
.iw-site.iw-toggle-bars .iw-menu-toggle .iw-menu-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.iw-site.iw-toggle-bars button.iw-menu-toggle,.iw-site.iw-toggle-bars button.iw-menu-toggle:hover,.iw-site.iw-toggle-bars button.iw-menu-toggle:focus,.iw-site.iw-toggle-bars button.iw-menu-toggle:active{justify-content:center;min-width:44px;min-height:44px;padding:10px;background:transparent;border:0;border-radius:0;box-shadow:none;outline:0;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;appearance:none;line-height:1;color:var(--iw-menu-toggle-color,var(--iw-header-text,var(--iw-text,#17212b)))}
.iw-site.iw-nav-collapsed.iw-toggle-bars button.iw-menu-toggle{margin-block:-2px} /* 44 px touch target laid out on the 40 px row of the 64 px mobile header */
.iw-site.iw-toggle-bars button.iw-menu-toggle:focus-visible{outline:3px solid currentColor;outline-offset:2px;box-shadow:0 0 0 6px rgba(0,0,0,.55)}
/* 2026-10-12 burger-align: with the icon the burger's ink sits on the header gutter (the 44 px target overhangs it by half the free
   space, (44 - 24) / 2 = 10 px), like the logo on the other side. */
.iw-site.iw-nav-collapsed.iw-toggle-bars button.iw-menu-toggle{margin-right:-10px}
body.iw-site.iw-mobile-menu-overlay.iw-menu-open{overflow:hidden}
.iw-site.iw-header-sticky.iw-menu-open .iw-header{z-index:100001}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]){position:fixed;top:var(--iw-menu-top,0px);right:0;bottom:0;left:0;z-index:100001;order:0;width:auto;margin:0;display:flex;flex-direction:column;align-items:stretch;gap:0;overflow-y:auto;overscroll-behavior:contain;padding:16px var(--iw-gutter,24px) 24px;background:var(--iw-menu-overlay-background,var(--iw-primary,#166534));color:var(--iw-menu-overlay-text,var(--iw-background,#fff))}
.iw-site.admin-bar.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]){top:var(--iw-menu-top,32px)}
@media(max-width:782px){.iw-site.admin-bar.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]){top:var(--iw-menu-top,46px)}}
@keyframes iw-menu-fade{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:no-preference){.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]){animation:iw-menu-fade .15s ease-out}}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation :focus-visible{outline:3px solid currentColor;outline-offset:2px}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-menu-top{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:calc(var(--iw-header-mobile-height,64px) - 16px);margin-bottom:1rem}
.iw-site .iw-menu-top .iw-menu-logo .custom-logo{display:block;width:auto;max-width:min(200px,60vw);max-height:calc(var(--iw-header-mobile-height,64px) - 24px)}
.iw-site .iw-menu-top .iw-menu-logo a{padding:0}
.iw-site .iw-menu-top .iw-site-title{font-size:var(--iw-t-site-title-size,1.25rem)} /* 2026-10-30 TT-2: element token, fallback = the former value */
.iw-site.iw-mobile-logo-light .iw-menu-logo img{filter:brightness(0) invert(1)}
.iw-site.iw-mobile-logo-none .iw-menu-logo{display:none}
.iw-site button.iw-menu-close{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;margin:0 -10px 0 auto;padding:0;border:0;border-radius:0;background:transparent;color:inherit;box-shadow:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;appearance:none;line-height:1}
.iw-site button.iw-menu-close:hover,.iw-site button.iw-menu-close:focus{background:transparent;color:inherit}
.iw-site .iw-menu-close-icon{position:relative;display:block;flex:0 0 auto;width:24px;height:18px}
.iw-site .iw-menu-close-icon::before,.iw-site .iw-menu-close-icon::after{content:"";position:absolute;left:0;top:50%;width:100%;height:2px;margin-top:-1px;background:currentColor;border-radius:2px;transform:rotate(45deg)}
.iw-site .iw-menu-close-icon::after{transform:rotate(-45deg)}
/* 2026-10-12 burger-align (theme 1.6.6, Stefan: "the X appearing after isnt right under it"): navigation.js gives the open overlay the
   hamburger's box (--iw-menu-close-top / -left / -width / -height, relative to the overlay; class iw-close-placed): the X button takes
   exactly that box, so the X opens where the burger was (same centre, same size), also under the admin bar, scrolled, with a sticky or
   transformed header; the overlay logo row is centred on it. When the header scrolled away (not sticky), the box is the burger's place
   in the header row with the header at the overlay top. Without the script's measurement the former flow layout stays. The two bars
   start as the burger's top and bottom bars and turn into the X in place (200 ms, not with reduced motion). A tap never leaves a focus
   ring (iw-focus-quiet, set by the script for pointer opens / closes only); the keyboard ring stays. */
.iw-site .iw-navigation.iw-close-placed .iw-menu-top{min-height:var(--iw-menu-close-height,44px);margin-top:calc(var(--iw-menu-close-top,16px) - 16px);padding-right:calc(var(--iw-menu-close-width,44px) + 8px)}
.iw-site .iw-navigation.iw-close-placed button.iw-menu-close{position:absolute;top:var(--iw-menu-close-top,16px);left:var(--iw-menu-close-left,0px);width:var(--iw-menu-close-width,44px);height:var(--iw-menu-close-height,44px);min-width:0;min-height:0;margin:0;padding:0}
@keyframes iw-x-a{from{transform:translateY(-8px) rotate(0)}to{transform:translateY(0) rotate(45deg)}}
@keyframes iw-x-b{from{transform:translateY(8px) rotate(0)}to{transform:translateY(0) rotate(-45deg)}}
@media(prefers-reduced-motion:no-preference){.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]) .iw-menu-close-icon::before{animation:iw-x-a .2s ease-out}.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]) .iw-menu-close-icon::after{animation:iw-x-b .2s ease-out}}
body.iw-site button.iw-focus-quiet.iw-focus-quiet:focus,body.iw-site button.iw-focus-quiet.iw-focus-quiet:focus-visible{outline:0!important;box-shadow:none!important}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .iw-menu{display:block}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .iw-menu>li{margin:0;display:flex;align-items:center;flex-wrap:wrap;justify-content:space-between;border-bottom:1px solid rgba(255,255,255,.2);border-bottom:1px solid color-mix(in srgb,currentColor 20%,transparent)}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .iw-menu>li>a{flex:1 1 0%;min-width:0;overflow-wrap:break-word;padding:calc(var(--iw-menu-gap,16px) / 2) 0;font-size:var(--iw-t-mobile-menu-size,var(--iw-menu-font-size,1.25rem));font-weight:var(--iw-t-mobile-menu-weight,700);line-height:var(--iw-t-mobile-menu-line-height,1.3)} /* 2026-10-11 spec 140: spacing (half the gap above and below, 8 px by default) and size */ /* 2026-10-30 TT-2: element token, fallback = the former value */
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .sub-menu{background:transparent;color:inherit;padding:0 0 .5rem 1rem}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .sub-menu a{padding:.35rem 0;font-size:var(--iw-t-submenu-size,1rem)} /* 2026-10-30 TT-2: element token, fallback = the former value */
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-menu-bottom{display:grid;gap:8px;margin-top:auto;padding-top:24px}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation a.iw-menu-end-button{display:flex;width:100%;white-space:normal}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation a.iw-menu-end-button:not([class*=iw-btn-]),.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation a.iw-menu-end-button:not([class*=iw-btn-]):hover{background:var(--iw-menu-overlay-text,var(--iw-background,#fff));border-color:var(--iw-menu-overlay-text,var(--iw-background,#fff));color:var(--iw-menu-overlay-background,var(--iw-primary,#166534))}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-menu-cta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.iw-site .iw-navigation a.iw-menu-cta__btn{display:flex;align-items:center;justify-content:center;gap:.4rem;min-height:44px;padding:.55rem .5rem;border:1px solid currentColor;border-radius:var(--iw-button-radius,8px);background:transparent;color:inherit;font-weight:600;line-height:1.2;text-align:center;text-decoration:none}
.iw-site .iw-menu-cta__btn:last-child:nth-child(odd){grid-column:1/-1}
.iw-site .iw-menu-cta__btn svg{flex:0 0 auto;width:18px;height:18px;fill:currentColor}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-languages--menu{display:block;padding-top:8px;font-size:.8125rem;opacity:.8;text-align:center}
.iw-site .iw-languages--menu ul{justify-content:center;gap:0}
.iw-site .iw-languages--menu li+li::before{content:"\00b7";margin:0 .5em}
.iw-site .iw-navigation .iw-languages--menu a{display:inline;padding:.25rem}
/* Core Buttons blocks: Core's performance cleanup removes WordPress's global styles, which carry the layout base rule
   (.is-layout-flex{display:flex}); without it a justified group is a block box and sits at the left on desktop. :where keeps one
   class of specificity, so the spec 133 phone stacking (same specificity, later in this file) still wins on phones. */
.iw-site :where(.wp-block-buttons){display:flex;flex-wrap:wrap;align-items:center;gap:.5em}
.iw-site :where(.wp-block-buttons.is-content-justification-left){justify-content:flex-start}
.iw-site :where(.wp-block-buttons.is-content-justification-center){justify-content:center}
.iw-site :where(.wp-block-buttons.is-content-justification-right){justify-content:flex-end}
.iw-site :where(.wp-block-buttons.is-content-justification-space-between){justify-content:space-between}
.iw-site :where(.wp-block-buttons.is-vertical){flex-direction:column;align-items:flex-start}
.iw-site :where(.wp-block-buttons.is-vertical.is-content-justification-center){align-items:center}
.iw-site :where(.wp-block-buttons.is-vertical.is-content-justification-right){align-items:flex-end}
/* 2026-10-10 spec 133 (T1): on phones, several buttons side by side in one text block (a paragraph, a div, a list item, a
   WordPress buttons group) stack with 20 px between them, at their natural width, left aligned, centred or right aligned like
   the paragraph. Parent-based (no fight with the button presets); :where keeps the specificity at one class so the Builder hero /
   CTA alignment rules win. Browsers without :has() keep the previous layout. */
@media(max-width:767px){
.iw-site :where(p,div,li):where(:has(> :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button) ~ :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button))){display:flex;flex-direction:column;align-items:flex-start;gap:20px}
.iw-site :where(p,div,li):where(:has(> :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button) ~ :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button))):is([style*="text-align:center"],[style*="text-align: center"],.has-text-align-center,.wp-block-buttons.is-content-justification-center),.iw-site :is([style*="text-align:center"],[style*="text-align: center"],.has-text-align-center)>:where(p,div,li):where(:has(> :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button) ~ :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button))):not([style*="text-align:left"],[style*="text-align: left"],[style*="text-align:right"],[style*="text-align: right"],.has-text-align-left,.has-text-align-right,.is-content-justification-left,.is-content-justification-right){align-items:center}
.iw-site :where(p,div,li):where(:has(> :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button) ~ :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button))):is([style*="text-align:right"],[style*="text-align: right"],.has-text-align-right,.wp-block-buttons.is-content-justification-right),.iw-site :is([style*="text-align:right"],[style*="text-align: right"],.has-text-align-right)>:where(p,div,li):where(:has(> :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button) ~ :is(a.button,a.iwb-btn,[class*="iw-btn-"],.wp-block-button))):not([style*="text-align:left"],[style*="text-align: left"],[style*="text-align:center"],[style*="text-align: center"],.has-text-align-left,.has-text-align-center,.is-content-justification-left,.is-content-justification-center){align-items:flex-end}
}
/* 2026-10-11 spec 140: menu arrangement (Personnaliser > Menus (disposition)). Every token is printed by Core only when it differs from
   its default, and every fallback below is the former value, so an unchanged design renders exactly as before. Desktop menu: gap,
   top-level link size, height (only with body.iw-menu-height-set), uppercase, hover / current page colors (links only, never buttons).
   The mobile overlay keeps its own colors (link color = overlay text) and uses the spacing, size and uppercase. */
.iw-site .iw-menu{gap:var(--iw-menu-gap,1rem)}
.iw-site .iw-navigation .iw-menu>li>a{font-size:var(--iw-menu-font-size,inherit)}
.iw-site.iw-menu-height-set:not(.iw-nav-collapsed) .iw-navigation .iw-menu>li>a{min-height:var(--iw-menu-item-height,auto);display:inline-flex;align-items:center}
.iw-site.iw-menu-uppercase .iw-navigation .iw-menu a{text-transform:uppercase;letter-spacing:.04em}
.iw-site .iw-navigation .iw-menu :is(.current-menu-item>a,a[aria-current]){color:var(--iw-menu-current,inherit)}
.iw-site .iw-navigation .iw-menu a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])):is(:hover,:focus-visible){color:var(--iw-menu-hover,inherit)}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .iw-menu a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:inherit} /* 2026-10-11 spec 140 review F4 (1.6.2): button classes keep their button colour, like the header rule */
/* Content blocks in the menu bar (widget areas on the iwt_menu_start / iwt_menu_end hooks): desktop = flex items of the menu row,
   widgets inline; phones = full width, the start block above the links, the end block below them. The mobile_menu_bottom hook output
   shows only in the mobile menu. */
.iw-site .iw-menu-area{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem 1rem}
.iw-site:not(.iw-nav-collapsed) .iw-menu-area{flex:0 0 auto;max-width:100%} /* 2026-10-11 spec 140 dev repair (1.6.1): a phone number or a short text never breaks into two lines next to the menu; the menu list wraps instead */
.iw-site .iw-menu-area .iw-widget{margin:0}
.iw-site .iw-menu-area .iw-widget-title{font-size:inherit;margin:0}
.iw-site .iw-menu-area :where(p){margin:0}
/* 2026-10-11 spec 140 review F1 (1.6.2): a button widget or block in a menu-bar block (or a content block placed on a menu hook) keeps
   the button padding; the menu link padding (.iw-navigation a, .5rem) won before. Button presets (iw-btn-*) keep their own padding. */
.iw-site .iw-navigation :is(.iw-menu-area,.iw-theme-slot) :is(a.button,.wp-block-button__link,.wp-element-button,a.iwb-btn):where(:not([class*=iw-btn-])){padding:var(--iw-btn-padding,10px 22px)}
.iw-site.iw-nav-collapsed .iw-menu-area{width:100%;padding-block:.5rem}
/* 2026-10-11 spec 141 (1.6.3): Éléments (Core div.iw-theme-slot.iw-element) placed in the header row or the menu row (menu_start,
   menu_end, header_end, before / after_navigation) are items of that row with their natural width, like the "Menu" widget areas
   (Builder content is 100% wide by default and pushed the menu onto several rows); in the collapsed menu they take the full width.
   Migrated GeneratePress bindings (no iw-element class) keep their layout. */
.iw-site .iw-header-inner>.iw-element,.iw-site:not(.iw-nav-collapsed) .iw-navigation>.iw-element{flex:0 0 auto;width:auto;max-width:100%}
.iw-site.iw-nav-collapsed .iw-navigation>.iw-element{width:100%;padding-block:.5rem}
.iw-site .iw-menu-hook-bottom{display:none}
.iw-site.iw-nav-collapsed .iw-menu-hook-bottom{display:block}
@media(prefers-reduced-motion:reduce){.iw-site *{scroll-behavior:auto}}
/* 2026-10-11 SPEC-144 / 145 repair round (theme 1.6.4), Stefan's mobile menu screenshot: the submenu chevron keeps its size on the row of
   its label (the label takes the rest and wraps, flex-basis 0 + min-width 0 above); inside the open overlay the current item is not
   underlined (the desktop underline read as a link underline under a big title), it carries a short bar in the gutter instead, in the
   current colour; the "always underline menu links" option and the hover underline still apply. The containing-block fix is in
   navigation.js (ancestors of the open overlay never keep transform / filter / backdrop-filter / contain while it is open). */
.iw-site.iw-nav-collapsed .iw-menu li>.iw-submenu-toggle{flex:0 0 auto}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed:not(.iw-nav-links-always) .iw-navigation .iw-menu :is(.current-menu-item>a,a[aria-current]):not(:hover,:focus-visible){text-decoration:none}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .iw-menu :is(.current-menu-item>a,a[aria-current]){position:relative}
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation .iw-menu :is(.current-menu-item>a,a[aria-current])::before{content:"";position:absolute;left:-12px;top:50%;width:4px;height:1.1em;margin-top:-.55em;border-radius:2px;background:currentColor}
/* 2026-10-11 SPEC-144 / 145 final repair (theme 1.6.5): the current-item bar sits 12 px left of the link, so the open overlay keeps at
   least 16 px of left padding (a site gutter under 12 px would clip the bar). */
.iw-site.iw-mobile-menu-overlay.iw-nav-collapsed .iw-navigation:not([hidden]){padding-left:max(16px,var(--iw-gutter,24px))}
/* 2026-10-13 QF-front (theme 1.7.1, UX fix plan 2026-10-12 QF-2).
   F-01: the header tagline is hidden below 1025 px (it took a full row: the burger wrapped under the logo, 166 px header at 390), and on
   phones the overlay header keeps the branding and the burger on ONE row (the branding shrinks, never the burger). The list mode
   (iw-mobile-menu-dropdown) and the centred / stacked header layouts keep wrapping (their menu or branding needs its own row).
   F-17: the collapsed phone header is drawn by CSS from the first paint (no reflow when navigation.js adds iw-nav-collapsed): at the
   phone breakpoint, with scripting on, the menu waits for the script hidden, the burger shows in its final place. Without scripting
   the menu stays visible (progressive enhancement); the tablet breakpoint keeps the script class only. The burger-align geometry
   (theme 1.6.6) is the same rule values. */
@media(max-width:1024px){.iw-site .iw-header .iw-tagline{display:none}}
@media(max-width:767px){
.iw-site.iw-mobile-menu-overlay:not(.iw-header-centered):not(.iw-header-stacked) .iw-header-inner{flex-wrap:nowrap}
.iw-site.iw-mobile-menu-overlay:not(.iw-header-centered):not(.iw-header-stacked) .iw-branding{flex:0 1 auto;min-width:0}
.iw-site.iw-mobile-menu-overlay:not(.iw-header-centered):not(.iw-header-stacked) .iw-header-inner>.iw-menu-toggle{flex:0 0 auto}
}
@media(max-width:767px) and (scripting:enabled){
.iw-site .iw-navigation:not(.iw-js){display:none}
.iw-site .iw-header .iw-menu-toggle[hidden]{display:inline-flex!important}
.iw-site .iw-menu-toggle{margin-left:auto}
.iw-site.iw-toggle-bars button.iw-menu-toggle{margin-block:-2px;margin-right:-10px}
.iw-site.iw-mobile-menu-overlay .iw-languages--header{display:none}
}
/* F-20: the "Lire la suite" link of a search / archive summary is a 44 px target. */
.iw-site .iw-read-more{display:inline-flex;align-items:center;min-height:44px}
/* F-19: the 404 buttons (home, contact) side by side, 12 px apart; phones stack them (spec 133 rule). */
.iw-site .iw-404-actions{display:flex;flex-wrap:wrap;gap:12px;margin-block:1.5em}
.iw-site .iw-404-actions a.button.iw-button-outline{background:transparent;color:var(--iw-button-background,var(--iw-primary,#166534));box-shadow:inset 0 0 0 2px currentColor;border-color:transparent}
.iw-site .iw-404-actions a.button.iw-button-outline:hover{background:var(--iw-button-background,var(--iw-primary,#166534));color:var(--iw-button-text,var(--iw-background,#fff))}
/* CB-32 (part): the search button label never breaks mid-word ("Searc / h" in a narrow sidebar); the field shrinks instead. */
.iw-site .iw-search-form button{white-space:nowrap;flex:0 0 auto}
/* F-26 (part) / F-34 (part): footer widget lists without bullets, links underlined on hover only; 44 px rows on phones. */
.iw-site .iw-footer-widgets ul{list-style:none;padding-left:0}
.iw-site .iw-footer-widgets li>a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){text-decoration:none}
.iw-site .iw-footer-widgets li>a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])):is(:hover,:focus-visible){text-decoration:underline}
@media(max-width:767px){.iw-site .iw-footer-widgets li>a,.iw-site .iw-footer-bar .iw-footer-menu a{display:inline-flex;align-items:center;min-height:44px}}
/* SPEC-177 review: the cart coupon field is wide enough for a code (Woo's 80 px width). */
.iw-site.woocommerce-cart table.cart td.actions .coupon .input-text{width:auto;min-width:9em}
/* F-24: two buttons side by side in a text block (paragraph / list item) were 4 px apart (the space between them); from 768 px
   the second one keeps 10 px more (about 14 px in all). Phones keep the spec 133 stack (20 px gap); flex button groups (Builder hero /
   CTA, WordPress buttons) keep their own gap. */
@media(min-width:768px){.iw-site :where(p,li)>:is(a.button,a.iwb-btn,a[class*="iw-btn-"])+:is(a.button,a.iwb-btn,a[class*="iw-btn-"]){margin-inline-start:10px}}
/* 2026-10-14 shop cards (Stefan): product lists (ul.products: shop, category, related / upsells, [products], Builder grids) are an
   even grid; each item is a column whose product link grows, so the purchase forms (Core Quick Buy cards) and Woo's buttons of a row
   line up at the bottom. Woo's float widths are neutralised (0,5,2 over Woo's 0,4,2 li rules). Columns from Woo's columns-N class:
   at most 3 under 1025 px, 2 under 769 px, 1 under 481 px. */
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class]{display:grid;grid-template-columns:repeat(var(--iw-loop-cols,4),minmax(0,1fr));gap:var(--iw-space-medium,24px);margin:0 0 var(--iw-space-large,48px);padding:0;list-style:none}
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class]::before,:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class]::after{display:none}
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class] li.product{width:auto;float:none;clear:none;margin:0;padding:0;display:flex;flex-direction:column;min-width:0}
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class] li.product>a.woocommerce-LoopProduct-link{flex:1 1 auto}
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class] li.product>:is(a.button,.stock){align-self:flex-start}
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class] li.product img{width:100%;height:auto}
.iw-site ul.products.columns-1{--iw-loop-cols:1}.iw-site ul.products.columns-2{--iw-loop-cols:2}.iw-site ul.products.columns-3{--iw-loop-cols:3}.iw-site ul.products.columns-5{--iw-loop-cols:5}.iw-site ul.products.columns-6{--iw-loop-cols:6}
@media(max-width:1024px){.iw-site ul.products:is(.columns-4,.columns-5,.columns-6){--iw-loop-cols:3}}
@media(max-width:768px){.iw-site ul.products:is(.columns-3,.columns-4,.columns-5,.columns-6){--iw-loop-cols:2}}
@media(max-width:480px){.iw-site ul.products[class]{--iw-loop-cols:1}}
/* 2026-10-14 shop cards step 3: product titles in lists keep Woo's list size inside Builder content (Builder / content heading sizes
   are for page headings, not for a product name in a card). */
:is(.iw-site.woocommerce,.iw-site.woocommerce-page,.iw-site .woocommerce) ul.products[class] li.product :is(h2,h3).woocommerce-loop-product__title{font-size:var(--iw-loop-title-size,1.05rem);line-height:1.35;margin:.6em 0 .25em;padding:0}
/* 2026-10-30 THEME-TYPO-ELEMENTS TT-2 (spec THEME-TYPO-ELEMENTS, design note D8 / D9): typography per page element. Core TT-1 prints
   --iw-t-<id>-<prop> (family, weight, transform, style, size, line-height, letter-spacing; tablet / mobile sizes and line heights in its
   media blocks) ONLY for a property the operator set; the theme never defines one (no :root default). Two kinds of rules:
   - a property that today's rule DECLARES on the element: a chain ending in today's literal / token, in today's rule (edited in place
     above) or here at today's specificity, so an unset element renders exactly as before;
   - a property that no rule declares today (it inherits): the token with no fallback (or a chain to the wider h1 / h2 token only), in a
     :where() rule of zero specificity. Unset, the declaration is invalid at computed-value time and the property inherits exactly as
     before (an uppercase / letter-spaced Builder row keeps its look), and every other author rule (Builder, plugins, Additional CSS)
     still wins over it. Set, it applies wherever no more specific rule declares that property.
   Real form buttons (<button>, input submit) are the one exception: the browser declares text-transform none / letter-spacing normal
   on them today, so their chain ends in those values. Excluded properties stay on their fields: heading sizes (--iw-hN-size), button
   font / weight (--iw-font-button / --iw-button-weight), main menu desktop size (--iw-menu-font-size) and case (iw-menu-uppercase).
   primary_menu never reaches the collapsed menu (mobile_menu does; navigation.js sets iw-nav-collapsed, so without script the desktop
   rules apply at every width). Proofs: illumiweb/checks/typo-elements-theme.php and tests-illumiweb
   checks/typo-elements-theme-computed.cjs (computed type of every element identical to theme 1.11.1 without element tokens). */
:where(.iw-site) .iw-entry-header h1{font-size:var(--iw-t-single-title-size,var(--iw-h1-size,clamp(2rem,5vw,3rem)));font-family:var(--iw-t-single-title-family,var(--iw-t-h1-family,var(--iw-font-heading,system-ui,sans-serif)));font-weight:var(--iw-t-single-title-weight,var(--iw-t-h1-weight,var(--iw-heading-weight,700)));line-height:var(--iw-t-single-title-line-height,var(--iw-t-h1-line-height,1.2));letter-spacing:var(--iw-t-single-title-letter-spacing,var(--iw-t-h1-letter-spacing,var(--iw-letter-spacing,0)))}
:where(.iw-site) .iw-summary>:where(header)>h2{font-size:var(--iw-t-archive-title-size,var(--iw-h2-size,2rem));font-family:var(--iw-t-archive-title-family,var(--iw-t-h2-family,var(--iw-font-heading,system-ui,sans-serif)));font-weight:var(--iw-t-archive-title-weight,var(--iw-t-h2-weight,var(--iw-heading-weight,700)));line-height:var(--iw-t-archive-title-line-height,var(--iw-t-h2-line-height,1.2));letter-spacing:var(--iw-t-archive-title-letter-spacing,var(--iw-t-h2-letter-spacing,var(--iw-letter-spacing,0)))}
:where(.iw-site) .iw-sidebar .iw-widget-title{font-size:var(--iw-t-widget-titles-size,1.25rem)}:where(.iw-site .iw-sidebar) h2.iw-widget-title{font-family:var(--iw-t-widget-titles-family,var(--iw-t-h2-family,var(--iw-font-heading,system-ui,sans-serif)));font-weight:var(--iw-t-widget-titles-weight,var(--iw-t-h2-weight,var(--iw-heading-weight,700)));line-height:var(--iw-t-widget-titles-line-height,var(--iw-t-h2-line-height,1.2));letter-spacing:var(--iw-t-widget-titles-letter-spacing,var(--iw-t-h2-letter-spacing,var(--iw-letter-spacing,0)))}
:where(.iw-site) .iw-footer-widgets .iw-widget-title{font-size:var(--iw-t-footer-widget-titles-size,1.25rem)}:where(.iw-site .iw-footer-widgets) h2.iw-widget-title{font-family:var(--iw-t-footer-widget-titles-family,var(--iw-t-h2-family,var(--iw-font-heading,system-ui,sans-serif)));font-weight:var(--iw-t-footer-widget-titles-weight,var(--iw-t-h2-weight,var(--iw-heading-weight,700)));line-height:var(--iw-t-footer-widget-titles-line-height,var(--iw-t-h2-line-height,1.2));letter-spacing:var(--iw-t-footer-widget-titles-letter-spacing,var(--iw-t-h2-letter-spacing,var(--iw-letter-spacing,0)))}
/* Menus: top level not collapsed = primary_menu (its token exists only at tablet / mobile widths, desktop = navigation.font_size);
   collapsed = mobile_menu (the overlay rule above, 0,5,2, keeps its own chain over this one). Every rule here has the specificity of
   the rule it refines (scoping parts in :where()), so a stylesheet that wins over the theme today still wins. D9: the uppercase class rule above stays
   for every menu link; these three read the element tokens, so a set submenu / mobile_menu case or a set letter spacing wins. */
.iw-site:where(:not(.iw-nav-collapsed)) .iw-navigation .iw-menu>li>a{font-size:var(--iw-t-primary-menu-size,var(--iw-menu-font-size,inherit))}
.iw-site:where(.iw-nav-collapsed) .iw-navigation .iw-menu>li>a{font-size:var(--iw-t-mobile-menu-size,var(--iw-menu-font-size,inherit))}
.iw-site.iw-menu-uppercase:where(:not(.iw-nav-collapsed)) .iw-navigation .iw-menu>:where(li)>a{text-transform:uppercase;letter-spacing:var(--iw-t-primary-menu-letter-spacing,.04em)}
.iw-site.iw-menu-uppercase .iw-navigation .iw-menu :where(.sub-menu) a{text-transform:var(--iw-t-submenu-transform,uppercase);letter-spacing:var(--iw-t-submenu-letter-spacing,.04em)}
.iw-site.iw-menu-uppercase:where(.iw-nav-collapsed) .iw-navigation .iw-menu>:where(li)>a{text-transform:var(--iw-t-mobile-menu-transform,uppercase);letter-spacing:var(--iw-t-mobile-menu-letter-spacing,.04em)}
/* Zero specificity, no fallback: properties that no rule declares on these elements today. */
:where(.iw-site h1){text-transform:var(--iw-t-h1-transform);font-style:var(--iw-t-h1-style)}:where(.iw-site h2){text-transform:var(--iw-t-h2-transform);font-style:var(--iw-t-h2-style)}:where(.iw-site h3){text-transform:var(--iw-t-h3-transform);font-style:var(--iw-t-h3-style)}:where(.iw-site h4){text-transform:var(--iw-t-h4-transform);font-style:var(--iw-t-h4-style)}:where(.iw-site h5){text-transform:var(--iw-t-h5-transform);font-style:var(--iw-t-h5-style)}:where(.iw-site h6){text-transform:var(--iw-t-h6-transform);font-style:var(--iw-t-h6-style)}
:where(.iw-site .iw-entry-header h1){text-transform:var(--iw-t-single-title-transform,var(--iw-t-h1-transform));font-style:var(--iw-t-single-title-style,var(--iw-t-h1-style))}:where(.iw-site .iw-summary>header>h2){text-transform:var(--iw-t-archive-title-transform,var(--iw-t-h2-transform));font-style:var(--iw-t-archive-title-style,var(--iw-t-h2-style))}
:where(.iw-site .iw-sidebar h2.iw-widget-title){text-transform:var(--iw-t-widget-titles-transform,var(--iw-t-h2-transform));font-style:var(--iw-t-widget-titles-style,var(--iw-t-h2-style))}:where(.iw-site .iw-footer-widgets h2.iw-widget-title){text-transform:var(--iw-t-footer-widget-titles-transform,var(--iw-t-h2-transform));font-style:var(--iw-t-footer-widget-titles-style,var(--iw-t-h2-style))}
:where(.iw-site .iw-site-title){font-family:var(--iw-t-site-title-family);line-height:var(--iw-t-site-title-line-height);letter-spacing:var(--iw-t-site-title-letter-spacing);text-transform:var(--iw-t-site-title-transform);font-style:var(--iw-t-site-title-style)}
:where(.iw-site .iw-tagline){font-family:var(--iw-t-site-description-family);font-weight:var(--iw-t-site-description-weight);line-height:var(--iw-t-site-description-line-height);letter-spacing:var(--iw-t-site-description-letter-spacing);text-transform:var(--iw-t-site-description-transform);font-style:var(--iw-t-site-description-style)}
:where(.iw-site .iw-top-bar){font-family:var(--iw-t-top-bar-family);font-weight:var(--iw-t-top-bar-weight);line-height:var(--iw-t-top-bar-line-height);letter-spacing:var(--iw-t-top-bar-letter-spacing);text-transform:var(--iw-t-top-bar-transform);font-style:var(--iw-t-top-bar-style)}
:where(.iw-site:not(.iw-nav-collapsed) .iw-navigation .iw-menu>li>a){font-family:var(--iw-t-primary-menu-family);font-weight:var(--iw-t-primary-menu-weight);line-height:var(--iw-t-primary-menu-line-height);letter-spacing:var(--iw-t-primary-menu-letter-spacing);font-style:var(--iw-t-primary-menu-style)}
:where(.iw-site .iw-navigation .sub-menu a){font-family:var(--iw-t-submenu-family);font-weight:var(--iw-t-submenu-weight);font-size:var(--iw-t-submenu-size);line-height:var(--iw-t-submenu-line-height);letter-spacing:var(--iw-t-submenu-letter-spacing);text-transform:var(--iw-t-submenu-transform);font-style:var(--iw-t-submenu-style)}
:where(.iw-site.iw-nav-collapsed .iw-navigation .iw-menu>li>a){font-family:var(--iw-t-mobile-menu-family);font-weight:var(--iw-t-mobile-menu-weight);line-height:var(--iw-t-mobile-menu-line-height);letter-spacing:var(--iw-t-mobile-menu-letter-spacing);text-transform:var(--iw-t-mobile-menu-transform);font-style:var(--iw-t-mobile-menu-style)}
:where(.iw-site .iw-footer-widgets){font-family:var(--iw-t-footer-widgets-family);font-weight:var(--iw-t-footer-widgets-weight);font-size:var(--iw-t-footer-widgets-size);line-height:var(--iw-t-footer-widgets-line-height);letter-spacing:var(--iw-t-footer-widgets-letter-spacing);text-transform:var(--iw-t-footer-widgets-transform);font-style:var(--iw-t-footer-widgets-style)}
:where(.iw-site .iw-copyright,.iw-site .iw-footer-bar .iw-widget){font-family:var(--iw-t-footer-bar-family);font-weight:var(--iw-t-footer-bar-weight);line-height:var(--iw-t-footer-bar-line-height);letter-spacing:var(--iw-t-footer-bar-letter-spacing);text-transform:var(--iw-t-footer-bar-transform);font-style:var(--iw-t-footer-bar-style)}
:where(.iw-site .iw-footer-menu a){font-family:var(--iw-t-footer-menu-family);font-weight:var(--iw-t-footer-menu-weight);font-size:var(--iw-t-footer-menu-size);line-height:var(--iw-t-footer-menu-line-height);letter-spacing:var(--iw-t-footer-menu-letter-spacing);text-transform:var(--iw-t-footer-menu-transform);font-style:var(--iw-t-footer-menu-style)}
:where(.iw-site) :where(.iwb-btn,a.button,.wp-block-button__link){font-size:var(--iw-t-buttons-size);letter-spacing:var(--iw-t-buttons-letter-spacing);text-transform:var(--iw-t-buttons-transform);font-style:var(--iw-t-buttons-style)}
/* 2026-10-30 TT-2 review N1: the buttons element reaches call-to-action buttons only: input submit, .button, a <button> of type submit
   (or no type) that is not a UI control (FAQ accordion toggle, menu toggle / close, gallery / lightbox arrows, tabs, alert, front-end
   editor chrome: all type=button). The skin rule above stays exactly as before; this rule has its specificity (0,2,1 / 0,2,0) and
   comes after it; font:inherit there declares size / style inherit today, hence the inherit fallbacks. */
.iw-site input[type=submit],.iw-site .button,.iw-site button:where([type=submit],:not([type])):not(.iw-submenu-toggle,.pswp__button,[class*=iwc-],.iw-menu-toggle,.iw-menu-close,.iwb-accordion__toggle,[class*=iwbfe-],[class*=iwb-gallery__nav],[class*=iwb-lb__],[class*=iwb-tabs-nav],[class*=iwb-alert],.iwb-lp-close,.iwb-ip__x,[class*=iwb-te-]){font-size:var(--iw-t-buttons-size,inherit);font-style:var(--iw-t-buttons-style,inherit)}
:where(.iw-site) :where(input[type=submit],button.button,button:where([type=submit],:not([type])):not(.iw-submenu-toggle,.pswp__button,[class*=iwc-],.iw-menu-toggle,.iw-menu-close,.iwb-accordion__toggle,[class*=iwbfe-],[class*=iwb-gallery__nav],[class*=iwb-lb__],[class*=iwb-tabs-nav],[class*=iwb-alert],.iwb-lp-close,.iwb-ip__x,[class*=iwb-te-])){text-transform:var(--iw-t-buttons-transform,none);letter-spacing:var(--iw-t-buttons-letter-spacing,normal)}
/* 2026-10-30 WEB-3B2 (spec WEB-3 part 3B2): the visual sections of the page compiler 1.1.0 (feature cards, link cards, tiles,
   numbered steps, checklists with icons). Existing tokens only (review change 13: --iw-surface, --iw-border, --iw-button-radius,
   --iw-background, --iw-primary, --iw-space-*); no new token, no :root, no font: card and step titles are real h3 and keep the h3
   element tokens. Every selector carries one of the component classes, so a page without them renders exactly as before.
   - Grid: the Builder inner row already lays the columns out; the gap is the Builder gap variable, which the column bases subtract
     (width_to_flex), so 1/4 x4 + 1/3 x3 never wraps. 769-1023 px: a row of four becomes 2 x 2 (the basis sits on the column #id,
     hence the one !important); <= 768 px the Builder stacks every column.
   - Bands: on W the card is the surface colour with the border; on B / D a translucent --iw-background surface and the icons take
     --iw-background (contrast >= 3:1); text keeps the band colour.
   - Icons: Builder SVG masks (currentColor), 2.5rem with the box height reserved (no shift when the glyph rule arrives); the
     checklist icon is the bare <i> at the start of each li (review-web-3b1 N1).
   - Steps: CSS counter in a circle, vertical; >= 1024 px side by side when there are at most four (quantity query).
   - Motion only under prefers-reduced-motion: no-preference; print drops fills and keeps cards and steps whole. */
.iw-site .iw-grid{--iwb-gap:var(--iw-space-medium,24px);margin-block:0 var(--iw-space-medium,24px)}
.iw-site .iw-card{padding:var(--iw-space-medium,24px);background:var(--iw-surface,#f5f7fa);border:1px solid var(--iw-border,#e2e8f0);border-radius:var(--iw-button-radius,8px)}
.iw-site :is(.iw-row--brand,.iw-row--dark) .iw-card{background:color-mix(in srgb,var(--iw-background,#fff) 8%,transparent);border-color:color-mix(in srgb,var(--iw-background,#fff) 24%,transparent)}
.iw-site .iw-card h3{margin:0 0 var(--iw-space-small,12px)}
.iw-site .iw-card :is(h3,p):last-child{margin-bottom:0}
.iw-site .iw-card p{margin-top:0}
.iw-site .iw-card-icon{display:block;height:2.5rem;margin-bottom:var(--iw-space-small,12px);font-size:2.5rem;line-height:1;color:var(--iw-primary,#166534)}
.iw-site .iw-card-icon>i{display:block}
.iw-site :is(.iw-row--brand,.iw-row--dark) :is(.iw-card-icon,.iw-checklist li>i){color:var(--iw-background,#fff)}
@media (min-width:769px) and (max-width:1023px){.iw-site .iw-grid>.iw-card:first-child:nth-last-child(4),.iw-site .iw-grid>.iw-card:first-child:nth-last-child(4)~.iw-card{flex:0 0 calc(50% - var(--iwb-gap,0px)*.5)!important}}
@media (prefers-reduced-motion:no-preference){.iw-site .iw-card--link{transition:transform .15s ease-out,box-shadow .15s ease-out}.iw-site .iw-card--link:is(:hover,:focus-within){transform:translateY(-2px);box-shadow:0 6px 16px color-mix(in srgb,currentColor 14%,transparent)}}
.iw-site .iw-steps{display:flex;flex-direction:column;gap:var(--iw-space-medium,24px);margin:0 0 var(--iw-space-medium,24px);padding:0;list-style:none;counter-reset:iw-step}
.iw-site .iw-steps>li{position:relative;min-height:2.5rem;padding:.4rem 0 0 calc(2.5rem + var(--iw-space-small,12px));counter-increment:iw-step}
.iw-site .iw-steps>li::before{content:counter(iw-step);position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:50%;background:var(--iw-primary,#166534);color:var(--iw-background,#fff);font-weight:var(--iw-heading-weight,700);line-height:1}
.iw-site :is(.iw-row--brand,.iw-row--dark) .iw-steps>li::before{background:var(--iw-background,#fff);color:var(--iw-primary,#166534)}
.iw-site .iw-steps h3{margin:0 0 var(--iw-space-small,12px)}
.iw-site .iw-steps>li>:last-child{margin-bottom:0}
@media (min-width:1024px){.iw-site .iw-steps{flex-flow:row wrap}.iw-site .iw-steps>li{flex:0 0 100%}.iw-site .iw-steps>li:first-child:nth-last-child(-n+4),.iw-site .iw-steps>li:first-child:nth-last-child(-n+4)~li{flex:1 1 0;min-width:0;padding:calc(2.5rem + var(--iw-space-small,12px)) 0 0}}
.iw-site .iw-checklist{display:grid;gap:var(--iw-space-small,12px) var(--iw-space-medium,24px);margin:0 0 var(--iw-space-medium,24px);padding:0;list-style:none}
@media (min-width:768px){.iw-site .iw-checklist{grid-template-columns:repeat(2,minmax(0,1fr))}}
.iw-site .iw-checklist>li{position:relative;padding-left:1.75em}
.iw-site .iw-checklist li>i{position:absolute;top:.3em;left:0;color:var(--iw-primary,#166534)}
@media print{.iw-site .iw-card,.iw-site :is(.iw-row--brand,.iw-row--dark) .iw-card{background:none;border-color:currentColor;box-shadow:none;break-inside:avoid}.iw-site .iw-steps>li{break-inside:avoid}.iw-site .iw-steps>li::before,.iw-site :is(.iw-row--brand,.iw-row--dark) .iw-steps>li::before{background:none;color:inherit;border:1px solid currentColor}.iw-site :is(.iw-card-icon,.iw-checklist li>i){-webkit-print-color-adjust:exact;print-color-adjust:exact}}
/* 2026-10-30 WEB-5D (spec WEB-5-IMAGE-ROWS part 5D): split rows of the page compiler 1.2.0 (iw-row--split: text column 2/3
   .iw-split__text, image column 1/3 .iw-split__media). Source order is always text then image, so phones (<= 768 px, the Builder
   stacks the columns) show the text first; >= 769 px iw-row--media-left puts the image on the left with row-reverse. The columns
   are centred vertically through the Builder --iwb-valign, side by side only: on a phone the stacked container's align-items is the
   horizontal axis, and centre there would shrink the image column to its content (the spec wants it at the text width), so the
   stretch default stays. Widths and gutter stay the Builder column bases and padding. No token of its own, no colour: the slot box
   (Builder WEB-5A, .iwb-slot) takes the band text colour. */
@media (min-width:769px){.iw-site .iw-row--split{--iwb-valign:center}.iw-site .iw-row--media-left>.iwb-row__container{flex-direction:row-reverse}}
.iw-site .iw-split__media .iwb-image{margin:0}
@media print{.iw-site .iw-row--split .iwb-col{break-inside:avoid}}
/* 2026-10-28 WEB-2B: the wave 1 shell on the design tokens (no value of its own; the var() fallbacks are the theme's usual ones).
   - Secondary button of the WEB-2C2 compiler output (<a class="button button-secondary">, also the phone button) had no theme style:
     --iw-secondary background with --iw-background text, hover --iw-secondary-hover (same look as the Builder secondary variant).
     Inside a brand or dark band (where Core already inverts the primary button) it is an outline in the band text colour, hover = a
     light fill of that colour, so the two buttons of a hero never look alike. A primary .button inside a band keeps
     --iw-button-text: Core's band link rule (a:not(.iwb-btn):not([class*=iw-btn-]), 0,4,1) also matched .button and made the
     inverted brand-band button white on white.
   - Band rhythm: the compiled rows (iw-row--white / brand / dark, no Builder padding) get --iw-space-large above and below; the :where
     wrappers keep the specificity at zero, so a Builder row padding (pt / pb) always wins.
   - Footer: the focus ring takes the footer text colour (a primary ring vanished on a primary footer); the bottom bar is set apart
     from the columns by a thin line of the same colour. */
.iw-site a.button.button-secondary{background:var(--iw-secondary,#64748b);border-color:var(--iw-secondary,#64748b);color:var(--iw-background,#fff)}
.iw-site a.button.button-secondary:hover{background:var(--iw-secondary-hover,#475569);border-color:var(--iw-secondary-hover,#475569);color:var(--iw-background,#fff)}
.iw-site .iwb-content :is(.iw-row--brand,.iw-row--dark) a.button:not(.button-secondary):not(.iwb-btn),.iw-site .iwb-content :is(.iw-row--brand,.iw-row--dark) a.button:not(.button-secondary):not(.iwb-btn):hover{color:var(--iw-button-text,var(--iw-background,#fff))}
.iw-site :is(.iw-row--brand,.iw-row--dark) a.button.button-secondary:not(.iwb-btn){background:transparent;border-color:currentColor;color:inherit;box-shadow:inset 0 0 0 2px currentColor}
.iw-site :is(.iw-row--brand,.iw-row--dark) a.button.button-secondary:not(.iwb-btn):hover{background:color-mix(in srgb,currentColor 16%,transparent);border-color:currentColor;color:inherit}
:where(.iw-site .iwb-content) :where(.iw-row--white,.iw-row--brand,.iw-row--dark){padding-block:var(--iw-space-large,48px)}
.iw-site .iw-footer :focus-visible{outline-color:currentColor}
.iw-site .iw-footer-widgets+.iw-footer-bar{margin-top:var(--iw-space-medium,24px);padding-top:var(--iw-space-medium,24px);border-top:1px solid color-mix(in srgb,currentColor 35%,transparent)}
/* 2026-10-31 WEB-6 (spec WEB-6-SITE-POLISH, theme side of parts 6A, 6C, 6D; Stefan DESK/35 approved 2026-10-31). Tokens only; the block
   comes last so every earlier block stays byte for byte: a rule here that repeats an earlier selector wins by order, same specificity.
   - 6A: buttons take the design radius (20 on illumiweb.com) and cards keep their own (--iw-card-radius, Core prints it; fallback chain
     = today's look). The Core form title (a <p> under this theme) one step smaller: h6 size, subheading weight. The menu copy of the CTA
     buttons and the Core form buttons that follow the site design take --iw-button-weight (fallback 600 = the former literal).
   - 6C: footer.bar = band (body class iw-footer-bar-band, footer.php prints the bar after the coloured container): a white bottom band
     (--iw-background, --iw-text, links --iw-primary); the footer bottom padding moves into the coloured part so no coloured strip shows
     under it. Footer content pattern (Stefan's client footers): outline secondary button in the footer text colour, a lead line, bold
     labels, italic trust line, logo link spaced from the text; a footer button's focus ring takes the footer text colour (the generic
     button ring, 0,3,1, is the primary colour: invisible on a primary footer). Columns stay the grid above (4 / 2 under 1024 / 1 under 768).
   - 6D: iw-prefooter-light (footer on a strong colour): the LAST Builder row of the page content, never the hero, is shown as a light
     band when it is a brand or dark band (review fix: never a row with its own Builder background, iw-row--own-bg from
     iwt_row_own_background() or an overlay / video child, nor a row whose content sets its own inline text colour: client designs
     keep their look): the band tokens back to the page roles (inherit), --iw-surface background, --iw-text, 1 px
     --iw-border top line; links, focus ring, cards, icons and step numbers back to the page look. Specificity 0,10,x beats Core's band
     rules (0,2,0 to 0,5,1) and the theme band rules (0,3,x); no !important. No band letter, word or tree changes. */
.iw-site .iw-card{border-radius:var(--iw-card-radius,var(--iw-button-radius,8px))}
.iw-site .iwc-form-wrap p.iwc-form__title{font-size:var(--iw-h6-size,1rem);font-weight:var(--iw-subheading-weight,var(--iw-heading-weight,700))}
.iw-site .iw-navigation a.iw-menu-cta__btn{font-weight:var(--iw-button-weight,600)}
.iw-site .iwc-form-wrap.iwc-form--follow-design{--iwc-btn-font-weight:var(--iw-button-weight,600)}
.iw-site.iw-footer-bar-band .iw-footer{padding-bottom:0}
.iw-site.iw-footer-bar-band .iw-footer>.iw-container{padding-bottom:var(--iw-footer-padding,48px)}
.iw-site .iw-footer-bar--band{background:var(--iw-background,#fff);color:var(--iw-text,#17212b);padding-block:var(--iw-space-small,12px)}
.iw-site .iw-footer .iw-footer-bar--band a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:var(--iw-primary,#166534)}
.iw-site .iw-footer a.button.button-secondary{background:transparent;border-color:currentColor;color:inherit;box-shadow:inset 0 0 0 2px currentColor;border-radius:var(--iw-button-radius,8px)}
.iw-site .iw-footer a.button.button-secondary:hover{background:color-mix(in srgb,currentColor 16%,transparent);border-color:currentColor;color:inherit}
.iw-site .iw-footer a.button:focus-visible{outline-color:currentColor}
.iw-site .iw-footer .iw-footer-lead{font-size:var(--iw-font-lg,1.125rem)}
.iw-site .iw-footer-widgets strong{font-weight:700}
.iw-site .iw-footer-widgets em{font-style:italic}
.iw-site .iw-footer-widgets .custom-logo-link{display:inline-block;margin-bottom:var(--iw-space-small,12px)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])){--iw-text:inherit;--iw-text-muted:inherit;--iw-button-background:inherit;--iw-button-text:inherit;--iw-button-hover:inherit;background:var(--iw-surface,#f5f7fa);color:var(--iw-text,#17212b);border-top:1px solid var(--iw-border,#e2e8f0)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])) a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])){color:var(--iw-primary,#166534)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])) a:where(:not(.iwb-btn,.button,.wp-block-button__link,.wp-element-button,[class*=iw-btn-])):hover{color:var(--iw-primary-hover,#14532d)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])) :focus-visible{outline-color:var(--iw-primary,#166534)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])) .iw-card{background:var(--iw-background,#fff);border-color:var(--iw-border,#e2e8f0)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])) :is(.iw-card-icon,.iw-checklist li>i){color:var(--iw-primary,#166534)}
.iw-site.iw-prefooter-light .iw-main .iwb-content>.iwb-row:last-child:is(.iw-row--brand,.iw-row--dark):not(.iw-row--hero,.iw-row--own-bg):not(:has(>.iwb-row__overlay,>.iwb-row__video-bg,[style^="color:"],[style*=";color:"],[style*=" color:"])) .iw-steps>li::before{background:var(--iw-primary,#166534);color:var(--iw-background,#fff)}
/* 2026-11-01 WEB-6E (design-web-6 row E30, review change 11): an in-page anchor (#soumission, #question, #formulaire, FAQ ids) lands
   under the sticky header, never hidden by it: scroll margin = header height + a small gap (admin bar and phone header covered). No
   display change (the empty spans stay inline: the FAQ accordion layout is untouched).
   2026-11-01 ANCHOR-FIX (GATE-2026-11 row E30 1280: heading at 96 px under a 227 px header): --iw-header-height is the header's MIN
   height, not its height (logo, wrapped menu, switcher make it taller). navigation.js measures what really covers the top of the
   viewport (the stuck header's bottom when the header is sticky, the fixed admin bar) and writes --iw-anchor-offset on <html>, kept
   current by a ResizeObserver; the token estimates below are only the JavaScript-off fallback. */
.iw-site .iw-anchor{scroll-margin-top:var(--iw-anchor-offset,calc(var(--iw-header-height,80px) + 16px))}
.iw-site.admin-bar .iw-anchor{scroll-margin-top:var(--iw-anchor-offset,calc(var(--iw-header-height,80px) + 48px))}
@media(max-width:767px){.iw-site .iw-anchor{scroll-margin-top:var(--iw-anchor-offset,calc(var(--iw-header-mobile-height,64px) + 16px))}.iw-site.admin-bar .iw-anchor{scroll-margin-top:var(--iw-anchor-offset,calc(var(--iw-header-mobile-height,64px) + 62px))}}
/* 2026-11-02 QF-FAQ-FOOTER (quick fix, Stefan's journal round 1 D). 1) The generic <button> skin (top of this file, 0,2,1 / hover 0,3,1)
   also painted the Builder FAQ question toggle: button fill + 1px stroke + --iw-button-radius (20px on dev) inside the 8px bordered FAQ
   item, so the item's stroke and the blue fill ran on different corners. The toggle is a UI control (TT-2 type rules), not a call to
   action: it gets the Builder's plain row back (frontend.css .iwb-accordion__toggle: no fill, no stroke, padding 16px 18px, inherited
   font and colour), same specificity, winning by order. 2) The bottom bar's 1em widget gap separates the widgets from a footer menu
   above them; without a menu the widgets (or the default copyright line) are the bar's first block and the gap only added space above
   the year / copyright line (26px above vs 8px below on dev): no top margin on the first block. */
.iw-site button.iwb-accordion__toggle{font:inherit;color:inherit;background:none;border:0;border-radius:0;padding:16px 18px}
.iw-site button.iwb-accordion__toggle:hover{background:none;color:inherit}
.iw-site .iw-footer-bar :is(.iw-footer-bar-widgets,.iw-copyright):first-child{margin-top:0}
/* 2026-11-03 WEB-7G3 (spec WEB-7K-KIT-V7-LAYOUT part 7G3, class table "Classes: one meaning each", design-web-7k section 1): the
   compiled kit b2b v7 markup (compiler 1.5.0) carries the theme component classes, whose rules (.iw-site .iw-steps>li 0,2,1 and its
   ::before 0,2,2, .iw-site .iw-card p 0,2,1) outrank the Builder WEB-7G1 rules of the new classes; this block gives those pages the
   7G1 look. New modifier classes only (every selector needs one of them), tokens only, no !important; the block comes last, every
   earlier rule (QF-FAQ-FOOTER included) byte for byte; a page without the classes renders exactly as before.
   - Steps .iw-steps.iwb-steps--lg (0,3,x; from 1024 px 0,5,x over the side-by-side quantity query 0,4,x): the number back in flow,
     centered above the step, the Builder --iwb-step-size / --iwb-step-font (4rem / 1.75rem), step title centered, step text left
     (Builder .iwb-steps>li). Band colours stay the theme's: primary circle on white, inverted on brand / dark, the 6D light
     prefooter (0,10,x) brings the page look back.
   - Cards .iw-card--action (no link on the card, one button): no hover lift (the button carries the hover); the column, its
     iw_text and the prose are flex columns so p.iwb-card-action (margin-top auto, 0,3,0 over .iw-site .iw-card p) sits at the card
     bottom and the buttons of a row line up. With iwb-cols--head-center the card icon is centered (the Builder rule centers h3,
     keeps p left; the theme icon span is not in its list).
   - Checklist .iw-checklist--icons (one icon per item): 1.25em icon on the first line, the text 2.25em in. */
.iw-site .iw-steps.iwb-steps--lg>li{min-height:0;padding:0}
.iw-site .iw-steps.iwb-steps--lg>li::before{position:static;width:var(--iwb-step-size,4rem);height:var(--iwb-step-size,4rem);margin:0 auto var(--iw-space-small,12px);font-size:var(--iwb-step-font,1.75rem)}
.iw-site .iw-steps.iwb-steps--lg>li>h3{text-align:center}
@media (min-width:1024px){.iw-site .iw-steps.iwb-steps--lg>li:first-child:nth-last-child(-n+4),.iw-site .iw-steps.iwb-steps--lg>li:first-child:nth-last-child(-n+4)~li{padding:0}}
.iw-site .iw-card.iw-card--action{display:flex;flex-direction:column}
.iw-site .iw-card.iw-card--action:hover,.iw-site .iw-card.iw-card--action:focus-within{transform:none;box-shadow:none}
.iw-site .iw-card.iw-card--action>.iwb-text,.iw-site .iw-card.iw-card--action>.iwb-text>.iw-prose{display:flex;flex:1 0 auto;flex-direction:column}
.iw-site .iw-card--action .iw-prose>.iwb-card-action{margin-top:auto}
.iw-site .iwb-cols--head-center>.iw-card .iw-card-icon{text-align:center}
.iw-site .iw-checklist.iw-checklist--icons>li{padding-left:2.25em}
.iw-site .iw-checklist.iw-checklist--icons>li>i{top:.14em;font-size:1.25em}
/* end WEB-7G3 */
/* 2026-11-04 THEME-MENU-FLYOUTS (Stefan 2026-11-04, with screenshots): submenus like GeneratePress, one-row header, cleaner burger
   levels, no submenu preview when a page opens.
   1. Closed from the first paint: on desktop every sub-menu is hidden by this stylesheet (it used to wait for navigation.js to add
      .iw-js, so every panel showed until the script ran); hover and focus-within open them, with or without the script; the script's
      toggle adds iw-open (open) or iw-shut (closed under the pointer / focus until they leave). Phones keep the F-17 rule (menu hidden
      until the script, burger in place); without scripting the phone list stays visible.
   2. Desktop panels: white (--iw-submenu-background), a soft shadow, no border box, 10 / 20 px rows; a third level is a flyout beside
      its parent row (">" chevron at the row end, parent row in --iw-menu-hover while open), to the left when navigation.js finds no
      room on the right (iw-flip; a top-level panel then aligns on its item's right edge). Nothing is pushed down.
   3. One row: with scripting the header row and the menu row never wrap; navigation.js measures the real row and picks the full menu,
      the compact menu (body.iw-nav-compact: half the gap, links .9, smaller end button) or the burger (iw-nav-collapsed); until the
      script ran the row is clipped sideways (never a horizontal scroll), and while it measures (body.iw-nav-measuring) the burger
      leaves the row without being hidden (a focused burger keeps the focus). Review 2026-11-04: a flipped flyout chevron points left,
      the hover row tint follows the panel text colour (color-mix, fallback grey).
   4. Burger / collapsed menu: every parent row is label + 44 px toggle, levels indented 1rem each, 44 px rows, no border box. */
@media(min-width:768px){
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu{display:none}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .menu-item-has-children:is(:hover,:focus-within,.iw-open)>.sub-menu{display:block}
.iw-site:not(.iw-nav-collapsed) .iw-navigation.iw-js .menu-item-has-children.iw-shut:not(.iw-open)>.sub-menu{display:none}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu{margin:0;padding:8px 0;border:0;border-radius:0;box-shadow:0 10px 30px rgba(15,23,42,.12),0 2px 6px rgba(15,23,42,.06);text-align:left;z-index:101}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu li{position:relative;display:flex;align-items:center;margin:0;border:0}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu a{display:block;flex:1 1 auto;min-width:0;padding:10px 20px}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu li.menu-item-has-children>a{padding-right:4px}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu .iw-submenu-toggle{flex:0 0 auto;align-self:stretch;width:36px;height:auto;margin:0 8px 0 0}
.iw-site.iw-submenu-chevron:not(.iw-nav-collapsed) .iw-navigation .sub-menu .iw-submenu-icon,.iw-site.iw-submenu-chevron:not(.iw-nav-collapsed) .iw-navigation.iw-js .sub-menu .menu-item-has-children:is(:hover,:focus-within)>.iw-submenu-toggle .iw-submenu-icon{transform:rotate(-45deg)}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu li:is(:hover,:focus-within,.iw-open)>:is(a,.iw-submenu-toggle){color:var(--iw-menu-hover,var(--iw-primary,#166534))}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu li:is(:hover,:focus-within,.iw-open){background:rgba(127,127,127,.08);background:color-mix(in srgb,currentColor 7%,transparent)}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu .sub-menu{position:absolute;top:-8px;left:100%;min-width:var(--iw-submenu-width,12rem);margin:0}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .sub-menu .iw-flip>.sub-menu{left:auto;right:100%}
.iw-site.iw-submenu-chevron:not(.iw-nav-collapsed) .iw-navigation.iw-js .sub-menu .menu-item-has-children.iw-flip>.iw-submenu-toggle .iw-submenu-icon{transform:rotate(135deg)}
.iw-site:not(.iw-nav-collapsed) .iw-navigation .iw-menu>li.iw-flip>.sub-menu{left:auto;right:0}
}
@media(min-width:768px) and (scripting:enabled){
.iw-site:not(.iw-nav-collapsed):not(.iw-header-centered):not(.iw-header-stacked) .iw-header-inner{flex-wrap:nowrap}
.iw-site:not(.iw-nav-collapsed) .iw-branding{flex:0 0 auto}
.iw-site:not(.iw-nav-collapsed) .iw-navigation,.iw-site:not(.iw-nav-collapsed) .iw-menu,.iw-site:not(.iw-nav-collapsed) .iw-menu>li{flex-wrap:nowrap}
.iw-site:not(.iw-nav-collapsed) .iw-menu>li>a,.iw-site:not(.iw-nav-collapsed) .iw-navigation a.iw-menu-end-button{white-space:nowrap}
.iw-site:not(.iw-nav-collapsed) .iw-header-inner:has(>.iw-navigation:not(.iw-js)){overflow-x:clip}
}
.iw-site.iw-nav-compact .iw-header-inner{gap:16px}
.iw-site.iw-nav-compact .iw-navigation,.iw-site.iw-nav-compact .iw-menu{gap:calc(var(--iw-menu-gap,1rem) / 2)}
.iw-site.iw-nav-compact .iw-navigation .iw-menu>li>a{padding-inline:.35rem;font-size:calc(var(--iw-t-primary-menu-size,var(--iw-menu-font-size,1em)) * .9)}
.iw-site.iw-nav-compact .iw-navigation a.iw-menu-end-button{padding:8px 16px;font-size:.9em}
.iw-site.iw-nav-collapsed .iw-navigation .iw-menu>li>a{display:flex;align-items:center;min-height:44px}
.iw-site.iw-nav-collapsed .iw-navigation .sub-menu li{display:flex;align-items:center;flex-wrap:wrap;justify-content:space-between;margin:0;border:0}
.iw-site.iw-nav-collapsed .iw-navigation .sub-menu li>a{display:flex;align-items:center;flex:1 1 0%;min-width:0;min-height:44px;overflow-wrap:break-word}
.iw-site.iw-nav-collapsed .iw-navigation li>.sub-menu{flex:0 0 100%;border:0;box-shadow:none}
.iw-site.iw-nav-collapsed .iw-navigation .sub-menu .sub-menu{margin-left:0;padding:0 0 .25rem 1rem}
.iw-site.iw-nav-measuring .iw-header-inner>.iw-menu-toggle{position:absolute}
/* end THEME-MENU-FLYOUTS */
