/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:1.5;--text-sm:.875rem;--text-sm--line-height:1.5;--text-base:1rem;--text-base--line-height:1.6;--text-lg:1.1875rem;--text-lg--line-height:1.5;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.2;--text-3xl:2rem;--text-3xl--line-height:1.15;--text-4xl:2.25rem;--text-4xl--line-height:1.15;--text-5xl:2.5rem;--text-5xl--line-height:1.1;--text-6xl:3rem;--text-6xl--line-height:1.05;--text-7xl:3.5rem;--text-7xl--line-height:1.05;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-lg:.5rem;--radius-xl:.75rem;--shadow-sm:0 1px 2px 0 oklch(0% 0 0/.05);--shadow-md:0 4px 6px -1px oklch(0% 0 0/.1), 0 2px 4px -2px oklch(0% 0 0/.1);--shadow-lg:0 10px 15px -3px oklch(0% 0 0/.1), 0 4px 6px -4px oklch(0% 0 0/.1);--ease-out:cubic-bezier(.2, .8, .25, 1);--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand-100:oklch(93.2% .032 255);--color-brand-300:oklch(80.9% .105 252);--color-brand-400:oklch(70.7% .165 254);--color-brand-500:oklch(62.3% .188 260);--color-brand-700:oklch(48.8% .17 264);--color-brand-800:oklch(42.4% .135 266);--color-bg:var(--color-white);--color-surface:var(--color-neutral-50);--color-text:var(--color-neutral-900);--color-muted:var(--color-neutral-500);--color-border:var(--color-neutral-200);--color-accent:var(--color-brand-500);--color-accent-hover:var(--color-brand-700);--color-accent-contrast:var(--color-white);--color-accent-tint:var(--color-brand-100);--color-btn-bar-primary:var(--color-accent-hover);--color-btn-bar-secondary:var(--color-brand-300);--color-btn-bar-ondark:var(--color-neutral-400);--color-surface-control:var(--color-white);--color-thermal:oklch(78% .14 65);--hr-bar:linear-gradient(90deg, var(--color-grad-mid), var(--color-accent) 70%, var(--color-grad-end));--hr-glow:14px 0 10px -4px transparent;--toc-dot-glow:0 0 0 4px oklch(0% 0 0/.12), 0 0 10px oklch(0% 0 0/.2);--color-surface-alt:var(--color-neutral-100);--color-surface-warm:var(--color-neutral-50);--color-surface-footer:var(--color-neutral-900);--color-surface-footer-band:var(--color-neutral-800);--color-border-framed:var(--color-neutral-900);--color-heading-inverse:var(--color-white);--color-text-inverse:var(--color-neutral-200);--color-muted-inverse:var(--color-neutral-400);--color-link-inverse:var(--color-brand-300);--color-border-inverse:oklch(100% 0 0/.14);--color-on-media:var(--color-white);--color-shade:var(--color-black);--color-btn-ondark:var(--color-white);--color-danger:oklch(55% .2 25);--color-danger-tint:oklch(95% .03 25);--color-grad-start:var(--color-neutral-950);--color-grad-mid:var(--color-brand-800);--color-grad-end:var(--color-brand-300);--font-heading:var(--font-sans);--font-label:var(--font-heading);--heading-weight:700;--leading-heading:1.15;--leading-display:1.05;--space-gutter:1.5rem;--block-py:3rem;--container-page:80rem;--container-wide:90rem;--container-menu:90rem;--container-prose:42rem;--container-narrow:50rem;--radius-full:9999px;--border-control:1.5px;--drop-shadow-badge:0 2px 4px oklch(0% 0 0/.18);--elev-1:var(--shadow-sm);--elev-2:var(--shadow-md);--elev-3:var(--shadow-lg);--lift-y:-3px;--focus-ring:0 0 0 2px #fff, 0 0 0 4px var(--color-accent);--dur-state:.16s;--dur-layout:.24s;--gradient-hero:linear-gradient(120deg, var(--color-grad-start) 0%, var(--color-grad-mid) 55%, var(--color-accent) 100%);--gradient-night:linear-gradient(120deg, var(--color-grad-start) 0%, var(--color-grad-mid) 60%, var(--color-accent) 100%);--wash-dawn:linear-gradient(115deg, var(--color-surface) 35%, var(--color-accent-tint) 75%, var(--color-surface-warm) 100%);--gradient-feature:linear-gradient(135deg, var(--color-grad-start) 0%, var(--color-grad-mid) 100%);--highlight-ramp:linear-gradient(100deg, var(--color-grad-mid) 0%, var(--color-accent) 66%, var(--color-brand-400) 100%);--overlay-hero:linear-gradient(oklch(0% 0 0/.6), oklch(0% 0 0/.6));--overlay-hero-horizontal:linear-gradient(90deg, oklch(0% 0 0/.72), oklch(0% 0 0/.35));--overlay-hero-vertical:linear-gradient(oklch(0% 0 0/.55), oklch(0% 0 0/.55));--overlay-hero-brand:linear-gradient(to top, oklch(0% 0 0/.72) 0%, oklch(0% 0 0/.1) 42%, oklch(0% 0 0/.28) 100%), linear-gradient(104deg, oklch(0% 0 0/.94) 0%, oklch(0% 0 0/.8) 38%, oklch(0% 0 0/.42) 66%, oklch(0% 0 0/.14) 100%);--overlay-hero-flat:oklch(0% 0 0/.6);--color-hero-shade:var(--color-neutral-950);--fill-hero-control:oklch(0% 0 0/.45);--fill-hero-control-active:oklch(0% 0 0/.75);--color-scrim:oklch(0% 0 0/.5);--scrim-menu:oklch(0% 0 0/.12);--blur-menu:8px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--ipi-header-h,0px) + 16px)}body{background-color:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;line-height:1.5}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);color:inherit;font-weight:var(--heading-weight);line-height:var(--leading-heading)}th{font-family:var(--font-label)}a{color:var(--color-accent)}a:hover{color:var(--color-accent-hover)}button:not(:disabled),[role=button]:not(:disabled),label[for],summary{cursor:pointer}.screen-reader-text{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.on-dark{color:var(--color-text-inverse);--color-text:var(--color-heading-inverse);--color-muted:var(--color-muted-inverse);--color-border:var(--color-border-inverse);--color-accent:var(--color-link-inverse);--color-accent-hover:var(--color-heading-inverse)}.on-dark :where(h1,h2,h3,h4,h5,h6){color:var(--color-heading-inverse)}.on-dark a{color:var(--color-text-inverse)}.on-dark a:hover{color:var(--color-heading-inverse)}.ipi-post-content{--block-py:0px;max-width:var(--container-prose);margin-inline:0}.ipi-post-content>*+*{margin-top:var(--space-gutter)}}@layer components{.ipi-toc-grid{flex-wrap:wrap-reverse;align-items:flex-end;gap:80px;display:flex}.ipi-toc__main{width:100%;max-width:var(--container-prose);margin-inline:0}.ipi-toc-grid .ipi-toc__main{flex:480px;max-width:680px;margin-inline:0}.ipi-toc{top:calc(var(--ipi-header-h,0px) + 20px);flex:0 0 240px;align-self:start;position:sticky}.ipi-toc__label{font-family:var(--font-label);letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent);margin:0;font-size:11px;font-weight:600}.ipi-toc__list{margin-top:15px;padding-left:18px;position:relative}.ipi-toc__track{background:var(--color-border);border-radius:1px;width:2px;position:absolute;top:0;bottom:0;left:3px}.ipi-toc__fill{background:var(--color-accent);width:2px;height:0;transition:top var(--dur-layout) var(--ease-out),height var(--dur-layout) var(--ease-out);border-radius:1px;position:absolute;top:0;left:3px}.ipi-toc__dot{background:var(--color-accent);width:8px;height:8px;box-shadow:var(--toc-dot-glow);transition:top var(--dur-layout) var(--ease-out);border-radius:50%;position:absolute;top:-4px;left:0}.ipi-toc__ol{margin:0;padding:0;list-style:none}.ipi-toc__link{font-family:var(--font-sans);color:var(--color-text);transition:color var(--dur-state) var(--ease-out);padding:7px 0;font-size:13.5px;font-weight:500;line-height:1.35;text-decoration:none;display:block}.ipi-toc__text{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ipi-toc__link--sub{font-family:var(--font-sans);color:var(--color-muted);padding:4px 0 4px 10px;font-size:13px;font-weight:400}.ipi-toc__link.is-passed{color:var(--color-neutral-400)}.ipi-toc__link:hover,.ipi-toc__link.is-active{color:var(--color-accent)}.ipi-toc__link--sub.is-active{color:var(--color-accent);font-weight:600}.ipi-toc__top{font-family:var(--font-label);letter-spacing:.06em;text-transform:uppercase;color:var(--color-muted);transition:color var(--dur-state) var(--ease-out);align-items:center;gap:6px;margin-top:20px;padding:4px 0;font-size:11px;font-weight:600;text-decoration:none;display:inline-flex}.ipi-toc__top:hover{color:var(--color-accent)}.ipi-post-content :is(h2,h3){scroll-margin-top:4px}.ipi-post-content h2:not(:has(+.ipi-hr)){border-bottom:1px solid var(--color-border);padding-bottom:12px}.ipi-toc-dock{inset:var(--ipi-header-h,0px) 0 auto 0;z-index:30;background:var(--color-surface-control);border-bottom:1px solid var(--color-border);box-shadow:var(--elev-1);transition:transform var(--dur-layout) var(--ease-out);position:fixed;transform:translateY(-100%)}.ipi-toc-dock.is-visible{transform:translateY(0)}.ipi-toc-dock__bar{cursor:pointer;width:100%;min-height:48px;font-family:var(--font-label);color:var(--color-text);text-align:left;background:0 0;border:0;align-items:center;gap:10px;padding:12px 20px;font-size:13px;font-weight:500;display:flex}.ipi-toc-dock__icon{color:var(--color-accent);flex:none}.ipi-toc-dock__label{text-transform:uppercase;letter-spacing:.06em;flex:none}.ipi-toc-dock__current{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-family:var(--font-sans);letter-spacing:0;text-transform:none;color:var(--color-muted);flex:auto;font-weight:400;overflow:hidden}.ipi-toc-dock__chev{color:var(--color-muted);transition:transform var(--dur-state) var(--ease-out);flex:none}.ipi-toc-dock.is-open .ipi-toc-dock__chev{transform:rotate(180deg)}.ipi-toc-dock__panel{border-top:1px solid var(--color-border);max-height:60vh;padding:4px 20px 16px;display:none;overflow-y:auto}.ipi-toc-dock.is-open .ipi-toc-dock__panel{display:block}.ipi-toc-dock__panel .ipi-toc__link{align-items:center;min-height:44px;padding-top:10px;padding-bottom:10px;display:flex}.ipi-toc-dock__panel .ipi-toc__ol>li+li{border-top:1px solid var(--color-border)}@media(min-width:961px){.ipi-toc-dock{display:none}}@media(max-width:960px){.ipi-toc-grid{gap:0}.ipi-toc-grid .ipi-toc__main{flex:100%;max-width:none}.ipi-toc{background:var(--color-surface-control);border:1px solid var(--color-border);border-radius:var(--radius-lg);flex:100%;margin-bottom:30px;padding:20px;position:static}.ipi-toc__top{display:none}}@media(prefers-reduced-motion:reduce){.ipi-toc__fill,.ipi-toc__dot,.ipi-toc__link,.ipi-toc__top,.ipi-toc-dock,.ipi-toc-dock__chev{transition:none}}.ipi-search{position:relative}.ipi-search__panel{z-index:50;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);max-height:min(80vh,640px);box-shadow:var(--elev-2);flex-direction:column;padding:6px;display:flex;position:absolute;top:calc(100% + 8px);left:0;right:0;overflow:hidden}.ipi-search__list{flex:auto;min-height:0;margin:0;padding:0;list-style:none;overflow-y:auto}.ipi-search__opt+.ipi-search__opt{border-top:1px solid var(--color-border)}.ipi-search__link{border-radius:var(--radius-sm);transition:background-color var(--dur-state) var(--ease-out);flex-direction:column;gap:4px;padding:10px 12px;text-decoration:none;display:flex}.ipi-search__opt.is-active .ipi-search__link,.ipi-search__link:hover{background:var(--color-accent-tint)}.ipi-search__row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ipi-search__title{font-family:var(--font-label);color:var(--color-text);transition:color var(--dur-state) var(--ease-out);font-size:.9375rem;font-weight:600;line-height:1.3}.ipi-search__opt.is-active .ipi-search__title,.ipi-search__link:hover .ipi-search__title{color:var(--color-accent)}.ipi-search__badge{font-family:var(--font-label);letter-spacing:.04em;text-transform:uppercase;color:var(--color-accent);background:var(--color-accent-tint);border-radius:var(--radius-sm);flex:none;padding:2px 7px;font-size:.6875rem;font-weight:600}.ipi-search__opt.is-active .ipi-search__badge,.ipi-search__link:hover .ipi-search__badge{background:var(--color-surface)}.ipi-search__excerpt{white-space:nowrap;text-overflow:ellipsis;color:var(--color-muted);font-size:.8125rem;line-height:1.45;overflow:hidden}.ipi-search__state{color:var(--color-muted);align-items:center;gap:8px;padding:12px;font-size:.875rem;display:flex}.ipi-search__all{border-top:1px solid var(--color-border);border-radius:var(--radius-sm);font-family:var(--font-label);color:var(--color-accent);transition:background-color var(--dur-state) var(--ease-out);flex:none;justify-content:space-between;align-items:center;gap:8px;margin-top:4px;padding:10px 12px;font-size:.8125rem;font-weight:600;text-decoration:none;display:flex}.ipi-search__all:hover{background:var(--color-accent-tint)}.ipi-search__spinner{border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:var(--radius-full);flex:none;width:16px;height:16px;animation:.6s linear infinite ipi-search-spin}@keyframes ipi-search-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.ipi-search__link,.ipi-search__title,.ipi-search__all{transition:none}.ipi-search__spinner{animation:none}}.ipi-morph-scrim{background:var(--scrim-menu);-webkit-backdrop-filter:blur(var(--blur-menu));position:fixed;top:0;right:0;bottom:0;left:0}.ipi-morph{z-index:30;transform-origin:top;background:var(--color-surface);border:1px solid var(--color-border);border-radius:0 0 var(--radius-lg) var(--radius-lg);box-shadow:var(--elev-2);opacity:0;pointer-events:none;transition:opacity .1s var(--ease-out);border-top:0;position:absolute;top:calc(100% + 1px);left:0;overflow:hidden}.ipi-morph.is-open{opacity:1;pointer-events:auto}.ipi-morph--anim{transition:opacity .1s var(--ease-out)}.ipi-morph__content{width:100%}.ipi-morph__panel{transition:opacity .1s var(--ease-out)}.ipi-morph__panel.is-entering{opacity:0}@media(prefers-reduced-motion:reduce){.ipi-morph,.ipi-morph--anim,.ipi-morph__panel{transition:none}}.ipi-marquee{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 80px calc(100% - 80px),#0000);mask-image:linear-gradient(90deg,#0000,#000 80px,#000 calc(100% - 80px),#0000)}.ipi-marquee__track{width:max-content;animation:ipi-marquee var(--ipi-marquee-dur,32s) linear infinite;gap:20px;display:flex}.ipi-marquee:hover .ipi-marquee__track,.ipi-marquee.is-paused .ipi-marquee__track{animation-play-state:paused}@media(prefers-reduced-motion:reduce){.ipi-marquee__track{animation:none}}.ipi-kicker__clip{row-gap:inherit;min-width:0;display:block;overflow:hidden}.ipi-kicker__list{align-items:center;row-gap:inherit;margin-left:calc(-2 * var(--ipi-kicker-gap,13px) - 1px);flex-wrap:wrap;display:flex}.ipi-kicker__item{align-items:center;gap:var(--ipi-kicker-gap,13px);margin-left:var(--ipi-kicker-gap,13px);display:inline-flex}.ipi-kicker__rule{flex:none;width:1px;height:11px;display:block}.ipi-tiles{container-type:inline-size}.ipi-tiles__grid{--cols:2;--tile-gap:var(--space-gutter);grid-template-columns:repeat(var(--cols),minmax(0,1fr));grid-auto-rows:calc((100cqw - (var(--cols) - 1) * var(--tile-gap)) / var(--cols) / 1.5);gap:var(--tile-gap);grid-auto-flow:dense;display:grid}@media(min-width:48rem){.ipi-tiles__grid[data-cols="3"]{--cols:3}}@media(min-width:64rem){.ipi-tiles__grid[data-cols="4"]{--cols:4}}.ipi-tiles__tile{border-radius:var(--radius-lg);display:block;position:relative;overflow:hidden}.ipi-tiles__tile img{object-fit:cover;width:100%;height:100%;position:absolute;top:0;right:0;bottom:0;left:0}.ipi-tiles__tile--tall{grid-row:span 2}.ipi-tiles__tile--wide{grid-column:span 2}@media(max-width:39.999rem){.ipi-tiles__grid{flex-direction:column;display:flex}.ipi-tiles__tile{aspect-ratio:3/2}.ipi-tiles__tile--wide{aspect-ratio:3}.ipi-tiles__tile--tall{aspect-ratio:3/4}}.ipi-quiz-art{background:linear-gradient(#ffffff12 1px,transparent 1px) 0 0 / calc(100% / 12) calc(100% / 12),linear-gradient(90deg,#ffffff12 1px,transparent 1px) 0 0 / calc(100% / 12) calc(100% / 12),var(--gradient-feature)}.ipi-quiz-art__glow{background:radial-gradient(circle at 60% 44%,#f4a34b8c 0,#3c82f673 26%,#2b479740,#0000 70%);position:absolute;top:0;right:0;bottom:0;left:0}@supports (color:color-mix(in lab,red,red)){.ipi-quiz-art__glow{background:radial-gradient(circle at 60% 44%,color-mix(in srgb,var(--color-thermal) 55%,transparent) 0,color-mix(in srgb,var(--color-accent) 45%,transparent) 26%,color-mix(in srgb,var(--color-grad-mid) 25%,transparent) 48%,transparent 70%)}}.ipi-quiz-art__px{width:calc(8.33333% - 1px);height:calc(8.33333% - 1px);opacity:var(--o,1);animation:3.4s ease-in-out infinite ipi-px-pulse;animation-delay:var(--d,0s);margin:1px 0 0 1px;position:absolute}.ipi-quiz-art__px--hot{background:var(--color-thermal)}.ipi-quiz-art__px--warm{background:#868fb2}@supports (color:color-mix(in lab,red,red)){.ipi-quiz-art__px--warm{background:color-mix(in oklab,var(--color-accent),var(--color-thermal) 40%)}}.ipi-quiz-art__px--mid{background:var(--color-accent)}.ipi-quiz-art__px--cool{background:var(--color-grad-mid)}@media(prefers-reduced-motion:reduce){.ipi-quiz-art__px{animation:none}}.ipi-statement-band{background-color:var(--color-accent);text-align:center;background-image:linear-gradient(#ffffff0f 1px,#0000 1px),linear-gradient(90deg,#ffffff0f 1px,#0000 1px);background-position:0 0;background-size:24px 24px;padding:30px 40px 52px;position:relative}.ipi-statement-band--flat{padding-bottom:30px}.ipi-statement-band--pointer{clip-path:polygon(0 0,100% 0,100% calc(100% - 22px),calc(50% + 26px) calc(100% - 22px),50% 100%,calc(50% - 26px) calc(100% - 22px),0 calc(100% - 22px));z-index:1;margin-bottom:-22px}.ipi-statement-band__text{max-width:60%;color:var(--color-accent-contrast);text-wrap:balance;margin:0 auto;font-size:24px;font-weight:600;line-height:1.3;position:relative}.ipi-statement-band__gutter{width:20%;position:absolute;top:0;bottom:0;overflow:hidden}.ipi-statement-band__gutter--left{left:0}.ipi-statement-band__gutter--right{background-color:var(--color-accent);background-image:linear-gradient(#ffffff0f 1px,#0000 1px),linear-gradient(90deg,#ffffff0f 1px,#0000 1px);background-position:100% 0;background-size:24px 24px;right:0}.ipi-statement-band__px{background:var(--color-thermal);width:23px;height:23px;opacity:var(--o,1);animation:3.4s ease-in-out infinite ipi-px-pulse;animation-delay:var(--d,0s);position:absolute}@media(prefers-reduced-motion:reduce){.ipi-statement-band__px{animation:none}}.ipi-statement-band__px--m1{background:#94bafa}@supports (color:color-mix(in lab,red,red)){.ipi-statement-band__px--m1{background:color-mix(in srgb,var(--color-accent) 55%,#fff)}}.ipi-statement-band__px--m2{background:var(--color-accent)}.ipi-statement-band__px--m3{background:#2958a7}@supports (color:color-mix(in lab,red,red)){.ipi-statement-band__px--m3{background:color-mix(in srgb,var(--color-accent) 68%,#000)}}.ipi-statement-band__px--m4{background:var(--color-grad-mid)}@media(max-width:860px){.ipi-statement-band{padding:24px 20px 46px}.ipi-statement-band--flat{padding-bottom:24px}.ipi-statement-band__text{max-width:100%;font-size:18px}.ipi-statement-band__gutter{display:none}}.ipi-ground-grid{background-color:var(--color-surface-alt);background-image:linear-gradient(#3c82f60f 1px,#0000 1px),linear-gradient(90deg,#3c82f60f 1px,#0000 1px)}@supports (color:color-mix(in lab,red,red)){.ipi-ground-grid{background-image:linear-gradient(color-mix(in srgb,var(--color-accent) 6%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--color-accent) 6%,transparent) 1px,transparent 1px)}}.ipi-ground-grid{background-position:0 -1px;background-size:24px 24px}.ipi-tb-row{grid-template-columns:44px minmax(0,860px) 44px;grid-template-areas:"prev track next";justify-content:center;align-items:center;gap:30px;display:grid}.ipi-tb-prev{grid-area:prev}.ipi-tb-next{grid-area:next}.ipi-tb-track{scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;cursor:grab;border-radius:var(--radius-lg);grid-area:track;width:100%;display:flex;overflow-x:auto}.ipi-tb-track::-webkit-scrollbar{display:none}.ipi-tb-slide{scroll-snap-align:start;scroll-snap-stop:always;text-align:center;flex-direction:column;flex:0 0 100%;align-items:center;min-width:0;padding:0 10px;display:flex}.ipi-tb-mark{height:56px;font-family:var(--font-label);color:var(--color-accent);-webkit-user-select:none;user-select:none;margin-bottom:24px;font-size:96px;font-weight:700;line-height:.7;overflow:hidden}.ipi-tb-quote{max-width:860px;color:var(--color-text);text-wrap:pretty;margin:0;font-size:24px;font-weight:600;line-height:1.35}.ipi-tb-cite{margin-top:30px}.ipi-tb-name{color:var(--color-text);font-size:14px;font-weight:600;line-height:1.3;display:block}.ipi-tb-company{color:var(--color-muted);font-size:13px;line-height:1.4;display:block}.ipi-tb-arrow{border:1px solid var(--color-accent);border-radius:var(--radius-sm);background:var(--color-surface-control);width:44px;height:44px;box-shadow:var(--elev-1);color:var(--color-accent);cursor:pointer;transition:background-color var(--dur-state) var(--ease-out);justify-content:center;align-items:center;display:inline-flex}.ipi-tb-arrow:hover{background:var(--color-accent-tint)}.ipi-tb-arrow:focus-visible{box-shadow:var(--focus-ring);outline:none}@media(max-width:860px){.ipi-tb-row{grid-template-columns:1fr 1fr;grid-template-areas:"track track""prev next";gap:25px 10px}.ipi-tb-prev{justify-self:end}.ipi-tb-next{justify-self:start}.ipi-tb-quote{font-size:20px}}.opn{--opn-gutter:24px;top:calc(var(--ipi-header-h,0px) - 1px);z-index:30;border-top:1px solid #0000;border-bottom:1px solid var(--color-border);transition:padding var(--dur-layout) var(--ease-out),background var(--dur-state) var(--ease-out),box-shadow var(--dur-state) var(--ease-out),border-color var(--dur-state) var(--ease-out);background:0 0;padding-top:0;position:sticky}.opn.is-stuck{background:var(--color-surface);box-shadow:var(--elev-1);padding-top:0}.opn__in{max-width:var(--container-page);padding:0 var(--opn-gutter);box-sizing:border-box;align-items:center;gap:28px;height:48px;margin:0 auto;display:flex}.opn__label{font-family:var(--font-sans);color:var(--color-muted);border-right:1px solid var(--color-border);white-space:nowrap;flex:none;padding-right:24px;font-size:13.5px;font-weight:500;line-height:20px}.opn__links{scrollbar-width:none;flex:1;align-items:stretch;gap:22px;min-width:0;height:100%;margin:0;padding:0;list-style:none;display:flex;overflow-x:auto}.opn__links::-webkit-scrollbar{display:none}.opn__links li{flex:none;display:flex}.opn__links a{white-space:nowrap;font-family:var(--font-sans);letter-spacing:.01em;color:var(--color-muted);transition:color var(--dur-state) var(--ease-out);align-items:center;font-size:13.5px;font-weight:500;text-decoration:none;display:inline-flex;position:relative}.opn__links a:hover,.opn__links a[aria-current]{color:var(--color-accent)}.opn__links a[aria-current]:after{content:"";background:var(--color-accent);border-radius:999px;height:2px;position:absolute;bottom:0;left:0;right:0}.opn__links a:focus-visible{box-shadow:var(--focus-ring);outline:none}.opn__links.is-of-l.is-of-r{-webkit-mask-image:linear-gradient(90deg,#0000,#000 48px calc(100% - 48px),#0000);mask-image:linear-gradient(90deg,#0000,#000 48px,#000 calc(100% - 48px),#0000)}.opn__links.is-of-r:not(.is-of-l){-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000)}.opn__links.is-of-l:not(.is-of-r){-webkit-mask-image:linear-gradient(90deg,#0000,#000 48px);mask-image:linear-gradient(90deg,#0000,#000 48px)}.opn__toggle{display:none}.opn.is-compact .opn__in{position:relative}.opn.is-compact .opn__label{display:none}.opn__toggle-label{color:var(--color-muted);flex:none;font-weight:500}.opn.is-compact .opn__toggle{min-width:0;height:100%;font-family:var(--font-sans);color:var(--color-text);cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:0;font-size:13.5px;font-weight:600;display:flex}.opn__current{text-overflow:ellipsis;white-space:nowrap;margin-left:auto;overflow:hidden}.opn__toggle svg{width:15px;height:15px;color:var(--color-accent);transition:transform var(--dur-state) var(--ease-out);flex:none}.opn.is-open .opn__toggle svg{transform:rotate(180deg)}.opn__toggle:focus-visible{box-shadow:var(--focus-ring);border-radius:var(--radius-sm);outline:none}.opn.is-compact .opn__links{top:100%;left:var(--opn-gutter);right:var(--opn-gutter);background:var(--color-surface);border:1px solid var(--color-border);border-radius:0 0 var(--radius-lg) var(--radius-lg);height:auto;max-height:min(60vh,420px);box-shadow:var(--elev-2);flex-direction:column;gap:0;padding:6px 0;display:none;position:absolute;overflow:hidden auto;-webkit-mask-image:none;mask-image:none}.opn.is-compact.is-open .opn__links{display:flex}.opn.is-compact .opn__links li{display:block}.opn.is-compact .opn__links a{box-sizing:border-box;width:100%;padding:10px 16px;display:flex}.opn.is-compact .opn__links a[aria-current]{color:var(--color-accent);background:var(--color-accent-tint)}.opn.is-compact .opn__links a[aria-current]:after{display:none}@media(max-width:639px){.opn.is-compact .opn__in{position:static}.opn.is-compact .opn__links{border-inline:0;border-radius:0;left:0;right:0}.opn.is-compact .opn__links a{padding-inline:var(--opn-gutter)}}@media(min-width:640px){.opn{--opn-gutter:32px}}@media(prefers-reduced-motion:reduce){.opn,.opn__links a{transition:none}}.ipi-hero-video{isolation:isolate;min-height:640px;position:relative;overflow:hidden}.ipi-hero-video__porthole{z-index:1;pointer-events:none;contain:layout paint;width:min(52%,900px);position:absolute;inset:0 0 0 auto;transform:translateZ(0)}.ipi-hero-video__video,.ipi-hero-video__poster,.ipi-hero-video__rposter{object-fit:cover;opacity:.45;width:100%;height:100%;display:block;position:absolute;top:0;right:0;bottom:0;left:0;-webkit-mask-image:linear-gradient(90deg,#0000 0%,oklch(0% 0 0) 52%);mask-image:linear-gradient(90deg,#0000,#000 52%)}.ipi-hero-video__rposter{display:none}.ipi-hero-video__control{z-index:4;border-radius:var(--radius-sm);background:var(--fill-hero-control);width:32px;height:32px;color:var(--color-white);opacity:.7;transition:background-color var(--dur-state) var(--ease-out),opacity var(--dur-state) var(--ease-out);border:1px solid oklch(100% 0 0/.35);justify-content:center;align-items:center;display:inline-flex;position:absolute;bottom:1.5rem;right:1.5rem}.ipi-hero-video__control:hover,.ipi-hero-video__control:focus-visible,.ipi-hero-video__control.is-paused{background:var(--fill-hero-control-active);opacity:1}.ipi-hero-video__control:focus-visible{box-shadow:var(--focus-ring);outline:none}.ipi-hero-video__glyph--play,.ipi-hero-video__control.is-paused .ipi-hero-video__glyph--pause{display:none}.ipi-hero-video__control.is-paused .ipi-hero-video__glyph--play{display:block}@media(prefers-reduced-motion:reduce){.ipi-hero-video__video{display:none}.ipi-hero-video__rposter{display:block}.ipi-hero-video__control{display:none}}@media(max-width:1199px){.ipi-hero-video__porthole,.ipi-hero-video__control{display:none}}@media(max-width:860px){.ipi-hero-video{min-height:560px}}#ipi-mobile-menu a:active,#ipi-mobile-menu a[data-pressed]{background-color:var(--color-accent-tint)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.inset-x-2\.5{inset-inline:calc(var(--spacing) * 2.5)}.-top-\[44px\]{top:-44px}.top-0{top:0}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-20{top:calc(var(--spacing) * 20)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.-bottom-px{bottom:-1px}.bottom-0{bottom:0}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.-z-30{z-index:-30}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-2{order:2}.order-last{order:9999}.col-span-2{grid-column:span 2/span 2}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-end-3{grid-row-end:3}.row-end-4{grid-row-end:4}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-m-1{margin:calc(var(--spacing) * -1)}.m-auto{margin:auto}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-auto{margin-inline:auto}.-mt-2{margin-top:calc(var(--spacing) * -2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-\[6px\]{margin-top:6px}.mt-\[8px\]{margin-top:8px}.mt-\[25px\]{margin-top:25px}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.-mr-2{margin-right:calc(var(--spacing) * -2)}.-mr-\[0\.1em\]{margin-right:-.1em}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-\[25px\]{margin-bottom:25px}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.line-clamp-4{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-\[3\/2\]{aspect-ratio:3/2}.aspect-\[3\/4\]{aspect-ratio:3/4}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-\[3px\]{height:3px}.h-\[7px\]{height:7px}.h-\[13px\]{height:13px}.h-\[14px\]{height:14px}.h-\[15px\]{height:15px}.h-\[16px\]{height:16px}.h-\[18px\]{height:18px}.h-\[28px\]{height:28px}.h-\[36px\]{height:36px}.h-\[38px\]{height:38px}.h-\[44px\]{height:44px}.h-\[46px\]{height:46px}.h-\[74px\]{height:74px}.h-\[84px\]{height:84px}.h-\[88px\]{height:88px}.h-auto{height:auto}.h-full{height:100%}.max-h-20{max-height:calc(var(--spacing) * 20)}.max-h-\[24rem\]{max-height:24rem}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-\[45vh\]{min-height:45vh}.min-h-\[50vh\]{min-height:50vh}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-\[7px\]{width:7px}.w-\[13px\]{width:13px}.w-\[14px\]{width:14px}.w-\[15px\]{width:15px}.w-\[16px\]{width:16px}.w-\[18px\]{width:18px}.w-\[28px\]{width:28px}.w-\[36px\]{width:36px}.w-\[38px\]{width:38px}.w-\[44px\]{width:44px}.w-\[84px\]{width:84px}.w-\[88px\]{width:88px}.w-\[200px\]{width:200px}.w-\[min\(36rem\,calc\(100vw-2rem\)\)\]{width:min(36rem,100vw - 2rem)}.w-\[min\(42rem\,calc\(100vw-2rem\)\)\]{width:min(42rem,100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\(--container-narrow\){max-width:var(--container-narrow)}.max-w-\(--container-page\){max-width:var(--container-page)}.max-w-\(--container-prose\){max-width:var(--container-prose)}.max-w-\(--container-wide\){max-width:var(--container-wide)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[65ch\]{max-width:65ch}.max-w-\[92vw\]{max-width:92vw}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[420px\]{max-width:420px}.max-w-\[620px\]{max-width:620px}.max-w-\[680px\]{max-width:680px}.max-w-\[760px\]{max-width:760px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-8{min-width:calc(var(--spacing) * 8)}.flex-1{flex:1}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-3d{scale:var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.list-none{list-style-type:none}.columns-1{columns:1}.columns-2{columns:2}.columns-3{columns:3}.columns-4{columns:4}.break-inside-avoid{break-inside:avoid}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(280px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.grid-cols-\(--cols-m\){grid-template-columns:var(--cols-m)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,350px\)\]{grid-template-columns:minmax(0,350px)}.grid-rows-\[140px_40px_auto\]{grid-template-rows:140px 40px auto}.grid-rows-\[200px_40px_auto\]{grid-template-rows:200px 40px auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}.gap-\[11px\]{gap:11px}.gap-\[13px\]{gap:13px}.gap-\[30px\]{gap:30px}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-x-10{column-gap:calc(var(--spacing) * 10)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-2\.5{row-gap:calc(var(--spacing) * 2.5)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-8{row-gap:calc(var(--spacing) * 8)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-center{justify-self:center}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-br-lg{border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\(length\:--border-control\){border-style:var(--tw-border-style);border-width:var(--border-control)}.border-\[3px\]{border-style:var(--tw-border-style);border-width:3px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[color\:var\(--color-border-framed\)\]{border-color:var(--color-border-framed)}.border-\[color\:var\(--color-danger\)\]{border-color:var(--color-danger)}.border-accent{border-color:var(--color-accent)}.border-border{border-color:var(--color-border)}.border-on-media\/25{border-color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.border-on-media\/25{border-color:color-mix(in oklab,var(--color-on-media) 25%,transparent)}}.border-surface{border-color:var(--color-surface)}.border-transparent{border-color:#0000}.border-x-border{border-inline-color:var(--color-border)}.border-t-accent{border-top-color:var(--color-accent)}.border-b-border{border-bottom-color:var(--color-border)}.bg-\[color\:var\(--color-danger-tint\)\]{background-color:var(--color-danger-tint)}.bg-\[color\:var\(--color-hero-shade\)\]{background-color:var(--color-hero-shade)}.bg-\[color\:var\(--color-scrim\)\]{background-color:var(--color-scrim)}.bg-\[color\:var\(--color-surface-control\)\]{background-color:var(--color-surface-control)}.bg-\[color\:var\(--color-thermal\)\]{background-color:var(--color-thermal)}.bg-accent{background-color:var(--color-accent)}.bg-accent-tint{background-color:var(--color-accent-tint)}.bg-bg{background-color:var(--color-bg)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-brand-500{background-color:var(--color-brand-500)}.bg-btn-ondark{background-color:var(--color-btn-ondark)}.bg-hero-shade{background-color:var(--color-hero-shade)}.bg-on-media\/45{background-color:#ffffff73}@supports (color:color-mix(in lab,red,red)){.bg-on-media\/45{background-color:color-mix(in oklab,var(--color-on-media) 45%,transparent)}}.bg-shade\/55{background-color:#0000008c}@supports (color:color-mix(in lab,red,red)){.bg-shade\/55{background-color:color-mix(in oklab,var(--color-shade) 55%,transparent)}}.bg-shade\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-shade\/60{background-color:color-mix(in oklab,var(--color-shade) 60%,transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-surface-alt{background-color:var(--color-surface-alt)}.bg-surface-control{background-color:var(--color-surface-control)}.bg-surface-footer{background-color:var(--color-surface-footer)}.bg-surface-footer-band{background-color:var(--color-surface-footer-band)}.bg-surface-warm{background-color:var(--color-surface-warm)}.bg-transparent{background-color:#0000}.bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.bg-linear-to-t{--tw-gradient-position:to top in oklab}}.bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[image\:var\(--gradient-feature\)\]{background-image:var(--gradient-feature)}.bg-\[image\:var\(--gradient-hero\)\]{background-image:var(--gradient-hero)}.bg-\[image\:var\(--gradient-night\)\]{background-image:var(--gradient-night)}.bg-\[image\:var\(--highlight-ramp\)\]{background-image:var(--highlight-ramp)}.bg-\[image\:var\(--overlay-hero-brand\)\]{background-image:var(--overlay-hero-brand)}.bg-\[image\:var\(--overlay-hero-horizontal\)\]{background-image:var(--overlay-hero-horizontal)}.bg-\[image\:var\(--overlay-hero-vertical\)\]{background-image:var(--overlay-hero-vertical)}.bg-\[image\:var\(--wash-dawn\)\]{background-image:var(--wash-dawn)}.from-\[color\:var\(--color-scrim\)\]{--tw-gradient-from:var(--color-scrim);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-surface{--tw-gradient-from:var(--color-surface);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-50\%{--tw-gradient-from-position:50%}.to-shade\/25{--tw-gradient-to:#00000040}@supports (color:color-mix(in lab,red,red)){.to-shade\/25{--tw-gradient-to:color-mix(in oklab, var(--color-shade) 25%, transparent)}}.to-shade\/25{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-left-bottom{object-position:left bottom}.object-left-top{object-position:left top}.object-right{object-position:right}.object-right-bottom{object-position:right bottom}.object-right-top{object-position:right top}.object-top{object-position:top}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[12px\]{padding-inline:12px}.px-\[15px\]{padding-inline:15px}.py-\(--block-py\){padding-block:var(--block-py)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-\[6px\]{padding-block:6px}.py-\[10px\]{padding-block:10px}.pt-\(--block-py\){padding-top:var(--block-py)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-\[44px\]{padding-top:44px}.pt-\[52px\]{padding-top:52px}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-\[0\.1em\]{padding-right:.1em}.pb-\(--block-py\){padding-bottom:var(--block-py)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-heading{font-family:var(--font-heading)}.font-label{font-family:var(--font-label)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.625rem\]{font-size:1.625rem}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[26px\]{font-size:26px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[1\.45\]{--tw-leading:1.45;line-height:1.45}.leading-display{--tw-leading:var(--leading-display);line-height:var(--leading-display)}.leading-heading{--tw-leading:var(--leading-heading);line-height:var(--leading-heading)}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.09em\]{--tw-tracking:.09em;letter-spacing:.09em}.\[text-wrap\:balance\]{text-wrap:balance}.\[text-wrap\:pretty\]{text-wrap:pretty}.text-wrap{text-wrap:wrap}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.whitespace-nowrap{white-space:nowrap}.text-\[color\:var\(--color-danger\)\]{color:var(--color-danger)}.text-\[color\:var\(--color-grad-mid\)\]{color:var(--color-grad-mid)}.text-\[color\:var\(--color-heading-inverse\)\]{color:var(--color-heading-inverse)}.text-\[color\:var\(--color-text-inverse\)\]{color:var(--color-text-inverse)}.text-\[color\:var\(--color-thermal\)\]{color:var(--color-thermal)}.text-accent{color:var(--color-accent)}.text-accent-contrast{color:var(--color-accent-contrast)}.text-heading-inverse{color:var(--color-heading-inverse)}.text-muted{color:var(--color-muted)}.text-on-media{color:var(--color-on-media)}.text-on-media\/75{color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.text-on-media\/75{color:color-mix(in oklab,var(--color-on-media) 75%,transparent)}}.text-on-media\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-on-media\/80{color:color-mix(in oklab,var(--color-on-media) 80%,transparent)}}.text-on-media\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-on-media\/90{color:color-mix(in oklab,var(--color-on-media) 90%,transparent)}}.text-text{color:var(--color-text)}.text-transparent{color:#0000}.uppercase{text-transform:uppercase}.italic{font-style:italic}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.accent-\(--color-accent\){accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\(--elev-1\){--tw-shadow:var(--elev-1);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\(--elev-2\){--tw-shadow:var(--elev-2);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\(--elev-3\){--tw-shadow:var(--elev-3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_0_var\(--color-btn-bar-ondark\)\]{--tw-shadow:0 2px 0 var(--tw-shadow-color,var(--color-btn-bar-ondark));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_0_var\(--color-btn-bar-primary\)\]{--tw-shadow:0 2px 0 var(--tw-shadow-color,var(--color-btn-bar-primary));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_0_var\(--color-btn-bar-secondary\)\]{--tw-shadow:0 2px 0 var(--tw-shadow-color,var(--color-btn-bar-secondary));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--elev-1\)\]{--tw-shadow:var(--elev-1);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--elev-3\)\]{--tw-shadow:var(--elev-3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-badge{--tw-drop-shadow-size:drop-shadow(0 2px 4px var(--tw-drop-shadow-color,oklch(0% 0 0/.18)));--tw-drop-shadow:drop-shadow(var(--drop-shadow-badge));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,visibility\,background-color\,border-color\]{transition-property:opacity,visibility,background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,box-shadow\,background-color\,border-color\,color\]{transition-property:transform,box-shadow,background-color,border-color,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-\(--dur-layout\){--tw-duration:var(--dur-layout);transition-duration:var(--dur-layout)}.duration-\(--dur-state\){--tw-duration:var(--dur-state);transition-duration:var(--dur-state)}.duration-150{--tw-duration:.15s;transition-duration:.15s}.ease-\(--ease-out\){--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[--ipi-kicker-gap\:8px\]{--ipi-kicker-gap:8px}.\[--ipi-kicker-gap\:10px\]{--ipi-kicker-gap:10px}.\[text-shadow\:0_1px_3px_rgb\(0_0_0_\/_0\.4\)\]{text-shadow:0 1px 3px #0006}.\[text-shadow\:0_1px_3px_rgb\(0_0_0_\/_0\.35\)\]{text-shadow:0 1px 3px #00000059}.\[text-shadow\:none\]{text-shadow:none}.group-open\:rotate-45:is(:where(.group):is([open],:popover-open,:open) *){rotate:45deg}.group-open\/review\:rotate-180:is(:where(.group\/review):is([open],:popover-open,:open) *){rotate:180deg}@media(hover:hover){.group-hover\:translate-x-0\.5:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:bg-accent:is(:where(.group):hover *){background-color:var(--color-accent)}.group-hover\:text-accent:is(:where(.group):hover *){color:var(--color-accent)}.group-hover\:text-accent-contrast:is(:where(.group):hover *){color:var(--color-accent-contrast)}.group-hover\:text-accent-hover:is(:where(.group):hover *){color:var(--color-accent-hover)}.group-hover\/nav\:opacity-100:is(:where(.group\/nav):hover *){opacity:1}.group-hover\/photo\:scale-\[1\.03\]:is(:where(.group\/photo):hover *){scale:1.03}.group-hover\/row\:text-accent:is(:where(.group\/row):hover *){color:var(--color-accent)}}.group-focus-visible\:bg-accent:is(:where(.group):focus-visible *){background-color:var(--color-accent)}.group-focus-visible\:text-accent-contrast:is(:where(.group):focus-visible *){color:var(--color-accent-contrast)}.marker\:content-\[\'\'\] ::marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\]::marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\] ::-webkit-details-marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\]::-webkit-details-marker{--tw-content:"";content:var(--tw-content)}.placeholder\:text-muted::placeholder{color:var(--color-muted)}.backdrop\:bg-\(--color-scrim\)::backdrop{background-color:var(--color-scrim)}.backdrop\:bg-shade\/80::backdrop{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.backdrop\:bg-shade\/80::backdrop{background-color:color-mix(in oklab,var(--color-shade) 80%,transparent)}}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:-inset-\[4px\]:before{content:var(--tw-content);top:-4px;right:-4px;bottom:-4px;left:-4px}.before\:inset-y-0:before{content:var(--tw-content);inset-block:0}.before\:left-0:before{content:var(--tw-content);left:0}.before\:w-\[3px\]:before{content:var(--tw-content);width:3px}.before\:bg-transparent:before{content:var(--tw-content);background-color:#0000}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.first\:mt-0:first-child{margin-top:0}.open\:bg-accent-tint\/40:is([open],:popover-open,:open){background-color:#dbeafe66}@supports (color:color-mix(in lab,red,red)){.open\:bg-accent-tint\/40:is([open],:popover-open,:open){background-color:color-mix(in oklab,var(--color-accent-tint) 40%,transparent)}}.open\:before\:bg-accent:is([open],:popover-open,:open):before{content:var(--tw-content);background-color:var(--color-accent)}@media(hover:hover){.hover\:translate-y-\[var\(--lift-y\)\]:hover{--tw-translate-y:var(--lift-y);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:translate-y-px:hover{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-accent:hover{border-color:var(--color-accent)}.hover\:border-accent-hover:hover{border-color:var(--color-accent-hover)}.hover\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\:bg-accent-tint:hover{background-color:var(--color-accent-tint)}.hover\:bg-accent-tint\/40:hover{background-color:#dbeafe66}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent-tint\/40:hover{background-color:color-mix(in oklab,var(--color-accent-tint) 40%,transparent)}}.hover\:bg-shade\/80:hover{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.hover\:bg-shade\/80:hover{background-color:color-mix(in oklab,var(--color-shade) 80%,transparent)}}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:text-accent-hover:hover{color:var(--color-accent-hover)}.hover\:text-text:hover{color:var(--color-text)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-\[0_1px_0_var\(--color-btn-bar-ondark\)\]:hover{--tw-shadow:0 1px 0 var(--tw-shadow-color,var(--color-btn-bar-ondark));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_1px_0_var\(--color-btn-bar-primary\)\]:hover{--tw-shadow:0 1px 0 var(--tw-shadow-color,var(--color-btn-bar-primary));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_1px_0_var\(--color-btn-bar-secondary\)\]:hover{--tw-shadow:0 1px 0 var(--tw-shadow-color,var(--color-btn-bar-secondary));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--elev-3\)\]:hover{--tw-shadow:var(--elev-3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:fixed:focus{position:fixed}.focus\:top-4:focus{top:calc(var(--spacing) * 4)}.focus\:left-4:focus{left:calc(var(--spacing) * 4)}.focus\:z-\[100\]:focus{z-index:100}.focus\:rounded-sm:focus{border-radius:var(--radius-sm)}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:bg-surface:focus{background-color:var(--color-surface)}.focus\:px-4:focus{padding-inline:calc(var(--spacing) * 4)}.focus\:py-2:focus{padding-block:calc(var(--spacing) * 2)}.focus\:font-label:focus{font-family:var(--font-label)}.focus\:text-sm:focus{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.focus\:font-semibold:focus{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.focus\:text-accent:focus{color:var(--color-accent)}.focus\:shadow-\[var\(--elev-2\)\]:focus{--tw-shadow:var(--elev-2);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:shadow-\(--focus-ring\):focus-visible{--tw-shadow:var(--focus-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:shadow-\[var\(--elev-2\)\,var\(--focus-ring\)\]:focus-visible{--tw-shadow:var(--elev-2), var(--focus-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:shadow-\[var\(--elev-3\)\,var\(--focus-ring\)\]:focus-visible{--tw-shadow:var(--elev-3), var(--focus-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:shadow-\[var\(--focus-ring\)\]:focus-visible{--tw-shadow:var(--focus-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-accent:focus-visible{--tw-ring-color:var(--color-accent)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\:translate-y-\[2px\]:active{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.active\:bg-accent-tint:active{background-color:var(--color-accent-tint)}.active\:shadow-none:active{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-checked\:border-accent:has(:checked){border-color:var(--color-accent)}.has-checked\:bg-accent-tint:has(:checked){background-color:var(--color-accent-tint)}.data-shown\:visible[data-shown]{visibility:visible}.data-shown\:opacity-100[data-shown]{opacity:1}@media(prefers-reduced-motion:reduce){.motion-reduce\:hidden{display:none}.motion-reduce\:transition-none{transition-property:none}@media(hover:hover){.motion-reduce\:group-hover\/photo\:scale-100:is(:where(.group\/photo):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.motion-reduce\:hover\:translate-y-0:hover{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}}}@media not all and (min-width:1039.98px){.max-\[1039\.98px\]\:inline-flex{display:inline-flex}}@media not all and (min-width:1039px){.max-\[1039px\]\:inline-flex{display:inline-flex}}@media not all and (min-width:860px){.max-\[860px\]\:bg-\[color\:var\(--overlay-hero-flat\)\]{background-color:var(--overlay-hero-flat)}.max-\[860px\]\:bg-none{background-image:none}}@media not all and (min-width:80rem){.max-xl\:relative{position:relative}.max-xl\:grid{display:grid}.max-xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media not all and (min-width:40rem){.max-sm\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.max-sm\:order-1{order:1}.max-sm\:order-2{order:2}.max-sm\:-mx-3{margin-inline:calc(var(--spacing) * -3)}.max-sm\:mt-6{margin-top:calc(var(--spacing) * 6)}.max-sm\:flex{display:flex}.max-sm\:hidden{display:none}.max-sm\:flex-col{flex-direction:column}.max-sm\:gap-3{gap:calc(var(--spacing) * 3)}.max-sm\:text-\[13px\]{font-size:13px}}@media not all and (min-width:…){.max-\[…\]\:inline-flex{display:inline-flex}}@media(min-width:360px){.min-\[360px\]\:text-\[1\.875rem\]{font-size:1.875rem}}@media(min-width:400px){.min-\[400px\]\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@media(min-width:860px){.min-\[860px\]\:px-12{padding-inline:calc(var(--spacing) * 12)}.min-\[860px\]\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media(min-width:1040px){.min-\[1040px\]\:block{display:block}.min-\[1040px\]\:flex{display:flex}.min-\[1040px\]\:hidden{display:none}.min-\[1040px\]\:inline-flex{display:inline-flex}}@media(min-width:40rem){.sm\:right-6{right:calc(var(--spacing) * 6)}.sm\:bottom-6{bottom:calc(var(--spacing) * 6)}.sm\:-ml-\[33px\]{margin-left:-33px}.sm\:ml-4{margin-left:calc(var(--spacing) * 4)}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:h-20{height:calc(var(--spacing) * 20)}.sm\:h-\[20px\]{height:20px}.sm\:h-\[44px\]{height:44px}.sm\:w-20{width:calc(var(--spacing) * 20)}.sm\:w-\[20px\]{width:20px}.sm\:w-\[44px\]{width:44px}.sm\:max-w-xs{max-width:var(--container-xs)}.sm\:columns-2{columns:2}.sm\:grid-cols-\(--cols-t\){grid-template-columns:var(--cols-t)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[repeat\(2\,minmax\(0\,350px\)\)\]{grid-template-columns:repeat(2,minmax(0,350px))}.sm\:grid-rows-\[240px_80px_auto\]{grid-template-rows:240px 80px auto}.sm\:grid-rows-\[340px_80px_auto\]{grid-template-rows:340px 80px auto}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-start{align-items:flex-start}.sm\:gap-5{gap:calc(var(--spacing) * 5)}.sm\:gap-x-0{column-gap:0}.sm\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.sm\:border-border{border-color:var(--color-border)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:p-10{padding:calc(var(--spacing) * 10)}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\:px-9{padding-inline:calc(var(--spacing) * 9)}.sm\:py-6{padding-block:calc(var(--spacing) * 6)}.sm\:pt-7{padding-top:calc(var(--spacing) * 7)}.sm\:pr-10{padding-right:calc(var(--spacing) * 10)}.sm\:pb-8{padding-bottom:calc(var(--spacing) * 8)}.sm\:pl-4{padding-left:calc(var(--spacing) * 4)}.sm\:text-left{text-align:left}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:\[--ipi-kicker-gap\:13px\]{--ipi-kicker-gap:13px}.sm\:before\:content-none:before{content:var(--tw-content);--tw-content:none;content:none}}@media(min-width:48rem){.md\:order-2{order:2}.md\:order-none{order:0}.md\:max-w-none{max-width:none}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_18rem\]{grid-template-columns:minmax(0,1fr) 18rem}.md\:grid-cols-\[minmax\(0\,1fr\)_300px\]{grid-template-columns:minmax(0,1fr) 300px}.md\:justify-end{justify-content:flex-end}.md\:justify-start{justify-content:flex-start}.md\:gap-10{gap:calc(var(--spacing) * 10)}.md\:gap-12{gap:calc(var(--spacing) * 12)}.md\:gap-16{gap:calc(var(--spacing) * 16)}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.md\:text-\[5rem\]{font-size:5rem}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-\[calc\(var\(--ipi-header-h\,0px\)\+var\(--ipi-subnav-h\,0px\)\+20px\)\]{top:calc(var(--ipi-header-h,0px) + var(--ipi-subnav-h,0px) + 20px)}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:max-w-\(--container-prose\){max-width:var(--container-prose)}.lg\:columns-3{columns:3}.lg\:columns-4{columns:4}.lg\:grid-cols-\(--cols-d\){grid-template-columns:var(--cols-d)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1\.6fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_320px\]{grid-template-columns:minmax(0,1fr) 320px}.lg\:grid-cols-\[repeat\(3\,minmax\(0\,350px\)\)\]{grid-template-columns:repeat(3,minmax(0,350px))}.lg\:grid-cols-\[repeat\(4\,minmax\(0\,350px\)\)\]{grid-template-columns:repeat(4,minmax(0,350px))}.lg\:grid-rows-\[300px_100px_auto\]{grid-template-rows:300px 100px auto}.lg\:grid-rows-\[440px_100px_auto\]{grid-template-rows:440px 100px auto}.lg\:items-start{align-items:flex-start}.lg\:gap-16{gap:calc(var(--spacing) * 16)}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:border-border{border-color:var(--color-border)}.lg\:object-bottom{object-position:bottom}.lg\:object-center{object-position:center}.lg\:object-top{object-position:top}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}@media not all and (min-width:80rem){.lg\:max-xl\:text-\[13px\]{font-size:13px}}}@media(min-width:80rem){.xl\:absolute{position:absolute}.xl\:inset-x-0{inset-inline:0}.xl\:top-0{top:0}.xl\:mt-0{margin-top:0}.xl\:ml-0{margin-left:0}.xl\:flex{display:flex}.xl\:inline-block{display:inline-block}.xl\:inline-grid{display:inline-grid}.xl\:h-\(--hero-img-h\){height:var(--hero-img-h)}.xl\:w-0{width:0}.xl\:w-full{width:100%}.xl\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.xl\:flex-col{flex-direction:column}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:justify-between{justify-content:space-between}.xl\:justify-center{justify-content:center}.xl\:gap-0{gap:0}.xl\:gap-6{gap:calc(var(--spacing) * 6)}.xl\:gap-x-12{column-gap:calc(var(--spacing) * 12)}.xl\:overflow-visible{overflow:visible}.xl\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.xl\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.xl\:border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.xl\:py-\[11px\]{padding-block:11px}.xl\:pt-0{padding-top:0}.xl\:pl-0{padding-left:0}.xl\:pl-10{padding-left:calc(var(--spacing) * 10)}.xl\:align-baseline{vertical-align:baseline}.xl\:align-middle{vertical-align:middle}.xl\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.xl\:text-\[0px\]{font-size:0}.xl\:leading-\[0\]{--tw-leading:0;line-height:0}.xl\:whitespace-nowrap{white-space:nowrap}.xl\:\[--hero-img-h\:540px\]{--hero-img-h:540px}.xl\:\[--hero-img-h\:720px\]{--hero-img-h:720px}.xl\:\[--hero-img-h\:clamp\(540px\,calc\(22vw_\+_120px\)\,640px\)\]{--hero-img-h:clamp(540px, calc(22vw + 120px) , 640px)}.xl\:\[--hero-img-h\:clamp\(720px\,calc\(30vw_\+_120px\)\,880px\)\]{--hero-img-h:clamp(720px, calc(30vw + 120px) , 880px)}.xl\:not-first\:border-t:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:1px}}@media(min-width:…){.min-\[…\]\:flex{display:flex}}.\[\&_\.page-numbers\]\:inline-flex .page-numbers{display:inline-flex}.\[\&_\.page-numbers\]\:h-9 .page-numbers{height:calc(var(--spacing) * 9)}.\[\&_\.page-numbers\]\:min-w-9 .page-numbers{min-width:calc(var(--spacing) * 9)}.\[\&_\.page-numbers\]\:items-center .page-numbers{align-items:center}.\[\&_\.page-numbers\]\:justify-center .page-numbers{justify-content:center}.\[\&_\.page-numbers\]\:rounded-sm .page-numbers{border-radius:var(--radius-sm)}.\[\&_\.page-numbers\]\:px-2 .page-numbers{padding-inline:calc(var(--spacing) * 2)}.\[\&_\.page-numbers\]\:font-label .page-numbers{font-family:var(--font-label)}.\[\&_\.page-numbers\]\:text-sm .page-numbers{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_\.page-numbers\]\:font-semibold .page-numbers{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_\.page-numbers\]\:no-underline .page-numbers{text-decoration-line:none}.\[\&_\.page-numbers\.current\]\:bg-accent .page-numbers.current{background-color:var(--color-accent)}.\[\&_\.page-numbers\.current\]\:text-accent-contrast .page-numbers.current{color:var(--color-accent-contrast)}.\[\&_\.page-numbers\.dots\]\:min-w-0 .page-numbers.dots{min-width:0}.\[\&_\.page-numbers\.dots\]\:text-muted .page-numbers.dots{color:var(--color-muted)}.\[\&_a\]\:text-accent a{color:var(--color-accent)}.\[\&_a\]\:underline a{text-decoration-line:underline}@media(hover:hover){.hover\:\[\&_a\]\:text-accent-hover:hover a{color:var(--color-accent-hover)}}.\[\&_a\.page-numbers\]\:text-text a.page-numbers{color:var(--color-text)}.\[\&_a\.page-numbers\:hover\]\:bg-accent-tint a.page-numbers:hover{background-color:var(--color-accent-tint)}.\[\&_a\.page-numbers\:hover\]\:text-accent a.page-numbers:hover{color:var(--color-accent)}.\[\&_blockquote\]\:my-6 blockquote{margin-block:calc(var(--spacing) * 6)}.\[\&_blockquote\]\:border-l-4 blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.\[\&_blockquote\]\:border-accent blockquote{border-color:var(--color-accent)}.\[\&_blockquote\]\:pl-4 blockquote{padding-left:calc(var(--spacing) * 4)}.\[\&_blockquote\]\:text-muted blockquote{color:var(--color-muted)}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_blockquote_p\:not\(\:first-child\)\]\:mt-4 blockquote p:not(:first-child){margin-top:calc(var(--spacing) * 4)}.\[\&_h2\]\:mt-8 h2{margin-top:calc(var(--spacing) * 8)}.\[\&_h2\]\:mb-4 h2{margin-bottom:calc(var(--spacing) * 4)}.\[\&_h2\]\:text-2xl h2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\[\&_h2\]\:font-bold h2{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}@media(min-width:48rem){.md\:\[\&_h2\]\:text-3xl h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}.\[\&_h2\:first-child\]\:mt-0 h2:first-child{margin-top:0}.\[\&_h2\~p\]\:text-base h2~p{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h3\]\:mt-8 h3{margin-top:calc(var(--spacing) * 8)}.\[\&_h3\]\:mb-3 h3{margin-bottom:calc(var(--spacing) * 3)}.\[\&_h3\]\:text-xl h3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&_h3\]\:font-semibold h3{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h3\:first-child\]\:mt-0 h3:first-child{margin-top:0}.\[\&_img\]\:rounded-xl img{border-radius:var(--radius-xl)}.\[\&_li\]\:mb-1 li{margin-bottom:var(--spacing)}.\[\&_li\:last-child\]\:mb-0 li:last-child{margin-bottom:0}.\[\&_ol\]\:my-2 ol{margin-block:calc(var(--spacing) * 2)}.\[\&_ol\]\:mt-3 ol{margin-top:calc(var(--spacing) * 3)}.\[\&_ol\]\:mt-4 ol{margin-top:calc(var(--spacing) * 4)}.\[\&_ol\]\:mb-4 ol{margin-bottom:calc(var(--spacing) * 4)}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-5 ol{padding-left:calc(var(--spacing) * 5)}.\[\&_ol\]\:pl-6 ol{padding-left:calc(var(--spacing) * 6)}.\[\&_p\]\:mb-1 p{margin-bottom:var(--spacing)}.\[\&_p\]\:mb-2 p{margin-bottom:calc(var(--spacing) * 2)}.\[\&_p\]\:mb-4 p{margin-bottom:calc(var(--spacing) * 4)}.\[\&_p\+p\]\:mt-3 p+p{margin-top:calc(var(--spacing) * 3)}.\[\&_p\+p\]\:mt-4 p+p{margin-top:calc(var(--spacing) * 4)}.\[\&_p\:last-child\]\:mb-0 p:last-child{margin-bottom:0}.\[\&_table\]\:my-6 table{margin-block:calc(var(--spacing) * 6)}.\[\&_table\]\:w-full table{width:100%}.\[\&_table\]\:border-collapse table{border-collapse:collapse}.\[\&_td\]\:border td{border-style:var(--tw-border-style);border-width:1px}.\[\&_td\]\:border-border td{border-color:var(--color-border)}.\[\&_td\]\:p-2 td{padding:calc(var(--spacing) * 2)}.\[\&_td\]\:align-top td{vertical-align:top}.\[\&_th\]\:border th{border-style:var(--tw-border-style);border-width:1px}.\[\&_th\]\:border-border th{border-color:var(--color-border)}.\[\&_th\]\:bg-surface-alt th{background-color:var(--color-surface-alt)}.\[\&_th\]\:p-2 th{padding:calc(var(--spacing) * 2)}.\[\&_th\]\:text-left th{text-align:left}.\[\&_ul\]\:my-2 ul{margin-block:calc(var(--spacing) * 2)}.\[\&_ul\]\:mt-3 ul{margin-top:calc(var(--spacing) * 3)}.\[\&_ul\]\:mt-4 ul{margin-top:calc(var(--spacing) * 4)}.\[\&_ul\]\:mb-4 ul{margin-bottom:calc(var(--spacing) * 4)}.\[\&_ul\]\:inline-block ul{display:inline-block}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-5 ul{padding-left:calc(var(--spacing) * 5)}.\[\&_ul\]\:pl-6 ul{padding-left:calc(var(--spacing) * 6)}.\[\&_ul\]\:text-left ul{text-align:left}.\[\&\>\*\]\:mb-3\.5>*{margin-bottom:calc(var(--spacing) * 3.5)}.\[\&\>\*\]\:mb-5>*{margin-bottom:calc(var(--spacing) * 5)}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&\>a\]\:w-full>a{width:100%}.\[\&\>a\]\:justify-center>a{justify-content:center}.\[\&\>a\]\:text-center>a{text-align:center}.\[\&\>blockquote\]\:my-6>blockquote{margin-block:calc(var(--spacing) * 6)}.\[\&\>blockquote\]\:border-l-4>blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.\[\&\>blockquote\]\:border-accent>blockquote{border-color:var(--color-accent)}.\[\&\>blockquote\]\:pl-4>blockquote{padding-left:calc(var(--spacing) * 4)}.\[\&\>blockquote\]\:text-muted>blockquote{color:var(--color-muted)}.\[\&\>blockquote\]\:italic>blockquote{font-style:italic}.\[\&\>h2\]\:mt-4>h2{margin-top:calc(var(--spacing) * 4)}.\[\&\>h2\]\:mt-10>h2{margin-top:calc(var(--spacing) * 10)}.\[\&\>h2\]\:mb-4>h2{margin-bottom:calc(var(--spacing) * 4)}.\[\&\>h2\]\:text-2xl>h2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\[\&\>h2\]\:font-bold>h2{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&\>h2\]\:text-text>h2{color:var(--color-text)}.\[\&\>h3\]\:mt-8>h3{margin-top:calc(var(--spacing) * 8)}.\[\&\>h3\]\:mb-3>h3{margin-bottom:calc(var(--spacing) * 3)}.\[\&\>h3\]\:text-xl>h3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&\>h3\]\:font-semibold>h3{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&\>h3\]\:text-text>h3{color:var(--color-text)}.\[\&\>ol\]\:mb-4>ol{margin-bottom:calc(var(--spacing) * 4)}.\[\&\>ol\]\:list-decimal>ol{list-style-type:decimal}.\[\&\>ol\]\:pl-6>ol{padding-left:calc(var(--spacing) * 6)}.\[\&\>p\]\:mb-4>p,.\[\&\>ul\]\:mb-4>ul{margin-bottom:calc(var(--spacing) * 4)}.\[\&\>ul\]\:list-disc>ul{list-style-type:disc}.\[\&\>ul\]\:pl-6>ul{padding-left:calc(var(--spacing) * 6)}.ipi-post-content>:is(.ipi-image,.ipi-video-embed){padding-block:0}.ipi-post-content>section>:is(div,figure){padding-inline:0}.ipi-post-content .ipi-rich-text :is(p,ul,ol,blockquote):last-child{margin-bottom:0}:not(.ipi-post-content)>:is(.ipi-rich-text,.ipi-accordion,.ipi-quote).ipi-ground-none:not(:has(>img)):has(+:is(.ipi-rich-text,.ipi-accordion,.ipi-quote).ipi-ground-none:not(.ipi-rich-text--headed))>:is(.relative,figure){padding-bottom:var(--space-gutter)}:not(.ipi-post-content)>:is(.ipi-rich-text,.ipi-accordion,.ipi-quote).ipi-ground-none:not(:has(>img))+:is(.ipi-rich-text,.ipi-accordion,.ipi-quote).ipi-ground-none:not(:has(>img)):not(.ipi-rich-text--headed)>:is(.relative,figure){padding-top:0}}.ipi-hr{background:var(--hr-bar);width:104px;height:3px;box-shadow:var(--hr-glow);border-radius:0 2px 2px 0}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}.ipi-post-content :where(img){cursor:zoom-in}.ipi-post-content .ipi-rich-text :is(img,figure,picture){margin-block:var(--space-gutter)}.ipi-lightbox{background:0 0;border:0;width:fit-content;max-width:100vw;height:fit-content;max-height:100vh;margin:auto;padding:0;position:fixed;top:0;right:0;bottom:0;left:0;overflow:visible}.ipi-lightbox::backdrop{background:#000000d9}.ipi-lightbox img{border-radius:var(--radius-xl);width:auto;max-width:92vw;height:auto;max-height:92vh;box-shadow:var(--elev-3);display:block}.ipi-lightbox__close{z-index:1;width:40px;height:40px;color:var(--color-text);cursor:pointer;box-shadow:var(--elev-2);background:#fff;border:0;border-radius:9999px;justify-content:center;align-items:center;font-size:26px;line-height:1;display:inline-flex;position:absolute;top:-16px;right:-16px}.ipi-video-lightbox{background:0 0;border:0;width:min(92vw,1200px);max-width:92vw;height:fit-content;margin:auto;padding:0;position:fixed;top:0;right:0;bottom:0;left:0;overflow:visible}.ipi-video-lightbox::backdrop{background:#000000d9}.ipi-video-lightbox__frame{aspect-ratio:16/9;border-radius:var(--radius-xl);width:100%;box-shadow:var(--elev-3);background:#000;position:relative;overflow:hidden}.ipi-video-lightbox__frame iframe{border:0;width:100%;height:100%;position:absolute;top:0;right:0;bottom:0;left:0}@keyframes ipi-marquee{to{transform:translate(-50%)}}@keyframes ipi-px-pulse{0%,to{opacity:var(--o,1)}50%{opacity:calc(var(--o,1) * .4)}}:root{--ipi-subnav-h:0px}[data-onpage]{scroll-margin-top:var(--ipi-subnav-h,0px)}[data-onpage]:focus{outline:none}.opn .opn__links a{color:var(--color-muted)}.opn .opn__links a:hover,.opn .opn__links a[aria-current]{color:var(--color-accent)}.opn .opn__links a:focus-visible{box-shadow:var(--focus-ring);outline:none}.ipi-course>.opn,.ipi-hero-editorial+.opn{margin-top:20px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}

:root{--color-accent: #901D82;--color-accent-hover: #6C1662;--color-accent-contrast: #ffffff;--color-accent-tint: #F6EBF4;--color-surface-control: #fcf9fb;--color-brand-100: #F6EBF4;--color-brand-500: #901D82;--color-brand-600: #7C1970;--color-brand-700: #6C1662;--color-thermal: #F0A02A;--hr-bar: linear-gradient(90deg, #540979, #901D82 70%, #C36BB4);--hr-glow: 14px 0 10px -4px rgba(240, 160, 42, .55);--toc-dot-glow: 0 0 0 4px rgba(144, 29, 130, .14), 0 0 10px rgba(144, 29, 130, .5);--color-text: #2B2B33;--color-muted: #5A5A63;--color-border: #E6E2E8;--color-border-framed: #2B2B33;--color-bg: #F5F9FC;--color-surface: #FFFFFF;--color-surface-alt: #FAF9FB;--color-surface-warm: #FEFAF2;--color-surface-footer: #2B2B33;--color-surface-footer-band: #36363F;--color-heading-inverse: #FFFFFF;--color-text-inverse: #D8D5DD;--color-muted-inverse: #A29FA9;--color-link-inverse: #CB7EBD;--color-border-inverse: rgba(255, 255, 255, .14);--color-danger: #B3261E;--color-danger-tint: #FBEDEC;--color-grad-start: #020024;--color-grad-mid: #540979;--color-grad-end: #C36BB4;--gradient-hero: linear-gradient(120deg, #020024 0%, #540979 55%, #901D82 100%);--gradient-night: linear-gradient(120deg, #020024 0%, #540979 60%, #901D82 100%);--wash-dawn: linear-gradient(115deg, #FFFFFF 35%, #F6EBF4 75%, #FEFAF2 100%);--highlight-ramp: linear-gradient(100deg, #540979 0%, #75136F 33%, #901D82 66%, #A8388F 100%);--color-hero-shade: #1E061A;--overlay-hero-flat: color-mix(in srgb, var(--color-hero-shade) 60%, transparent);--overlay-hero-horizontal: linear-gradient(90deg, color-mix(in srgb, var(--color-hero-shade) 39%, transparent) 0%, color-mix(in srgb, var(--color-hero-shade) 36%, transparent) 58%, color-mix(in srgb, var(--color-hero-shade) 15%, transparent) 76%, color-mix(in srgb, var(--color-accent) 31%, transparent) 94%, color-mix(in srgb, var(--color-accent) 40%, transparent) 100%);--overlay-hero-vertical: linear-gradient(0deg, color-mix(in srgb, var(--color-accent) 40%, transparent) 0%, color-mix(in srgb, var(--color-accent) 12%, transparent) 16%, transparent 32%), linear-gradient(90deg, color-mix(in srgb, var(--color-hero-shade) 39%, transparent) 0%, color-mix(in srgb, var(--color-hero-shade) 36%, transparent) 57%, color-mix(in srgb, var(--color-hero-shade) 23%, transparent) 74%, color-mix(in srgb, var(--color-hero-shade) 15%, transparent) 100%);--overlay-hero-brand: linear-gradient(to top, color-mix(in srgb, var(--color-grad-start) 72%, transparent) 0%, color-mix(in srgb, var(--color-grad-start) 10%, transparent) 42%, color-mix(in srgb, var(--color-grad-start) 28%, transparent) 100%), linear-gradient(104deg, color-mix(in srgb, var(--color-grad-start) 94%, transparent) 0%, color-mix(in srgb, var(--color-grad-mid) 80%, transparent) 38%, color-mix(in srgb, var(--color-accent) 42%, transparent) 66%, color-mix(in srgb, var(--color-grad-end) 14%, transparent) 100%);--scrim-hero-edge: linear-gradient(90deg, color-mix(in srgb, var(--color-grad-start) 35%, transparent) 0%, transparent 40%);--scrim-hero-flat: color-mix(in srgb, var(--color-grad-start) 62%, transparent);--fill-hero-control: color-mix(in srgb, var(--color-grad-start) 45%, transparent);--fill-hero-control-active: color-mix(in srgb, var(--color-grad-start) 75%, transparent);--ring-hero-scale: 0 0 0 1.5px color-mix(in srgb, var(--color-grad-start) 25%, transparent);--gradient-palette-scale: linear-gradient(to bottom, #F0A02A 0 20%, #D9612F 20% 40%, #A8388F 40% 60%, #901D82 60% 80%, #540979 80% 100%);--font-heading: "Montserrat", "Montserrat Fallback", -apple-system, "Segoe UI", Roboto, sans-serif;--font-sans: "Open Sans", "Open Sans Fallback", -apple-system, "Segoe UI", Roboto, sans-serif;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--radius-2xl: 16px;--color-btn-bar-secondary: #D9BBD3;--color-btn-bar-ondark: #C9C5CE;--elev-1: 0 1px 2px rgba(84,9,121,.06), 0 1px 3px rgba(84,9,121,.09);--elev-2: 0 4px 10px rgba(84,9,121,.1), 0 2px 4px rgba(84,9,121,.08);--elev-3: 0 14px 28px rgba(84,9,121,.16), 0 6px 10px rgba(84,9,121,.1);--drop-shadow-badge: 0 2px 4px rgba(43,43,51,.18);--lift-y: -3px;--focus-ring: 0 0 0 2px #fff, 0 0 0 4px var(--color-accent);--dur-state: .16s;--dur-layout: .24s;--ease-out: cubic-bezier(.2, .8, .25, 1);--spacing: .3125rem;--container-page: 70rem;--container-wide: 84rem}@font-face{font-family:Montserrat Fallback;src:local("Arial");size-adjust:112.7118%;ascent-override:85.8657%;descent-override:22.2726%;line-gap-override:0%}@font-face{font-family:Open Sans Fallback;src:local("Arial");size-adjust:106.6062%;ascent-override:101.4954%;descent-override:27.7891%;line-gap-override:0%}@font-face{font-family:Montserrat;font-style:normal;font-weight:400;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/montserrat-400.woff2?v=4) format("woff2")}@font-face{font-family:Montserrat;font-style:normal;font-weight:500;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/montserrat-500.woff2?v=4) format("woff2")}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/montserrat-600.woff2?v=4) format("woff2")}@font-face{font-family:Montserrat;font-style:normal;font-weight:700;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/montserrat-700.woff2?v=4) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/open-sans-400.woff2?v=4) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-weight:500;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/open-sans-500.woff2?v=4) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-weight:600;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/open-sans-600.woff2?v=4) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-weight:700;font-display:swap;src:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../fonts/open-sans-700.woff2?v=4) format("woff2")}

.ipi-field{position:absolute;inset:0;pointer-events:none;z-index:0}.ipi-field--right{-webkit-mask-image:linear-gradient(90deg,transparent 0,transparent calc(50% + 40px),#000 calc(50% + 360px));mask-image:linear-gradient(90deg,transparent 0,transparent calc(50% + 40px),#000 calc(50% + 360px))}.ipi-field--left{-webkit-mask-image:linear-gradient(270deg,transparent 0,transparent calc(50% + 140px),#000 calc(50% + 460px));mask-image:linear-gradient(270deg,transparent 0,transparent calc(50% + 140px),#000 calc(50% + 460px))}.ipi-field--poly{background:conic-gradient(from 30deg,color-mix(in srgb,var(--color-text) 3%,transparent) 60deg,color-mix(in srgb,var(--color-text) 1.2%,transparent) 0 120deg,color-mix(in srgb,var(--color-text) 4%,transparent) 0 180deg,color-mix(in srgb,var(--color-text) 1.8%,transparent) 0 240deg,color-mix(in srgb,var(--color-text) 3.2%,transparent) 0 300deg,color-mix(in srgb,var(--color-text) .8%,transparent) 0) 0 0/150px 130px}.ipi-field--mesh{background:repeating-linear-gradient(60deg,color-mix(in srgb,var(--color-text) 13%,transparent) 0 1px,transparent 1px 78px),repeating-linear-gradient(-60deg,color-mix(in srgb,var(--color-text) 13%,transparent) 0 1px,transparent 1px 78px),repeating-linear-gradient(0deg,color-mix(in srgb,var(--color-text) 8%,transparent) 0 1px,transparent 1px 68px)}.ipi-field--tri{background:repeating-linear-gradient(60deg,color-mix(in srgb,var(--color-text) 10%,transparent) 0 1px,transparent 1px 128px),repeating-linear-gradient(-60deg,color-mix(in srgb,var(--color-text) 10%,transparent) 0 1px,transparent 1px 128px),repeating-linear-gradient(0deg,color-mix(in srgb,var(--color-text) 7%,transparent) 0 1px,transparent 1px 111px)}.ipi-field--nodes{background:radial-gradient(circle,color-mix(in srgb,var(--color-text) 32%,transparent) 2px,transparent 2.6px) 0 0/84px 84px,repeating-linear-gradient(45deg,color-mix(in srgb,var(--color-text) 9%,transparent) 0 1px,transparent 1px 59.4px),repeating-linear-gradient(-45deg,color-mix(in srgb,var(--color-text) 9%,transparent) 0 1px,transparent 1px 59.4px)}.ipi-field--iso{background:repeating-linear-gradient(30deg,color-mix(in srgb,var(--color-text) 10%,transparent) 0 1px,transparent 1px 64px),repeating-linear-gradient(150deg,color-mix(in srgb,var(--color-text) 10%,transparent) 0 1px,transparent 1px 64px),repeating-linear-gradient(90deg,color-mix(in srgb,var(--color-text) 6%,transparent) 0 1px,transparent 1px 64px)}.ipi-field--grid{background:repeating-linear-gradient(90deg,color-mix(in srgb,var(--color-text) 9%,transparent) 0 1px,transparent 1px 48px),repeating-linear-gradient(0deg,color-mix(in srgb,var(--color-text) 9%,transparent) 0 1px,transparent 1px 48px)}.ipi-field--lattice{background:radial-gradient(circle,color-mix(in srgb,var(--color-text) 30%,transparent) 1.4px,transparent 1.8px) 0 0/40px 40px}.ipi-field--floor{perspective:600px;-webkit-mask-image:none;mask-image:none}.ipi-field--floor:before{content:"";position:absolute;left:-20%;right:-20%;top:38%;height:120%;transform-origin:50% 0;transform:rotateX(62deg);background:repeating-linear-gradient(90deg,color-mix(in srgb,var(--color-text) 14%,transparent) 0 1px,transparent 1px 60px),repeating-linear-gradient(0deg,color-mix(in srgb,var(--color-text) 14%,transparent) 0 1px,transparent 1px 60px);-webkit-mask-image:linear-gradient(180deg,transparent,#000 30%,#000);mask-image:linear-gradient(180deg,transparent,#000 30%,#000)}.ipi-field--blobs{background:radial-gradient(ellipse 240px 190px at 80% 38%,color-mix(in srgb,var(--color-thermal) 30%,transparent),transparent 70%),radial-gradient(ellipse 380px 300px at 74% 46%,color-mix(in srgb,var(--color-accent) 22%,transparent),transparent 70%),radial-gradient(ellipse 540px 430px at 66% 52%,color-mix(in srgb,var(--color-grad-mid) 15%,transparent),transparent 72%)}.ipi-field--overlay{background-size:cover;background-position:center right;mix-blend-mode:multiply;opacity:.5}.ipi-field--left.ipi-field--overlay{background-position:center left}.ipi-field--pylons{background-image:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../assets/imagery/fields/pylons-lines.png);opacity:.55}.ipi-field--gears{background-image:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../assets/imagery/fields/gears-lines.png);opacity:.35}.ipi-field--nuts{background-image:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../assets/imagery/fields/hex-nuts-lines.png);opacity:.35}.ipi-field--nuts-floor{perspective:600px}.ipi-field--nuts-floor:before{content:"";position:absolute;left:-10%;right:-10%;top:30%;height:130%;transform-origin:50% 0;transform:rotateX(58deg);background:url(https://infraredtraining.com.au/wp-content/themes/ipi-theme-child/dist/../assets/imagery/fields/hex-nuts-lines.png) center/1100px auto;opacity:.38;mix-blend-mode:multiply;-webkit-mask-image:linear-gradient(180deg,transparent,#000 28%,#000);mask-image:linear-gradient(180deg,transparent,#000 28%,#000)}@media(max-width:860px){section>.ipi-field{display:none}}

/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme;@layer utilities{.visible{visibility:visible}.relative{position:relative}.mx-auto{margin-inline:auto}.-mb-px{margin-bottom:-1px}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.h-\[15px\]{height:15px}.w-\[15px\]{width:15px}.max-w-3xl{max-width:var(--container-3xl)}.shrink-0{flex-shrink:0}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.gap-1{gap:var(--spacing,.25rem)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-accent{border-color:var(--color-accent,var(--color-brand-500))}.border-border{border-color:var(--color-border,var(--color-neutral-200))}.border-transparent{border-color:#0000}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-6{padding-block:calc(var(--spacing,.25rem) * 6)}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height,1.6))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-accent{color:var(--color-accent,var(--color-brand-500))}.text-muted{color:var(--color-muted,var(--color-neutral-500))}.text-text{color:var(--color-text,var(--color-neutral-900))}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:text-text:hover{color:var(--color-text,var(--color-neutral-900))}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}

/**
 * IPI Booking System — front-end styles for [ipi_bookings] (design v2).
 *
 * Scoped under .ipi-bookings with ipi- prefixed classes to avoid theme /
 * WPBakery clashes. Ported from the v2 handoff (compact density).
 */

.ipi-bookings,
.ipi-course {
	/* Bound to the theme design system (ipi-theme @theme / child brand.css). These
	   aliases keep the plugin's class names while a token change in the theme moves
	   the plugin too — one source of truth. Literal fallbacks cover a themeless load. */
	--ipi-brand: var(--color-accent, #901D82);
	--ipi-brand-dark: var(--color-accent-hover, #6C1662);
	--ipi-ink: var(--color-text, #2B2B33);
	--ipi-muted: var(--color-muted, #5A5A63);
	--ipi-line: var(--color-border, #E6E2E8);
	--ipi-surface: var(--color-surface, #FFFFFF);   /* white card ground on the ice page */
	--ipi-bg: var(--color-surface-alt, #FAF9FB);
	--ipi-row-alt: var(--color-surface-alt, #FAF9FB); /* zebra striping on session rows */
	--ipi-tint: var(--color-accent-tint, #F6EBF4);    /* magenta hover tint */
	--ipi-page: var(--color-bg, #F5F9FC);             /* page ground (ice) */
	--ipi-on-brand: var(--color-accent-contrast, #FFFFFF);   /* text on a magenta ground */
	--ipi-surface-control: var(--color-surface-control, #FFFFFF); /* secondary button / input fill */
	/* Button base bars (DS "K1"): each variant's own darker shade. */
	--ipi-bar-primary: var(--color-btn-bar-primary, #6C1662);
	--ipi-bar-secondary: var(--color-btn-bar-secondary, #D9BBD3);
	--ipi-bar-ondark: var(--color-btn-bar-ondark, #C9C5CE);
	--ipi-border-framed: var(--color-border-framed, #2B2B33); /* on-dark button frame */
	/* Inverse text on dark grounds — opaque, never alpha-muted white (DS). */
	--ipi-inverse-heading: var(--color-heading-inverse, #FFFFFF);
	--ipi-inverse-text: var(--color-text-inverse, #D8D5DD);
	--ipi-inverse-link: var(--color-link-inverse, #CB7EBD);
	/* Elevation ladder (DS): 1 resting cards, 2 raised (tooltips, selected), 3 overlays + hover lift. */
	--ipi-elev-1: var(--elev-1, 0 1px 2px rgba(84,9,121,.06), 0 1px 3px rgba(84,9,121,.09));
	--ipi-elev-2: var(--elev-2, 0 4px 10px rgba(84,9,121,.10), 0 2px 4px rgba(84,9,121,.08));
	--ipi-elev-3: var(--elev-3, 0 14px 28px rgba(84,9,121,.16), 0 6px 10px rgba(84,9,121,.10));
	--ipi-highlight: var(--highlight-ramp, linear-gradient(100deg, #540979 0%, #75136F 33%, #901D82 66%, #A8388F 100%));
	--ipi-media-fade: linear-gradient(to bottom, transparent 50%, rgba(0,0,0,0.25) 100%); /* image foot fade */
	--ipi-overlay: rgba(20,12,28,0.72);  /* dark label chip over a map / image */
	/* Heading rule (DS K5) — only used when the theme's ipi_heading_rule() is absent. */
	--ipi-rule-bar: var(--hr-bar, linear-gradient(90deg, #540979, #901D82 70%, #C36BB4));
	--ipi-rule-glow: var(--hr-glow, 14px 0 10px -4px rgba(240, 160, 42, .55));
	/* Stepped radius scale: controls 4px, cards/tables 8px, media 12px. */
	--ipi-radius: var(--radius-sm, 4px);
	--ipi-radius-card: var(--radius-lg, 8px);
	--ipi-radius-media: var(--radius-xl, 12px);
	--ipi-row-pad: 10px;
	--ipi-block-py: var(--block-py, 3rem); /* section top/bottom padding — the theme's one block-rhythm token */
	/* Focus ring follows the theme's token (solid accent ring + white gap). */
	--ipi-focus: var(--focus-ring, 0 0 0 2px #fff, 0 0 0 4px #901D82);
	/* Standard control padding — ALL buttons and inputs use this (10px 15px).
	   Keep this the single source of truth. */
	--ipi-pad-control: 10px 15px;
	/* IPI Learning Orange — graphics/fills only, never text or grounds. */
	--ipi-orange: var(--color-thermal, #F0A02A);
	/* CTA-card gradient (DS --gradient-night) — the exam banner. */
	--ipi-banner-gradient: var(--gradient-night, linear-gradient(120deg, #020024 0%, #540979 60%, #901D82 100%));
	/* Faint white dot grid, laid over a dark surface as a decorative texture
	   (see the exam banner). Pair the image with its size token. */
	--ipi-dot-texture: radial-gradient(rgba(255,255,255,0.17) 1.6px, transparent 2.1px);
	--ipi-dot-texture-size: 24px 24px;
	/* Savings green — the same value as the form's early-bird discount line (ipi-gravityforms.css). */
	--ipi-saving: #157347;

	/* Heading type scale (reusable; override the size vars per breakpoint). */
	--ipi-h1-size: 44px;
	--ipi-h1-line: 1.12;
	/* Letter-spacing (tracking) system. Body/buttons/sentence-case = normal. */
	--ipi-track-tight: -0.01em; /* large display headings (H1) */
	--ipi-track-heading: 0.04em; /* larger uppercase headings (H2) */
	--ipi-track-label: 0.08em;  /* small uppercase micro-labels (≤12px) */

	/* --- TYPE SCALE: the single source of truth for every surface in this plugin
	   (the /book/ feed, the single booking pages, and the online course directory,
	   which layers on top of this file). A hardcoded px font-size anywhere is drift
	   — change the token, or record the exception here with a reason.

	   Sizes follow ROLE, not tag: an <h3> that is a card title takes --ipi-fs-title,
	   not --ipi-fs-h3. --ipi-fs-h3 is the sub-section heading step (18px) —
	   reserved, nothing uses it yet.

	   Deliberate exception: icon/glyph dimensions (.ipi-to-top, the breadcrumb
	   chevron) are not type.

	   NOT here: the embedded Gravity Form. Its skin lives in the site's
	   `ipi-gravityforms` mu-plugin, scoped to `.gform_wrapper.gform-theme` so it
	   covers every Orbital form site-wide. Do not re-add GF rules to this file —
	   see the note at the bottom. */
	--ipi-fs-block: 22px;   /* mixed-case block heading (single-page H2) */
	--ipi-fs-h2: 20px;      /* UPPERCASE schedule group heading + banner heading */
	--ipi-fs-h3: 18px;      /* sub-section heading (reserved) */
	--ipi-fs-deck: 16px;    /* intro / deck paragraph under an H1 */
	--ipi-fs-title: 16px;   /* item + card titles */
	--ipi-fs-body: 15px;    /* body base, group blurbs, definition values */
	--ipi-fs-cell: 14px;    /* table cells, fact strips, breadcrumbs, selects */
	--ipi-fs-control: 13px; /* standard buttons + chips */
	--ipi-fs-small: 13px;   /* secondary / meta text */
	--ipi-fs-micro: 12px;   /* micro-labels, compact row CTAs */
	--ipi-fs-label: 11px;   /* smallest uppercase labels + sentence-case pills */

	max-width: 1120px;
	margin: 0 auto;
	font-family: var(--font-sans, inherit);
	color: var(--ipi-ink);
	font-size: var(--ipi-fs-body);
	box-sizing: border-box;
}
/* Canonical block gutter — mirrors the theme's ipi_container_class() (24px, 32px ≥640px);
   see ipi-theme docs/block-creation.md "Layout consistency". Carried by every feed root
   (.ipi-bookings covers schedule + directory + venues). */
.ipi-bookings { padding-left: 24px; padding-right: 24px; }
@media (min-width: 640px) { .ipi-bookings { padding-left: 32px; padding-right: 32px; } }
/* Top spacing is the schedule feed's only — the directory, venues and /book/ single
   pages own their own vertical rhythm (bands / padding-block), so exclude them. */
.ipi-bookings:not(.ipi-locations):not(.ipi-online-directory):not(.ipi-single) { margin-top: var(--ipi-block-py); }
.ipi-bookings *,
.ipi-bookings *::before,
.ipi-bookings *::after,
.ipi-course *,
.ipi-course *::before,
.ipi-course *::after { box-sizing: border-box; }
.ipi-bookings h1,
.ipi-bookings h2,
.ipi-bookings h3,
.ipi-bookings h4,
.ipi-course h1,
.ipi-course h2,
.ipi-course h3,
.ipi-course h4 { margin: 0; }
.ipi-bookings a, .ipi-course a { color: var(--ipi-brand); text-decoration: none; }
.ipi-bookings a:hover, .ipi-course a:hover { color: var(--ipi-brand-dark); }
/* Inline prose links must not rely on colour alone (WCAG 1.4.1) — underline links inside body text.
   Scoped to paragraphs, so buttons, cards, the breadcrumb and the on-this-page nav are untouched. */
.ipi-bookings p a, .ipi-course p a { text-decoration: underline; }
.ipi-bookings [hidden], .ipi-course [hidden] { display: none !important; }
/* Screen-reader-only (visually hidden but announced). */
.ipi-sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* Visible keyboard focus for every interactive element. The theme may reset UA
   outlines, so define our own; outline-offset keeps the ring on the page
   background, so it stays visible even on solid-purple buttons. */
.ipi-bookings a:focus-visible,
.ipi-bookings button:focus-visible,
.ipi-bookings select:focus-visible,
.ipi-course a:focus-visible,
.ipi-course button:focus-visible,
.ipi-course summary:focus-visible { outline: none; border-radius: var(--ipi-radius); box-shadow: var(--ipi-focus); }
/* Respect reduced-motion: near-instant transitions, no smooth scroll. */
@media ( prefers-reduced-motion: reduce ) {
	.ipi-bookings *, .ipi-bookings *::before, .ipi-bookings *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; }
}

/* ---- control bar + filters ---- */
.ipi-control-bar { padding: 18px 0 0; margin-bottom: 26px; }
.ipi-filter-label { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-label); font-weight: 700; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-muted); }
.ipi-results-line { font-size: var(--ipi-fs-small); color: var(--ipi-muted); margin: 12px 0 0; }
.ipi-nav-row { display: flex; align-items: center; justify-content: flex-end; gap: 6px; margin-top: 8px; }
.ipi-expand-link { display: inline-flex; align-items: center; gap: 7px; border: none; background: none; font: inherit; font-size: var(--ipi-fs-small); font-weight: 600; color: var(--ipi-muted); cursor: pointer; padding: 5px 8px; }
.ipi-expand-link:hover { color: var(--ipi-brand); }
.ipi-expand-link svg { flex: none; }

.ipi-filters-card { background: var(--ipi-surface); border: 1.5px solid var(--ipi-line); border-radius: var(--ipi-radius-card); transition: border-color 0.12s; }
.ipi-filters-card:hover { border-color: var(--ipi-brand); }
.ipi-filters-head { display: flex; align-items: center; width: 100%; gap: 12px; background: none; border: none; border-radius: var(--ipi-radius); font: inherit; cursor: pointer; padding: 10px 15px; margin: 0; }
.ipi-filters-head:hover .ipi-filters-title, .ipi-filters-head:hover .ipi-fh-action { color: var(--ipi-brand); }
.ipi-filters-title { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-micro); font-weight: 700; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-ink); transition: color 0.12s; display: inline-flex; align-items: center; gap: 8px; }
.ipi-filters-title svg { flex: none; }
.ipi-fh-summary { font-size: var(--ipi-fs-small); color: var(--ipi-muted); font-weight: 400; flex: 1; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ipi-fh-count { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-label); font-weight: 700; background: var(--ipi-brand); color: var(--ipi-on-brand); border-radius: var(--ipi-radius); padding: 2px 8px; }
/* Ink at rest, accent on hover (rule above): the whole head is the toggle, so no accent needed to signal it. */
.ipi-fh-action { font-size: var(--ipi-fs-small); font-weight: 600; color: var(--ipi-ink); display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; transition: color 0.12s; }
.ipi-chev-lg svg { display: block; color: var(--ipi-ink); transition: transform 0.18s, color 0.12s; }
.ipi-fh-action .ipi-chev-lg svg { color: inherit; }
.ipi-filters-head.ipi-open .ipi-fh-action .ipi-chev-lg svg { transform: rotate(180deg); }
.ipi-filters-body { border-top: 1px solid var(--ipi-line); padding: 10px 15px; }

.ipi-filter-bar { display: flex; flex-direction: column; gap: 10px; }
/* Baseline: the label lines up with the first row of chips when they wrap. */
.ipi-filter-group { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.ipi-filter-group.ipi-off { opacity: 0.45; pointer-events: none; }
.ipi-filter-group .ipi-filter-label { width: 92px; flex: none; }
.ipi-fl-note { font-style: normal; font-weight: 400; text-transform: none; letter-spacing: normal; }
.ipi-chip-row { display: flex; gap: 6px; flex-wrap: wrap; }
/* Take the space beside the label and wrap inside it, rather than the whole row dropping under the label. */
.ipi-filter-group .ipi-chip-row { flex: 1 1 0; min-width: 0; }
.ipi-chip { border: 1.5px solid var(--ipi-line); background: var(--ipi-surface); border-radius: var(--ipi-radius); font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-control); font-weight: 600; color: var(--ipi-ink); padding: 6px 15px; cursor: pointer; transition: all 0.12s; }
.ipi-chip:hover { border-color: var(--ipi-brand); color: var(--ipi-brand); }
.ipi-chip.on { background: var(--ipi-brand); border-color: var(--ipi-brand); color: var(--ipi-on-brand); }
/* No session for this chip under the other filter (JS); same fade as a Distance-off group. */
.ipi-chip:disabled { opacity: 0.45; pointer-events: none; }
.ipi-bookings .ipi-chip span { color: inherit; font-size: inherit; font-weight: inherit; }

/* ---- back to top ---- */
.ipi-to-top { position: fixed; right: 26px; bottom: 26px; z-index: 6; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--ipi-radius); border: none; background: var(--ipi-brand); color: var(--ipi-on-brand); font-size: 18px; cursor: pointer; box-shadow: var(--ipi-elev-2); opacity: 0; pointer-events: none; transition: opacity 0.2s, background 0.12s; }
.ipi-to-top.ipi-show { opacity: 1; pointer-events: auto; }
.ipi-to-top:hover { background: var(--ipi-brand-dark); }

/* ---- groups & courses ---- */
/* 4rem below every group: between two of them, and — the reason it's here rather
   than on an adjacent-sibling selector — after the last one, which otherwise ended
   flush against the footer. Where a group meets the exam banner the two margins
   collapse to one 4rem, so the banner sits in the same rhythm either side.
   Margin rather than padding, unlike the directory page: nothing here takes a
   .ipi-bleed background yet, so there is no band for a margin to fall outside of.
   That changes the day /book/ gets bands. */
/* Groups sit on the page ground (no bands — Seb, 2026-09-29); 4rem below each, incl. the last. */
.ipi-group { margin: 0 0 4rem; }
.ipi-group-head { display: block; margin-bottom: 12px; }
/* Sanctioned exception (Seb, 2026-09-29): schedule group headings stay uppercase magenta, no heading rule. */
.ipi-group-head h2 { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-h2); font-weight: 700; letter-spacing: var(--ipi-track-heading); text-transform: uppercase; color: var(--ipi-brand); text-wrap: balance; }
.ipi-group-head > span { display: block; margin-top: 3px; font-size: var(--ipi-fs-body); color: var(--ipi-muted); text-wrap: pretty; }
/* Tax note once above the feed rather than on every price column. */
.ipi-nav-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.ipi-tax-note { margin: 0; font-size: var(--ipi-fs-small); color: var(--ipi-muted); }
/* Scoped under .ipi-bookings: `.ipi-course` is also the /courses/ single-page
   wrapper, whose later reset sets background:transparent + border:0. The feed card
   must outrank that, so it carries the wrapper-scoped selector. */
.ipi-bookings .ipi-course { background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-radius-card); margin: 0; overflow: hidden; box-shadow: var(--ipi-elev-1); }
/* 2rem between courses; adjacent-sibling → no top on the first course, no bottom
   on the last (the group heading provides the first course's top spacing). */
.ipi-course + .ipi-course { margin-top: 1.5rem; }
.ipi-course.ipi-unavailable .ipi-course-name { color: var(--ipi-muted); }
/* Semantic wrapper only: the h3 passes the card's type straight through so the toggle looks unchanged. */
.ipi-bookings h3.ipi-course-heading { margin: 0; padding: 0; font: inherit; letter-spacing: inherit; text-transform: inherit; color: inherit; }
.ipi-course-head { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 16px; padding: var(--ipi-row-pad) 20px; background: none; border: none; font: inherit; text-align: left; cursor: pointer; }
.ipi-course-head.ipi-meta-right { padding-top: 17px; padding-bottom: 17px; }
.ipi-course-head:hover .ipi-course-name, .ipi-course-head:hover .ipi-chev-lg svg { color: var(--ipi-brand); }
.ipi-course-head-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1 1 auto; }
/* Course names end in a level number ("… Level 1"), which lands on a line of
   its own once the name wraps. Balancing splits the two lines evenly instead. */
.ipi-course-name { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-title); font-weight: 600; color: var(--ipi-ink); transition: color 0.12s; text-wrap: balance; }
.ipi-course-blurb-head { font-size: var(--ipi-fs-small); color: var(--ipi-muted); margin-top: 2px; max-width: 520px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.ipi-course-head-side { display: flex; align-items: center; gap: 18px; flex: none; }
.ipi-course-meta-right { font-family: var(--font-heading, inherit); text-align: right; white-space: nowrap; font-size: var(--ipi-fs-label); font-weight: 600; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-muted); }
.ipi-course.ipi-open .ipi-chev-lg svg { transform: rotate(180deg); }
.ipi-course:not(.ipi-open) .ipi-course-body { display: none; }
.ipi-course-body { padding: 2px 20px 18px; border-top: 1px solid var(--ipi-line); }
.ipi-brochure-link { display: inline-flex; align-items: center; gap: 7px; margin-top: 12px; font-size: var(--ipi-fs-small); font-weight: 600; }
/* Course info + brochure: one row, wrapping on narrow cards. */
.ipi-course-links { display: flex; flex-wrap: wrap; column-gap: 24px; }
.ipi-brochure-icon { flex: none; }

/* ---- unified table ---- */
/* Full-bleed the table past the body's 20px padding so the zebra striping,
   hover and row dividers reach the course-card edges; the edge cells regain the
   inset via extra padding (12px cell + 20px bled = 32px), so content stays put. */
.ipi-session-table { width: calc(100% + 40px); border-collapse: collapse; margin: 10px -20px 0; }
.ipi-session-table th:first-child, .ipi-session-table td:first-child { padding-left: 32px; }
.ipi-session-table th:last-child, .ipi-session-table td:last-child { padding-right: 32px; }
/* Shared table look for all three booking tables (schedule feed, course template,
   venues): each <table> carries the .ipi-btable class and every shared cell/header/
   divider/zebra/hover rule is scoped to it — one source of truth, works in any
   wrapper (.ipi-bookings OR .ipi-course). Per-table specifics (bleed, mobile cards,
   column widths, the course-link column) live with each table's own class. */
.ipi-btable th { font-family: var(--font-heading, inherit); text-align: left; font-size: var(--ipi-fs-label); font-weight: 700; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-muted); padding: 10px 12px; border-bottom: 1.5px solid var(--ipi-line); background-color: transparent; }
.ipi-btable td { text-align: left; padding: var(--ipi-row-pad) 12px; border-bottom: 1px solid var(--ipi-line); font-size: var(--ipi-fs-cell); vertical-align: middle; font-weight: 400; color: var(--ipi-ink); background-color: transparent; }
.ipi-btable tr:last-child td { border-bottom: none; }
.ipi-btable tbody tr:hover td { background-color: var(--ipi-tint); }
/* Mode label + icon: inline-flex so the icon centres on the text at any line-height
   (replaces a fragile baseline nudge). */
.ipi-bookings .ipi-mode, .ipi-course .ipi-mode { display: inline-flex; align-items: center; gap: 6px; }
.ipi-mode-icon { flex: none; }
/* Zebra striping: JS tags every other VISIBLE row .ipi-alt (CSS :nth-child
   can't skip filter-hidden rows), alternating white / subtle grey. This
   also supersedes the theme's own grey tr:nth-child striping. */
.ipi-btable tr.ipi-alt td { background-color: var(--ipi-row-alt); }
.ipi-session-table td.ipi-td-dates { font-weight: 600; white-space: nowrap; }
.ipi-session-table td.ipi-td-mode { color: var(--ipi-muted); }
.ipi-session-table td.ipi-td-price { font-weight: 600; white-space: nowrap; }
/* "Price (ex GST)" header (schedule + venues) stays on one line. */
.ipi-btable th.ipi-th-price { white-space: nowrap; }
.ipi-session-table td.ipi-td-action { text-align: right; }
/* Session-row CTA (ipi_booking_session_cta) — a text link, not a button, so a long column of rows
   doesn't read as one accent stripe. The CTA cell drops its vertical padding and the link's padding
   makes it the full 50px row height (49 + the 1px divider): the whole cell is the hit area. */
.ipi-session-table td.ipi-td-action, .ipi-loc-table td.td-btn { padding-top: 0; padding-bottom: 0; }
a.ipi-session-cta, a.ipi-session-cta:link, a.ipi-session-cta:visited { display: inline-flex; align-items: center; gap: 8px; padding: 14.5px 0; font-family: var(--font-heading, inherit); font-weight: 600; font-size: var(--ipi-fs-cell); line-height: 20px; color: var(--ipi-brand); text-decoration: none; white-space: nowrap; border-radius: var(--ipi-radius); transition: color var(--dur-state, 160ms) var(--ease-out, ease-out); }
a.ipi-session-cta svg { flex: none; transition: transform var(--dur-state, 160ms) var(--ease-out, ease-out); }
a.ipi-session-cta:hover { color: var(--ipi-brand-dark); text-decoration: none; }
/* Underline the label only — never the arrow or the gap. */
a.ipi-session-cta:hover .ipi-session-cta-label { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }
a.ipi-session-cta:not(.ipi-session-cta--enquire):hover svg { transform: translateX(3px); }
a.ipi-session-cta:focus-visible { outline: none; box-shadow: var(--ipi-focus); }
/* Enquire: an unbookable row carries no accent (Seb, 2026-09-29) — ink, static chat glyph. */
a.ipi-session-cta--enquire, a.ipi-session-cta--enquire:link, a.ipi-session-cta--enquire:visited, a.ipi-session-cta--enquire:hover { color: var(--ipi-ink); }
/* Stacked cards: keep a 44px tap target without growing the card past the old button's footprint. */
.ipi-sc-bottom a.ipi-session-cta { padding: 12px 0; margin: -7.5px 0; }
@media (prefers-reduced-motion: reduce) {
	a.ipi-session-cta svg { transition: none; }
	a.ipi-session-cta:not(.ipi-session-cta--enquire):hover svg { transform: none; }
}
.ipi-badges { display: inline-flex; gap: 6px; flex-wrap: wrap; }
/* Status is quiet text, not pills — the Register/Enquire button carries the
   action, so the Status column just states availability. Bookable states read in
   ink; unavailable ones (Fully booked / Registration closed) recede in muted grey
   so they don't look actionable. Self-paced is format, not urgency, so it stays
   muted too. Only urgency is brand-coloured (below). */
.ipi-badge { display: inline-flex; align-items: center; gap: 5px; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-micro); font-weight: 600; white-space: nowrap; color: var(--ipi-muted); }
/* Urgency — Filling fast / Almost full (.ipi-full), DS option D (2026-10-14): bold brand text after a
   7px thermal dot (a graphic fill, never text); the dot pulses for Almost full only. Centred even where
   the tables top-align wrapping badges. */
.ipi-badges .ipi-badge.ipi-full { align-items: center; gap: 7px; color: var(--ipi-brand); font-size: 12.5px; font-weight: 700; }
.ipi-status-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--ipi-orange); }
.ipi-status-dot--pulse { animation: ipi-status-pulse 3s cubic-bezier(.2,.8,.25,1) infinite; }
@keyframes ipi-status-pulse {
	0%, 70%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--ipi-orange) 45%, transparent); }
	85% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--ipi-orange) 0%, transparent); }
}
@media (prefers-reduced-motion: reduce) { .ipi-status-dot--pulse { animation: none; } }
/* Schedule + venue tables: places meter by days to booking close (design handoff "Schedule table —
   Status column", 2026-10-15; ipi_booking_session_availability()). Three 16×6 cells lit from the left
   (thermal fill, never text), then the label: urgent bands in brand Montserrat 700, "Places available"
   quiet. Almost full adds "Booking closes {date}". Plain states (closed / self-paced / full) are quiet
   text with no meter. No animation. */
.ipi-avail { display: inline-flex; flex-direction: column; gap: 3px; white-space: nowrap; }
.ipi-avail-row { display: inline-flex; align-items: center; gap: 10px; }
.ipi-meter { display: inline-flex; gap: 3px; flex: none; }
.ipi-meter > span { width: 16px; height: 6px; border-radius: 2px; background: var(--ipi-line); }
.ipi-meter > span.on { background: var(--ipi-orange); }
.ipi-avail-label { font-family: var(--font-sans, inherit); font-size: 13.5px; font-weight: 400; color: var(--ipi-muted); }
.ipi-avail--band2 .ipi-avail-label, .ipi-avail--band3 .ipi-avail-label { font-family: var(--font-heading, inherit); font-size: 12.5px; font-weight: 700; color: var(--ipi-brand); }
.ipi-avail-detail { font-family: var(--font-sans, inherit); font-size: 12.5px; line-height: 1.4; color: var(--ipi-muted); }
.ipi-avail--plain { font-family: var(--font-sans, inherit); font-size: 14px; font-weight: 400; color: var(--ipi-muted); }
/* Early bird sits with the price (Seb, 2026-10-15): the full price, then a tag line beneath it — tag icon,
   "Early bird" in brand. The tag is a label, so Montserrat 600 at the micro size. */
/* "ex GST" beside a card price (course page tiles, "Other dates" cards) — as on the booking page's Price row. */
.ipi-price-tax { font-size: var(--ipi-fs-small); font-weight: 400; color: var(--ipi-muted); }
.ipi-price-eb { display: inline-flex; flex-direction: column; align-items: flex-start; gap: 2px; }
.ipi-eb-tag { display: inline-flex; align-items: center; gap: 4px; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-micro); font-weight: 600; color: var(--ipi-brand); white-space: nowrap; }
.ipi-eb-tag-ic { flex: none; }
.ipi-sc-top .ipi-price-eb { align-items: flex-end; } /* mobile schedule card: price sits right-aligned */
/* The tag as a button (ipi-booking-session-status.php): the whole tag opens the [popover] note; a dotted
   underline on the label marks it as openable (no info icon: Seb, 2026-10-19). The note sits in the top layer, anchored above the button by ipi-booking-public.js
   (.is-anchored); without the script it keeps the browser's default centring. 24px tall hit area
   (WCAG 2.5.8) without changing the line height. */
.ipi-eb-tag--btn { min-height: 24px; margin: -4px 0; padding: 0; border: 0; background: none; cursor: pointer; border-radius: var(--ipi-radius); line-height: inherit; text-align: left; }
.ipi-eb-tag--btn .ipi-eb-tag-label { text-decoration: underline dotted; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.ipi-eb-tag--btn:hover { color: var(--ipi-brand-dark); }
.ipi-eb-tag--btn:hover .ipi-eb-tag-label { text-decoration-style: solid; }
.ipi-eb-tag--btn:focus-visible { outline: none; box-shadow: var(--ipi-focus); }
.ipi-eb-note { overflow: visible; width: max-content; max-width: 260px; padding: 10px 12px; background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-radius); box-shadow: var(--ipi-elev-2); font-family: var(--font-sans, inherit); font-size: var(--ipi-fs-small); font-weight: 400; line-height: 1.5; letter-spacing: normal; text-transform: none; color: var(--ipi-ink); white-space: normal; text-align: left; }
.ipi-eb-note.is-anchored { position: fixed; inset: auto; margin: 0; }
/* "See terms" link in the early-bird note (the same note on the schedule popup and the booking page row). */
.ipi-eb-note a { color: var(--ipi-brand); text-decoration: underline; text-underline-offset: 2px; }
.ipi-eb-note a:hover { color: var(--ipi-brand-dark); }
/* Caret pointing at the icon: a bordered square rotated 45°, its x set by the script
   (--ipi-caret-x) and clamped inside the box. Points down from above, up when the note sits below. */
.ipi-eb-note.is-anchored::after { content: ""; position: absolute; left: clamp(12px, var(--ipi-caret-x, 18px), calc(100% - 12px)); bottom: -6px; width: 11px; height: 11px; margin-left: -6px; background: var(--ipi-surface); border-right: 1px solid var(--ipi-line); border-bottom: 1px solid var(--ipi-line); transform: rotate(45deg); }
.ipi-eb-note.is-anchored.is-below::after { bottom: auto; top: -6px; border: 0; border-left: 1px solid var(--ipi-line); border-top: 1px solid var(--ipi-line); }

/* buttons — scoped high + literal colors (visited-link paint ignores vars) */
/* Row CTAs: outline by default (calms the column of repeated buttons), solid
   magenta fill on hover; smaller than a hero/primary button. */
/* Component-scoped (.ipi-btn), NOT wrapper-scoped: booking tables render in two
   wrappers (.ipi-bookings for schedule/venues, .ipi-course for the course page), so
   scoping to the wrapper made variants silently miss one. The .ipi-btn class is
   plugin-only, so this is safe and works wherever a button appears. */
a.ipi-btn,
button.ipi-btn { display: inline-flex; align-items: center; gap: 6px; background: var(--ipi-surface-control); color: var(--ipi-brand); font-family: var(--font-heading, inherit); font-weight: 600; font-size: var(--ipi-fs-cell); line-height: 1.25; padding: var(--ipi-pad-control); border-radius: var(--ipi-radius); white-space: nowrap; border: 1.5px solid var(--ipi-brand); box-shadow: 0 2px 0 var(--ipi-bar-secondary); cursor: pointer; transition: background 0.12s, color 0.12s, transform 0.08s, box-shadow 0.08s; }
.ipi-cta-arrow { flex: none; transition: transform 0.12s; }
a.ipi-btn:hover .ipi-cta-arrow, button.ipi-btn:hover .ipi-cta-arrow { transform: translateX(2px); }
/* Enquire's chat-bubble icon — static (no slide); marks it as "get in touch". */
.ipi-cta-icon { flex: none; }
a.ipi-btn:link, a.ipi-btn:visited { color: var(--ipi-brand); }
/* DS button press: tint + darken, drop into the offset bar (2px→1px→0). */
a.ipi-btn:hover, button.ipi-btn:hover { background: var(--ipi-tint); color: var(--ipi-brand-dark); border-color: var(--ipi-brand-dark); transform: translateY(1px); box-shadow: 0 1px 0 var(--ipi-bar-secondary); }
a.ipi-btn:active, button.ipi-btn:active { transform: translateY(2px); box-shadow: none; }
a.ipi-btn.ipi-btn--primary { background: var(--ipi-brand); border-color: transparent; box-shadow: 0 2px 0 var(--ipi-bar-primary); }
a.ipi-btn.ipi-btn--primary:link, a.ipi-btn.ipi-btn--primary:visited { color: var(--ipi-on-brand); }
a.ipi-btn.ipi-btn--primary:hover { background: var(--ipi-brand-dark); color: var(--ipi-on-brand); border-color: transparent; box-shadow: 0 1px 0 var(--ipi-bar-primary); }
.ipi-btn span { color: inherit; font-size: inherit; font-weight: inherit; }
/* Enquire (.ipi-ghost) — sanctioned neutral button (Seb, 2026-09-29): an unbookable row carries no magenta,
   so it's the light-ground cousin of onDark — white chip, ink label, grey frame + bar. Frameless ghost and
   magenta secondary were both tried and rejected. */
a.ipi-btn.ipi-ghost { background: var(--ipi-surface); border-color: var(--ipi-bar-ondark); box-shadow: 0 2px 0 var(--ipi-bar-ondark); }
a.ipi-btn.ipi-ghost:link, a.ipi-btn.ipi-ghost:visited { color: var(--ipi-ink); }
a.ipi-btn.ipi-ghost:hover { background: var(--ipi-bg); color: var(--ipi-ink); border-color: var(--ipi-bar-ondark); box-shadow: 0 1px 0 var(--ipi-bar-ondark); }
/* Exam-banner CTA = the DS onDark button: white chip, framed border, ink label, accent icon, own bar. */
a.ipi-btn.ipi-btn-light { background: var(--ipi-surface); color: var(--ipi-ink); border: 1.5px solid var(--ipi-border-framed); box-shadow: 0 2px 0 var(--ipi-bar-ondark); font-size: var(--ipi-fs-cell); padding: var(--ipi-pad-control); }
a.ipi-btn.ipi-btn-light:link, a.ipi-btn.ipi-btn-light:visited { color: var(--ipi-ink); }
a.ipi-btn.ipi-btn-light .ipi-cta-arrow { color: var(--ipi-brand); }
a.ipi-btn.ipi-btn-light:hover { background: var(--ipi-surface); color: var(--ipi-ink); border-color: var(--ipi-border-framed); transform: translateY(1px); box-shadow: 0 1px 0 var(--ipi-bar-ondark); }
.ipi-empty-note { color: var(--ipi-muted); font-size: var(--ipi-fs-cell); margin: 14px 0 4px; }
/* Inline text links must be distinguishable by more than colour (they sit in
   muted body text at ~1.55:1) — underline them (WCAG link-in-text-block). */
.ipi-empty-note a { text-decoration: underline; }
.ipi-bookings .ipi-scroll-filters { border: none; background: none; padding: 0; font: inherit; line-height: inherit; vertical-align: baseline; font-weight: 600; color: var(--ipi-brand); cursor: pointer; }
.ipi-bookings .ipi-scroll-filters:hover { color: var(--ipi-brand-dark); text-decoration: underline; }

/* mobile session cards */
.ipi-session-cards { display: none; }
.ipi-session-card { border: 1px solid var(--ipi-line); border-radius: var(--ipi-radius-card); padding: 15px; margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.ipi-session-card.ipi-alt { background-color: var(--ipi-row-alt); }
.ipi-sc-top { display: flex; justify-content: space-between; gap: 10px; font-size: var(--ipi-fs-title); font-weight: 600; }
.ipi-sc-mid, .ipi-sc-loc { color: var(--ipi-muted); font-size: var(--ipi-fs-small); }
.ipi-sc-bottom { display: flex; justify-content: space-between; align-items: center; gap: 10px; }
/* The status shrinks and wraps so a long one ("Early bird discount until Feb 4")
   can't push the CTA out of a narrow card, or off the right of the desktop
   table just above the 860px card breakpoint; the CTA keeps its size. */
.ipi-sc-bottom .ipi-badges { flex: 1 1 auto; min-width: 0; }
.ipi-sc-bottom .ipi-badge, .ipi-session-table .ipi-badge { white-space: normal; align-items: flex-start; }
.ipi-sc-bottom .ipi-session-cta { flex: none; }

/* ---- exam banner ---- */
/* 4rem each side, collapsing with a neighbouring group's 4rem — same rhythm between groups or at the end. */
.ipi-exam-banner { position: relative; overflow: hidden; margin: 4rem 0; background: var(--ipi-banner-gradient); color: var(--ipi-inverse-text); border-radius: var(--ipi-radius-card); padding: 25px 30px; display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
/* Faint dot texture over the gradient — decorative, so it sits behind the
   content (which is lifted to z-index 1). */
.ipi-exam-banner > * { position: relative; z-index: 1; }
.ipi-exam-banner::before { content: ""; position: absolute; inset: 0; pointer-events: none; background-image: var(--ipi-dot-texture); background-size: var(--ipi-dot-texture-size); }
.ipi-exam-kicker { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-label); font-weight: 700; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-inverse-link); }
.ipi-exam-banner h3 { font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-h2); margin: 5px 0 5px; color: var(--ipi-inverse-heading); }
.ipi-exam-banner p { margin: 0; color: var(--ipi-inverse-text); font-size: var(--ipi-fs-cell); font-weight: 500; max-width: 520px; }

/* ---- full-bleed section backgrounds ---- */
/* Paints a section's background the full width of the viewport while the section
   itself stays in the theme's content column. Set `--ipi-bleed-bg` on the element
   and nothing else has to change; leave it unset and the class does nothing
   visible. The box-shadow lays a slab of colour far past every edge, and the
   clip-path trims it back to the element's own top and bottom, so only the
   horizontal bleed survives.

   Preferred over the hero's `width: 100vw` + negative margins (see .ipi-hero)
   for anything that only needs colour: the layout doesn't move, so content stays
   aligned with the sections above and below and needs no inner wrapper, and there
   is no 100vw — which counts the scrollbar and overflows the document, the reason
   the .mk-grid override below has to exist.

   Two limits, both from clip-path: descendants are clipped at the element's top
   and bottom, and a `position: fixed` descendant is trapped inside it. So never
   put this on .ipi-bookings, which holds the fixed .ipi-to-top.

   Give a coloured section vertical padding — these sections space themselves with
   margin, which falls outside the band. */
.ipi-bleed { background: var(--ipi-bleed-bg, transparent); box-shadow: 0 0 0 100vmax var(--ipi-bleed-bg, transparent); clip-path: inset(0 -100vmax); }

/* Hairline marking the exact top edge of a band. A plain `border-top` can't do
   this: the border belongs to the element's box, so it would stop at the content
   column while the colour either side of it carried on — a 1120px line adrift in a
   full-width band. So the rule is a 1px pseudo-element that bleeds the same way
   the background does. Colour via --ipi-bleed-rule; defaults to the standard line.
   Sits at the top edge, so put it on the LOWER of two bands. */
.ipi-bleed-rule { position: relative; }
.ipi-bleed-rule::before { content: ''; position: absolute; inset: 0 0 auto; height: 1px; background: var(--ipi-bleed-rule, var(--ipi-line)); box-shadow: 0 0 0 100vmax var(--ipi-bleed-rule, var(--ipi-line)); clip-path: inset(0 -100vmax); }

/* Jupiter theme override — unscoped on purpose, but this stylesheet only loads
   on pages containing [ipi_bookings], so it's effectively page-scoped. The
   theme's .mk-grid (width:100%) inherits the full-bleed hero's overflow and
   leaves a right-edge gap; width:auto avoids it. Must hit ALL .mk-grid (the
   overflowing one is a nested grid, not just the main wrapper); `body .mk-grid`
   also outranks the theme's `.mk-grid` rule regardless of load order. */
body .mk-grid { width: auto; }

/* ---- single booking page (/book/{mode}/{slug}/) ---- */
/* Page template gives us a bare content area, so own the scaffolding: centred
   column + vertical breathing room top (clear the header) and bottom (before
   the footer). */
/* Fill the theme's content width (.mk-grid = 1140px) rather than imposing our
   own — only own the vertical rhythm; the theme grid supplies width + gutters. */
.ipi-single { padding-block: 0 3rem; } /* the band opens the page; horizontal gutter from .ipi-bookings (24/32px) */

/* ---- Page header band (DS PageHeading 1a) — breadcrumb / kicker / H1 left; facts + actions right,
   bottom-aligned to the H1; closed by a full-bleed hairline (the band is the page ground, so only the
   line bleeds). One column under 860px. ---- */
.ipi-single-band { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 60px; align-items: start; padding: 44px 0; background: var(--ipi-surface); box-shadow: 0 0 0 100vmax var(--ipi-surface); clip-path: inset(0 -100vmax); } /* white, bled full width: the header reads apart from the page ground below. Top-aligned: with the breadcrumb on its own strip the facts column is the taller one, and bottom-aligning pushed the h1 down. */
/* Breadcrumb strip — its own row between the site header and the band, so it reads as navigation, not part of the title. */
.ipi-single-crumbs { position: relative; padding: 14px 0; background: var(--ipi-surface); box-shadow: 0 0 0 100vmax var(--ipi-surface); clip-path: inset(0 -100vmax); }
.ipi-single-crumbs::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--ipi-line); box-shadow: 0 0 0 100vmax var(--ipi-line); clip-path: inset(0 -100vmax); }
.ipi-single-crumbs .ipi-breadcrumbs { margin: 0; }
.ipi-bookings a.ipi-single-brochure { display: inline-flex; align-items: center; gap: 6px; color: var(--ipi-brand); font-weight: 600; text-decoration: none; }
.ipi-bookings a.ipi-single-brochure:hover { color: var(--ipi-brand-dark); text-decoration: underline; text-underline-offset: 3px; }
.ipi-single-band::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--ipi-line); box-shadow: 0 0 0 100vmax var(--ipi-line); clip-path: inset(0 -100vmax); }
.ipi-single-kicker { margin: 0 0 10px; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-micro); font-weight: 600; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-brand); }
/* Scoped + element-qualified to outrank theme h1 rules. No heading rule — the band's hairline closes it. */
.ipi-bookings h1.ipi-single-title { font-size: 40px; line-height: 1.15; font-weight: 700; letter-spacing: var(--ipi-track-tight); color: var(--ipi-ink); margin: 0; text-wrap: pretty; }
/* Trailing words of the H1 in the brand highlight ramp (as hero/editorial + course pages). */
/* Gradient text is only painted inside the box, so a trailing glyph that overhangs it (a "/") clips — pad the end a
   hair, cancelled by the negative margin. No box-decoration-break:clone: Firefox then widens every wrapped line. */
.ipi-single-hl { background-image: var(--ipi-highlight); -webkit-background-clip: text; background-clip: text; color: transparent; padding-right: 0.1em; margin-right: -0.1em; }
.ipi-single-place { color: var(--ipi-muted); font-weight: 600; }
.ipi-single-band-side { display: flex; flex-direction: column; gap: 20px; }
.ipi-single-band-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.ipi-single-band + .ipi-single-action { margin-top: 3rem; }
@media (max-width: 860px) {
	.ipi-single-band { grid-template-columns: 1fr; gap: 24px; padding: 32px 0 30px; }
	.ipi-bookings h1.ipi-single-title { font-size: 32px; }
}

/* Breadcrumb — mirrors the theme's ipi_breadcrumbs() exactly (course pages, posts, page headers): 14px,
   magenta links, muted "/" separators 8px either side, current page in ink; wraps rather than truncating. */
.ipi-breadcrumbs { margin: 0 0 32px; font-size: var(--ipi-fs-cell); color: var(--ipi-muted); }
.ipi-breadcrumbs ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; column-gap: 8px; row-gap: 4px; }
.ipi-breadcrumbs li { display: inline-flex; align-items: center; gap: 8px; }
.ipi-breadcrumbs li:not(:last-child)::after { content: "/"; color: var(--ipi-muted); }
.ipi-bookings .ipi-breadcrumbs a { color: var(--ipi-muted); font-weight: 400; text-decoration: none; }
.ipi-bookings .ipi-breadcrumbs a:hover { color: var(--ipi-brand); }
.ipi-breadcrumbs .ipi-bc-home { display: inline-flex; padding: 4px; margin: -4px; } /* house icon; padding widens the tap target */
.ipi-breadcrumbs span:not([aria-current]) { color: var(--ipi-muted); }
.ipi-breadcrumbs [aria-current="page"] { color: var(--ipi-ink); font-weight: 400; }
@media (max-width: 860px) { .ipi-breadcrumbs { margin-bottom: 24px; } }
/* Phones drop the current page (the h1 repeats it) and the separator before it — as the theme's breadcrumb does.
   Display only: the BreadcrumbList JSON-LD keeps the full trail. */
@media (max-width: 639px) {
	.ipi-breadcrumbs li:last-child { display: none; }
	.ipi-breadcrumbs li:nth-last-child(2)::after { content: none; }
}

/* Key facts in the band: compact label / value rows. */
/* Rows share one label column (subgrid), sized to the longest label so none wraps; 78px where subgrid is unsupported. */
.ipi-single-facts { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 10px 12px; }
.ipi-single-facts .ipi-single-row { display: grid; grid-column: 1 / -1; grid-template-columns: 78px minmax(0, 1fr); grid-template-columns: subgrid; gap: 12px; align-items: baseline; padding: 0; border: 0; }
.ipi-single-facts .ipi-single-row dt { width: auto; white-space: nowrap; }
.ipi-bookings .ipi-single-facts .ipi-single-row dd { padding: 0; }
.ipi-single-tax { font-size: var(--ipi-fs-small); font-weight: 400; color: var(--ipi-muted); }
/* Early bird row: the saving in the form's discount green. */
.ipi-single-eb-save { color: var(--ipi-saving); }
/* Delivery + Early bird rows: the value and an info icon, the whole line one button opening its note as a
   [popover] (.ipi-eb-note, positioned by ipi-booking-public.js) — the band's clip-path would clip a
   disclosure that spills past its edge. */
.ipi-single-info-btn { display: inline-flex; align-items: center; gap: 6px; padding: 0; margin: 0; border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; border-radius: var(--ipi-radius); }
.ipi-single-info-btn:hover .ipi-info-ic { color: var(--ipi-brand-dark); }
.ipi-single-info-btn:focus-visible { outline: none; box-shadow: var(--ipi-focus); }
.ipi-single-meta { margin: 0; }
.ipi-single-row { display: flex; align-items: center; gap: 16px; padding: 12px 0; border-top: 1px solid var(--ipi-line); }
.ipi-single-row:first-child { border-top: none; }
.ipi-single-row dt { flex: none; width: 120px; margin: 0; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-label); font-weight: 700; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-muted); }
/* Scoped high to override the theme's own dd padding/margin (which otherwise
   leaks in and knocks the value off the row's vertical centre). */
.ipi-bookings .ipi-single-row dd { margin: 0; padding: 5px; font-size: var(--ipi-fs-body); font-weight: 600; color: var(--ipi-ink); }
.ipi-info-ic { flex: none; color: var(--ipi-brand); transition: color 0.12s; }
.ipi-bookings a.ipi-delivery-more { white-space: nowrap; } /* same weight as the early-bird note's "Read terms" */
/* Brochure download link in the summary table (its own row under Price). */
.ipi-bookings a.ipi-brochure-dl { display: inline-flex; align-items: center; gap: 6px; color: var(--ipi-brand); font-weight: 600; text-decoration: none; }
.ipi-bookings a.ipi-brochure-dl:hover { color: var(--ipi-brand-dark); }
.ipi-brochure-dl .ipi-info-ic { color: currentColor; }
.ipi-bookings a.ipi-course-link { display: inline-flex; align-items: center; gap: 6px; color: var(--ipi-brand); font-weight: 600; text-decoration: none; }
.ipi-bookings a.ipi-course-link:hover { color: var(--ipi-brand-dark); }
.ipi-bookings a.ipi-course-link:hover span { text-decoration: underline; text-underline-offset: 3px; }
.ipi-course-link .ipi-info-ic { flex: none; color: currentColor; transition: transform 0.15s; }
.ipi-course-link:hover .ipi-info-ic { transform: translateX(2px); }
.ipi-single-action { margin: 4rem 0; }
.ipi-bookings h2.ipi-single-h { font-size: var(--ipi-fs-block); font-weight: 700; letter-spacing: var(--ipi-track-tight); margin: 0 0 14px; color: var(--ipi-ink); }
.ipi-single-closed p { font-size: var(--ipi-fs-body); color: var(--ipi-ink); margin: 0 0 18px; max-width: 66ch; }
.ipi-single-btn-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
/* Late registration (IPI_Booking_Late_Registration): customer note above the form. */
.ipi-late-note { font-size: var(--ipi-fs-body); color: var(--ipi-ink); background: var(--ipi-tint); border-left: 3px solid var(--ipi-brand); border-radius: var(--ipi-radius); padding: 12px 16px; margin: 0 0 20px; max-width: 66ch; }
.ipi-bookings /* Single-page CTAs use the standard control padding (base .ipi-btn) — no
   size override; only the /book/ listing rows are compressed. */

/* Height of a sticky site header, if the theme has one. Defaults to 0; when the
   theme makes its header (or its own sticky nav) sticky, it sets
   `--ipi-header-h: <height>px` globally and the anchor offset self-corrects, so
   in-page jumps land below the sticky bar. */
:root { --ipi-header-h: 0px; }

/* Anchor targets (#course-info, #book, #more-sessions, and #ipi-course-dates — the rail's "Classroom
   booking" CTA). The theme's html scroll-padding already clears the sticky header (+16px), so these add
   only the sticky sub-nav + 8px; adding the header here too double-counted it and stopped jumps short. */
.ipi-single-anchor { scroll-margin-top: calc(var(--ipi-subnav-h, 0px) + 8px); }
/* Lands where the on-page nav's own link does (theme main.js: header + 47 + 16), so both arrive at the same spot;
   the stuck nav overlaps the header by 1px, hence -1px. */
#ipi-course-dates { scroll-margin-top: calc(var(--ipi-subnav-h, 0px) - 1px); }

/* The "Other dates & locations" block below the booking action. */
.ipi-single-block { margin: 4rem 0; }

/* "Other dates & locations" — h2 + rule, lead, then equal cards for every option (distance included):
   3 / 2 / 1 columns. The whole card links and lifts on hover (DS interactive card). */
.ipi-bookings .ipi-single-h.ipi-other-h { margin-bottom: 0; }
.ipi-other-lead { font-size: var(--ipi-fs-cell); color: var(--ipi-muted); margin: 0 0 18px; max-width: 75ch; }
.ipi-other-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
@media (max-width: 860px) { .ipi-other-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .ipi-other-grid { grid-template-columns: 1fr; } }.ipi-bookings a.ipi-other-card { display: flex; flex-direction: column; background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-radius-card); box-shadow: var(--ipi-elev-1); padding: 20px 20px 16px; text-decoration: none; color: var(--ipi-ink); transition: transform var(--dur-state, 160ms) var(--ease-out, ease-out), box-shadow var(--dur-state, 160ms) var(--ease-out, ease-out); }
.ipi-bookings a.ipi-other-card:hover { transform: translateY(-3px); box-shadow: var(--ipi-elev-3); color: var(--ipi-ink); }
.ipi-bookings a.ipi-other-card:focus-visible { outline: none; box-shadow: var(--ipi-elev-3), var(--ipi-focus); }
.ipi-other-kicker { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-label); font-weight: 600; letter-spacing: var(--ipi-track-label); text-transform: uppercase; color: var(--ipi-brand); }
.ipi-other-where { margin-top: 10px; font-family: var(--font-heading, inherit); font-size: 18px; font-weight: 600; line-height: 1.25; color: var(--ipi-ink); }
.ipi-other-when { margin-top: 4px; font-size: var(--ipi-fs-cell); color: var(--ipi-muted); }
.ipi-other-foot { margin-top: auto; padding-top: 14px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-top: 1px solid var(--ipi-line); }
.ipi-other-when + .ipi-other-foot, .ipi-other-where + .ipi-other-foot { margin-top: 18px; }
.ipi-other-fact { display: flex; flex-direction: column; }
.ipi-other-price { font-size: var(--ipi-fs-body); font-weight: 600; color: var(--ipi-ink); }
/* Text cue, not a button — the whole card is the link (same pattern as the course page's "View course"). */
.ipi-other-btn { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-control); font-weight: 600; color: var(--ipi-brand); transition: color 0.12s; }
.ipi-other-btn .ipi-cta-arrow { transition: transform 0.12s; }
.ipi-bookings a.ipi-other-card:hover .ipi-other-btn { color: var(--ipi-brand-dark); }
.ipi-bookings a.ipi-other-card:hover .ipi-other-btn .ipi-cta-arrow { transform: translateX(2px); }
@media (prefers-reduced-motion: reduce) { .ipi-bookings a.ipi-other-card, .ipi-bookings a.ipi-other-card:hover { transition: none; transform: none; } }

/* ---- responsive ---- */
@media (max-width: 860px) {
	.ipi-fh-summary { display: none; }
	/* Collapse-all goes on mobile; the row stays for "All prices ex GST." (stacked cards have no Price header). */
	.ipi-nav-row .ipi-expand-link { display: none; }
	.ipi-session-table { display: none; }
	.ipi-session-cards { display: block; margin-top: 4px; }
	/* Flatten nested session boxes into divided rows inside the course card. */
	/* Bleed the rows out past the body's 20px padding so the zebra grey reaches
	   the course-card edges, then re-inset the text with matching padding. */
	.ipi-session-card { border: none; border-radius: 0; margin: 0 -20px; padding: 12px 20px; border-top: 1px solid var(--ipi-line); }
	.ipi-session-card:first-child { border-top: none; padding-top: 4px; }
	/* Hide only the price summary on mobile — keep the side block (and its chevron)
	   so the accordion still has a visible toggle. With the summary gone the gap
	   only separates the title from the chevron, so it can tighten and give the
	   title the width back. */
	.ipi-course-head-side .ipi-course-summary { display: none; }
	.ipi-course-head { gap: 10px; }
	/* Type steps live on the tokens, so every surface steps together. */
	.ipi-bookings { --ipi-h1-size: 40px; --ipi-fs-deck: 15px; --ipi-fs-h2: 18px; }
	/* Filters stay as chips here — same controls as desktop, restacked: each
	   group puts its label above a full-width wrapping row, and the chips grow
	   to a comfortable tap target. */
	.ipi-filter-bar { gap: 14px; }
	.ipi-filter-group { flex-direction: column; align-items: stretch; gap: 7px; }
	.ipi-filter-group .ipi-filter-label { width: auto; }
	.ipi-chip-row { gap: 8px; }
	.ipi-filter-group .ipi-chip-row { flex: none; }
	.ipi-chip { padding: 10px 15px; font-size: var(--ipi-fs-cell); }
}

/* ==========================================================================
   Gravity Forms: DELIBERATELY NOT IN THIS FILE (removed 2026-07-30)
   --------------------------------------------------------------------------
   The embedded booking form's brand skin now lives in the site's
   `ipi-gravityforms` mu-plugin (wp-content/mu-plugins/ipi-gravityforms/),
   scoped to `.gform_wrapper.gform-theme` so it covers EVERY Orbital form on the
   site rather than only /book/ pages. That mu-plugin enqueues on
   `gform_enqueue_scripts` at priority 1100 — after GF's own theme layer at
   1000 — and only when the Orbital stylesheet is actually present, so
   non-Orbital forms are untouched.

   This supersedes the earlier "GF styling is scoped 100% to .ipi-bookings"
   rule, which existed to stop us restyling GF site-wide by accident. Going
   site-wide is now the intent, and one file owns it.

   So: do NOT add `.gform_*` / `.gfield*` / `.ginput_*` rules here. Two copies
   would fight (the mu-plugin's `.gform_wrapper.gform-theme` and a booking-page
   `.ipi-bookings .gform_wrapper` are the same specificity, so the winner would
   come down to load order). Everything that was here is in the mu-plugin,
   verified rule-for-rule and token-for-token before removal.
   ========================================================================== */

/* ==========================================================================
   Course pages (/courses/{slug}/) — IPI_Booking_Course_Page
   Ported from .claude/IPI Learning New Site/templates/course-page/. Reuses the
   shared --ipi-* tokens; course-specific radii/tints/elevations are local. The
   rail floats right and content wraps full-width under it (chosen over a sticky
   rail). Montserrat (--font-heading) drives labels/buttons per the design system.
   ========================================================================== */
.ipi-course {
	--ipi-c-tint: var(--ipi-tint);
	--ipi-c-page: var(--ipi-page);
	--ipi-c-radius-control: var(--ipi-radius);
	--ipi-c-radius-card: var(--ipi-radius-card);
	--ipi-c-radius-image: var(--ipi-radius-media);
	--ipi-c-elev-1: var(--ipi-elev-1);
	--ipi-c-elev-3: var(--ipi-elev-3);
	--ipi-c-hl: var(--ipi-highlight);
	--ipi-c-heading-font: var(--font-heading, inherit);
}

/* Full-bleed shell (free the theme single-post prose cap + shared 1120 cap) */
.ipi-course-shell { max-width: none !important; margin-inline: 0 !important; width: 100%; }
/* NOTE: the /book/ feed already uses a bare `.ipi-course` for its course CARD
   (white bg + border + overflow:hidden, ~line 196). This page reuses the class
   as its root wrapper, so reset those inherited card styles here. (Follow-up:
   rename this page's wrapper to `.ipi-course-page` to retire the collision.) */
.ipi-course { max-width: none; margin: 0; width: 100%; color: var(--ipi-muted); background: transparent; border: 0; border-radius: 0; overflow: visible; }

/* Montserrat for the DS label/button roles (headings inherit it by element). */
.ipi-course-eyebrow, .ipi-course-codelabel, .ipi-course-rail-kicker,
.ipi-course-related-kicker, .ipi-course-related-title, .ipi-course-related-more,
.ipi-course-mode-name, .ipi-course-mode-link,
.ipi-status, .ipi-course-fact dd,
.ipi-course a.ipi-btn, .ipi-course .ipi-course-ctabank a,
.ipi-course-h2, .ipi-course h1.ipi-course-title { font-family: var(--ipi-c-heading-font); }

/* Hero ------------------------------------------------------------------- */
.ipi-course-hero { position: relative; }
/* Responsive banner height matching the theme's Hero Editorial block
   (h-[340px] sm:h-[420px] lg:h-[540px]; sm=640, lg=1024). */
.ipi-course-hero-media { position: relative; height: 340px; margin: 0; border-radius: 0; overflow: hidden; }
/* Dark fade over the image (matches the Hero - Editorial default overlay). */
.ipi-course-hero-media::after { content: ""; position: absolute; inset: 0; background: var(--ipi-media-fade); pointer-events: none; }
/* Same banner heights as the theme's Hero - Editorial (Seb, 2026-10-02): 180 / 320 / 400, then the desktop
   straddle from 1280. Below 1280 the card overlaps a fixed amount (the straddle script only runs from 1280),
   so the banner doesn't grow with a tall, stacked card. */
@media (min-width: 640px) { .ipi-course-hero-media { height: 320px; } }
@media (min-width: 1024px) { .ipi-course-hero-media { height: 400px; } }
@media (min-width: 1280px) { .ipi-course-hero-media { height: 540px; } }
.ipi-course-hero-media img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; }
.ipi-course-hero-inner { max-width: 1120px; margin: 0 auto; padding: 0 40px; position: relative; }
.ipi-course-card { position: relative; background: var(--ipi-surface); border-radius: var(--ipi-c-radius-card); box-shadow: var(--ipi-c-elev-3); padding: 35px 45px 40px; max-width: 760px; }
.ipi-course-hero-media + .ipi-course-hero-inner .ipi-course-card { margin-top: -90px; }
@media (max-width: 1279px) { .ipi-course-hero-media + .ipi-course-hero-inner .ipi-course-card { margin-top: -100px; } }
@media (max-width: 1023px) { .ipi-course-hero-media + .ipi-course-hero-inner .ipi-course-card { margin-top: -80px; } }
.ipi-course-card .ipi-breadcrumb { margin: 0 0 20px; }
.ipi-course-eyebrow { font-size: 12px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ipi-brand); margin: 0; }
.ipi-course h1.ipi-course-title { font-size: 40px; line-height: 1.15; font-weight: 700; letter-spacing: var(--ipi-track-tight); color: var(--ipi-ink); margin: 10px 0 0; text-wrap: balance; }
.ipi-course-hl { background: var(--ipi-c-hl); -webkit-background-clip: text; background-clip: text; color: transparent; padding-right: 0.1em; margin-right: -0.1em; } /* see .ipi-single-hl */
.ipi-course-tagline { font-size: var(--text-lg, 1.125rem); line-height: 1.625; color: var(--ipi-muted); margin: 20px 0 0; }
.ipi-course-tagline p { margin: 0; }
.ipi-course-tagline p + p { margin-top: 0.75em; } /* Blank line in the portal = a visible paragraph gap. */

/* Body layout: rail floats right, main sections wrap beside then below it --- */
.ipi-course-grid { max-width: 1120px; margin: 0 auto; padding: var(--ipi-block-py) 40px; display: grid; grid-template-columns: minmax(0,1fr) 320px; gap: 48px; align-items: start; }
/* The theme's "On this page" bar takes this page's gutter so it lines up with the cards. */
.ipi-course .opn { --opn-gutter: 40px; }
.ipi-course-main { min-width: 0; }
.ipi-course-section { margin: 0 0 60px; }
.ipi-course-section:last-child { margin-bottom: 0; }

.ipi-course-h2 { font-size: 32px; line-height: 1.15; font-weight: 700; color: var(--ipi-ink); margin: 0; text-wrap: pretty; }
/* Heading rule fallback (no theme): same K5 footprint as the theme's .ipi-hr. */
.ipi-rule { display: block; width: 104px; height: 3px; margin: 20px 0; border-radius: 0 2px 2px 0; background: var(--ipi-rule-bar); box-shadow: var(--ipi-rule-glow); }
.ipi-course-section p { font-size: 16px; line-height: 1.5; color: var(--ipi-muted); margin: 15px 0; }
.ipi-course-section p:first-child { margin-top: 0; }
.ipi-course-section p:last-child { margin-bottom: 0; }

/* Lists get real bullets. The theme's Tailwind preflight resets list-style/
   display on ul/li; !important + explicit display:list-item keep our markers. */
.ipi-course-main ul { list-style: disc outside !important; padding-left: 22px; margin: 0; }
.ipi-course-main ul li { display: list-item !important; font-size: 16px; line-height: 1.5; color: var(--ipi-muted); margin: 0 0 8px; }
.ipi-course-main ul li:last-child { margin-bottom: 0; }
.ipi-course-main ul li::marker { color: var(--ipi-brand); }

/* Overview: tile floats right, copy wraps beside + under it ---------------- */
/* BFC so the tile float is contained here and `clear` inside stays inside —
   the section sits beside the rail (with benefits/outcomes) without clearing it. */
.ipi-course-overview { display: flow-root; }
/* The whole image at its own ratio — course images come 3:2 landscape and 6:7 portrait, and a square crop
   cut both (Seb, 2026-10-15). Landscape tiles are wider so the artwork's badge prints at the same size as
   on a portrait tile (300px wide = 200px tall). */
.ipi-course-tile { float: right; width: 220px; margin: 0 0 16px 36px; border-radius: var(--ipi-c-radius-image); overflow: hidden; }
.ipi-course-tile--wide { width: 300px; }
.ipi-course-tile img { width: 100%; height: auto; display: block; }
.ipi-course-codelabel { font-size: 12px; font-weight: 600; color: var(--ipi-muted); margin: 0 0 15px; }
.ipi-course-cols { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 40px; margin-top: 40px; }
.ipi-course-col h3 { font-size: 17px; line-height: 1.15; font-weight: 700; color: var(--ipi-ink); margin: 0 0 15px; }

/* Upcoming sessions rail (DS course-dates direction A, 2026-10-14) -------- */
/* One tile per dated session in a horizontal scroller; distance is a standing offer below.
   min-width:0 down the chain, or the rail widens the main column instead of scrolling. */
.ipi-dates { min-width: 0; }
.ipi-dates-head { display: flex; justify-content: space-between; align-items: center; gap: 20px; margin-bottom: 15px; min-height: 36px; }
.ipi-dates-count { font-size: 13px; color: var(--ipi-muted); }
.ipi-dates-nav { display: flex; gap: 8px; }
.ipi-dates-nav[hidden] { display: none; }
.ipi-dates-arrow { display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 1px solid var(--ipi-brand); border-radius: var(--ipi-c-radius-control); background: var(--ipi-surface-control); color: var(--ipi-brand); cursor: pointer; transition: background var(--dur-state, 160ms) var(--ease-out, ease-out), opacity var(--dur-state, 160ms) var(--ease-out, ease-out); }
.ipi-dates-arrow:hover { background: var(--ipi-c-tint); }
.ipi-dates-arrow:focus-visible { outline: none; box-shadow: var(--ipi-focus); }
.ipi-dates-arrow:disabled { opacity: 0.35; cursor: default; background: var(--ipi-surface-control); }
.ipi-dates-arrow svg { display: block; }
.ipi-dates-railwrap { position: relative; min-width: 0; container-type: inline-size; }
/* -4px margins: the padding keeps tile shadows unclipped without pulling the first tile off the text edge;
   scroll-padding makes snapped tiles land on that same edge. */
.ipi-dates-rail { display: flex; gap: 15px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-inline: 4px; scrollbar-width: none; padding: 4px 4px 10px; margin: -4px -4px 0; cursor: grab; }
.ipi-dates-rail::-webkit-scrollbar { display: none; }
.ipi-dates-rail.is-dragging { scroll-snap-type: none; cursor: grabbing; user-select: none; }
.ipi-dates-tile { flex: 0 0 100%; box-sizing: border-box; scroll-snap-align: start; display: flex; flex-direction: column; gap: 4px; padding: 18px 20px 20px; background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-c-radius-card); box-shadow: var(--ipi-c-elev-1); container-type: inline-size; }
.ipi-dates-year { font-family: var(--ipi-c-heading-font); font-size: 11px; font-weight: 600; letter-spacing: 0.08em; color: var(--ipi-brand); }
/* "Nov 23 – 26" on one line, scaled to the tile (cqi = tile content width) so it fits two across on phones;
   "Sep 28 – Oct 1" names a second month, so it runs smaller in the same line box. */
.ipi-dates-days { font-family: var(--ipi-c-heading-font); font-size: min(28px, 15cqi); font-weight: 700; line-height: min(30.8px, 16.5cqi); color: var(--ipi-ink); margin: 2px 0 8px; white-space: nowrap; }
.ipi-dates-days--span { font-size: min(22px, 12.5cqi); }
.ipi-dates-city { font-family: var(--ipi-c-heading-font); font-size: 15px; font-weight: 600; color: var(--ipi-ink); }
.ipi-dates-mode { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ipi-muted); }
.ipi-dates-mode svg { flex: none; width: 14px; height: 14px; }
/* Price, then the early-bird tag beneath it while it's on. */
.ipi-dates-price { display: block; margin-top: 6px; font-family: var(--ipi-c-heading-font); font-size: 15px; font-weight: 600; color: var(--ipi-ink); }
/* Status only on runs that can't be booked (Registration closed / Fully booked; Seb, 2026-10-15) — the
   shared helper's text as plain muted copy (no badge, no dot). */
.ipi-dates-status { font-size: 13px; color: var(--ipi-muted); }
.ipi-dates-status .ipi-badge { font-family: inherit; font-size: inherit; font-weight: 400; color: inherit; white-space: normal; }
.ipi-dates-status .ipi-status-dot { display: none; }
/* Pinned to the tile foot so buttons line up when a status wraps; 10px + the 4px gap = 14px. */
.ipi-dates-cta { margin-top: auto; padding-top: 10px; }
/* Whole tiles always fill the width, so no sliver of the next tile shows at the edge; the arrows and the
   count say there's more. Two across on phones (tighter tile, smaller numerals), one only when very
   narrow, three from 648px (min 206px each). */
@container (min-width: 300px) and (max-width: 426.98px) {
	.ipi-dates-rail { gap: 10px; }
	.ipi-dates-tile { flex-basis: calc((100% - 10px) / 2); padding: 14px 14px 16px; }
}
@container (min-width: 427px) { .ipi-dates-tile { flex-basis: calc((100% - 15px) / 2); } }
@container (min-width: 648px) { .ipi-dates-tile { flex-basis: calc((100% - 30px) / 3); } }
.ipi-course a.ipi-course-cta.ipi-course-cta--compact { width: auto; padding: 6px 12px; }
/* Enquire: ink, as on the schedule (brand colour is for booking). */
.ipi-course a.ipi-course-cta.ipi-course-cta--enquire, .ipi-course a.ipi-course-cta.ipi-course-cta--enquire:link, .ipi-course a.ipi-course-cta.ipi-course-cta--enquire:visited { border-color: var(--ipi-ink); color: var(--ipi-ink); box-shadow: 0 2px 0 var(--ipi-bar-ondark); }
.ipi-course a.ipi-course-cta.ipi-course-cta--enquire:hover { background: var(--ipi-bg); border-color: var(--ipi-ink); color: var(--ipi-ink); box-shadow: 0 1px 0 var(--ipi-bar-ondark); }.ipi-dates-distance { display: flex; align-items: center; gap: 14px; margin-top: 5px; padding: 16px 20px; background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-c-radius-card); box-shadow: var(--ipi-c-elev-1); }
.ipi-dates-distance-icon { flex: none; display: grid; place-items: center; width: 36px; height: 36px; border-radius: var(--ipi-c-radius-control); background: var(--ipi-c-tint); color: var(--ipi-brand); }
.ipi-dates-distance-icon svg { width: 18px; height: 18px; }
.ipi-dates-distance-body { flex: 1; min-width: 0; font-size: 14px; line-height: 1.4; color: var(--ipi-muted); }
.ipi-dates-distance-name { display: block; font-family: var(--ipi-c-heading-font); font-weight: 600; color: var(--ipi-ink); }
.ipi-dates-distance-blurb { display: block; }
/* Prompt and link sit together (they read as one line); the link drops under it when there is no room. */
.ipi-dates-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin-top: 15px; font-size: 14px; line-height: 1.5; color: var(--ipi-muted); }
.ipi-course a.ipi-dates-all { display: inline-flex; align-items: center; gap: 6px; font-family: var(--ipi-c-heading-font); font-size: 14px; font-weight: 600; color: var(--ipi-brand); text-decoration: none; white-space: nowrap; }
.ipi-course a.ipi-dates-all:hover { color: var(--ipi-brand-dark); }
.ipi-dates-all svg { width: 14px; height: 14px; }
/* Phones: icon beside the title, description and button full width below (no indented text column). */
@media (max-width: 560px) {
	.ipi-dates-distance { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 10px 12px; align-items: center; padding: 16px; }
	.ipi-dates-distance-body { display: contents; }
	.ipi-dates-distance-blurb { grid-column: 1 / -1; }
	.ipi-dates-distance .ipi-course-cta { grid-column: 1 / -1; justify-self: start; }
}

/* "Show more" on long session tables (course + venues; ipi-booking-show-more.php). The script adds
   .is-collapsed and unhides the footer bar; no JS = every row, no bar. */
.ipi-btable.is-collapsed tr[data-more], .is-collapsed > .ipi-session-card[data-more] { display: none; }

/* Stacked session tables (.ipi-btable--stack: course page; --stack-wide: venues). Under 640px of the table card's own
   width each row becomes a card — a container query, since both tables sit in columns narrower than the
   viewport (the card needs container-type: inline-size). Each table only names its layout in
   --ipi-stack-areas from these cell roles (.ipi-cell-*): dates, course, mode, loc, price, status, cta.
   The schedule draws separate mobile cards (.ipi-session-card) instead. */
@container (max-width: 639px) {
	.ipi-btable--stack thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
	.ipi-btable--stack, .ipi-btable--stack tbody, .ipi-btable--stack tfoot { display: block; }
	.ipi-btable--stack tfoot tr { display: block; padding: 0; border-bottom: none; }
	.ipi-btable--stack tbody tr { display: grid; grid-template-columns: minmax(0,1fr) auto; grid-template-areas: var(--ipi-stack-areas); gap: 4px 12px; padding: 14px 16px; border-bottom: 1px solid var(--ipi-line); }
	.ipi-btable--stack tbody tr:last-child { border-bottom: none; }
	.ipi-btable--stack tr.ipi-alt { background-color: var(--ipi-row-alt); }
	.ipi-btable.ipi-btable--stack td { display: block; min-width: 0; padding: 0; border: none; background-color: transparent; }
	.ipi-btable.ipi-btable--stack tbody tr:hover td { background-color: transparent; }
	.ipi-btable--stack .ipi-cell-dates { grid-area: dates; font-size: var(--ipi-fs-title); }
	.ipi-btable--stack .ipi-cell-course { grid-area: course; font-weight: 600; color: var(--ipi-ink); }
	.ipi-btable--stack .ipi-cell-mode { grid-area: mode; align-self: center; color: var(--ipi-muted); font-size: var(--ipi-fs-small); }
	.ipi-btable--stack .ipi-cell-loc { grid-area: loc; color: var(--ipi-muted); font-size: var(--ipi-fs-small); }
	.ipi-btable--stack .ipi-cell-price { grid-area: price; align-self: center; text-align: right; }
	.ipi-btable--stack .ipi-cell-status { grid-area: status; align-self: center; margin-top: 6px; }
	.ipi-btable--stack .ipi-cell-cta { grid-area: cta; align-self: center; margin-top: 6px; }
	.ipi-btable--stack .ipi-cell-cta a.ipi-session-cta { padding: 12px 0; margin: -7.5px 0; }
}
/* .ipi-btable--stack-wide: the same card rules, switching below 900px for tables with more columns
   (venues: six; the widest venue table needs ~790px, and Firefox renders it a little wider than Chrome). A container query's width can't come from a variable, so this block mirrors the one
   above — change both together. */
@container (max-width: 899px) {
	.ipi-btable--stack-wide thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
	.ipi-btable--stack-wide, .ipi-btable--stack-wide tbody, .ipi-btable--stack-wide tfoot { display: block; }
	.ipi-btable--stack-wide tfoot tr { display: block; padding: 0; border-bottom: none; }
	.ipi-btable--stack-wide tbody tr { display: grid; grid-template-columns: minmax(0,1fr) auto; grid-template-areas: var(--ipi-stack-areas); gap: 4px 12px; padding: 14px 16px; border-bottom: 1px solid var(--ipi-line); }
	.ipi-btable--stack-wide tbody tr:last-child { border-bottom: none; }
	.ipi-btable--stack-wide tr.ipi-alt { background-color: var(--ipi-row-alt); }
	.ipi-btable.ipi-btable--stack-wide td { display: block; min-width: 0; padding: 0; border: none; background-color: transparent; }
	.ipi-btable.ipi-btable--stack-wide tbody tr:hover td { background-color: transparent; }
	.ipi-btable--stack-wide .ipi-cell-dates { grid-area: dates; font-size: var(--ipi-fs-title); }
	.ipi-btable--stack-wide .ipi-cell-course { grid-area: course; font-weight: 600; color: var(--ipi-ink); }
	.ipi-btable--stack-wide .ipi-cell-mode { grid-area: mode; align-self: center; color: var(--ipi-muted); font-size: var(--ipi-fs-small); }
	.ipi-btable--stack-wide .ipi-cell-loc { grid-area: loc; color: var(--ipi-muted); font-size: var(--ipi-fs-small); }
	.ipi-btable--stack-wide .ipi-cell-price { grid-area: price; align-self: center; text-align: right; }
	.ipi-btable--stack-wide .ipi-cell-status { grid-area: status; align-self: center; margin-top: 6px; }
	.ipi-btable--stack-wide .ipi-cell-cta { grid-area: cta; align-self: center; margin-top: 6px; }
	.ipi-btable--stack-wide .ipi-cell-cta a.ipi-session-cta { padding: 12px 0; margin: -7.5px 0; }
}
/* Schedule: the bar sits in the course body under the table/cards; bleed it to the card edges like the table. */
.ipi-course-body > div.ipi-more-row { margin: 0 -20px; }
.ipi-bookings section.ipi-course { scroll-margin-top: 100px; } /* "Show less" scrolls back to the course head, clear of the sticky header */
.ipi-more-row[hidden] { display: none !important; }
.ipi-btable tfoot.ipi-more-row td { padding: 0; border-top: 1px solid var(--ipi-line); border-bottom: none; }
div.ipi-more-row { border-top: 1px solid var(--ipi-line); }
/* Collapsed, the last visible row isn't :last-child, so drop its own bottom rule — the bar's top border is the divider. */
.ipi-btable.is-collapsed tbody tr:has(+ tr[data-more]),
.ipi-btable.is-collapsed tbody tr:has(+ tr[data-more]) td { border-bottom: none; }
.ipi-more { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; padding: 12px 16px; background: transparent; border: 0; cursor: pointer; font-family: var(--font-heading, inherit); font-size: var(--ipi-fs-control); font-weight: 600; color: var(--ipi-brand); transition: background-color 0.12s; }
.ipi-more:hover { background-color: var(--ipi-tint); }
.ipi-more:focus-visible { outline: 2px solid var(--ipi-brand); outline-offset: -2px; }
.ipi-more-icon { transition: transform 0.15s; }
.ipi-more[aria-expanded="true"] .ipi-more-icon { transform: rotate(180deg); }
.ipi-course-empty { font-size: 14px; line-height: 1.5; color: var(--ipi-muted); margin: 15px 0 0; }

/* Study modes ------------------------------------------------------------ */
/* Card layout: one card per offered mode, equal height, link pinned to bottom. */
.ipi-course-modes { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 20px; }
.ipi-course-mode { background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-radius-card); padding: 25px; display: flex; flex-direction: column; gap: 15px; }
/* A lone mode card shouldn't stretch full width; cap it (multiple keep filling the grid). */
.ipi-course-mode:only-child { max-width: 360px; }
.ipi-course-mode-icon { width: 44px; height: 44px; border-radius: var(--ipi-c-radius-control); background: var(--ipi-c-tint); color: var(--ipi-brand); display: grid; place-items: center; }
.ipi-course-mode-name { font-size: 16px; font-weight: 600; color: var(--ipi-ink); }
/* Scoped with the parent so it beats `.ipi-course-section p` (size + margin). */
.ipi-course-mode .ipi-course-mode-blurb { font-size: 14px; line-height: 1.5; color: var(--ipi-muted); margin: 5px 0 0; }
.ipi-course-mode-link { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 600; color: var(--ipi-brand); white-space: nowrap; margin-top: auto; text-decoration: none; }
.ipi-course-mode-link:hover { color: var(--ipi-brand-dark); }

/* Curriculum accordion (native details) ---------------------------------- */
.ipi-course-accordion { border: 1px solid var(--ipi-line); border-radius: var(--ipi-c-radius-card); overflow: hidden; background: var(--ipi-surface); }
.ipi-course-unit { border-top: 1px solid var(--ipi-line); }
.ipi-course-unit:first-child { border-top: none; }
.ipi-course-unit > summary { cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 20px; font-size: 15px; font-weight: 600; color: var(--ipi-ink); }
.ipi-course-unit > summary::-webkit-details-marker { display: none; }
.ipi-course-unit > summary::after { content: ""; flex: none; width: 9px; height: 9px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); transition: transform 0.2s ease; margin-bottom: 3px; }
.ipi-course-unit[open] > summary::after { transform: rotate(-135deg); margin-bottom: -3px; }
.ipi-course-unit .ipi-course-list { padding: 0 20px 18px 40px; }
.ipi-course-unit .ipi-course-list li { font-size: 14px; margin-bottom: 5px; }

/* Further study ---------------------------------------------------------- */
/* Cards cap at 350px like the theme's Card Grid, so a lone card never stretches full width. */
.ipi-course-related { display: grid; grid-template-columns: repeat(3, minmax(0,350px)); gap: 10px; }
.ipi-course a.ipi-course-related-card { display: block; background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-c-radius-card); box-shadow: var(--ipi-c-elev-1); overflow: hidden; transition: transform .16s, box-shadow .16s; }
.ipi-course a.ipi-course-related-card:hover { transform: translateY(-3px); box-shadow: var(--ipi-c-elev-3); }
.ipi-course-related-media { display: block; aspect-ratio: 1 / 1; border-bottom: 1px solid var(--ipi-line); }
.ipi-course-related-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ipi-course-related-body { display: block; padding: 15px 20px 20px; }
.ipi-course-related-kicker { display: block; font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ipi-brand); }
.ipi-course-related-title { display: block; font-size: 15px; font-weight: 600; line-height: 1.3; color: var(--ipi-ink); margin-top: 5px; }
.ipi-course-related-more { display: block; font-size: 13px; font-weight: 600; color: var(--ipi-brand); margin-top: 10px; }

/* Rail ("At a glance") — floats right; content wraps under it ------------- */
.ipi-course-rail { position: sticky; top: calc(var(--ipi-header-h, 0px) + var(--ipi-subnav-h, 0px) + 20px); background: var(--ipi-surface); border: 1px solid var(--ipi-line); border-radius: var(--ipi-radius-card); padding: 25px; }
.ipi-course-rail-kicker { font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ipi-brand); margin: 0; }
.ipi-course-facts { margin: 15px 0 0; }
.ipi-course-fact { padding-top: 15px; margin-top: 15px; border-top: 1px solid var(--ipi-line); }
.ipi-course-facts > .ipi-course-fact:first-child { padding-top: 0; margin-top: 0; border-top: none; }
.ipi-course-fact dt { font-size: 13px; color: var(--ipi-muted); margin: 0; }
.ipi-course-fact dd { font-size: 15px; font-weight: 600; color: var(--ipi-ink); margin: 5px 0 0; }
.ipi-course-priceblock { margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--ipi-line); }
.ipi-course-price-label { font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ipi-brand); margin: 0 0 10px; }
.ipi-course-prices { display: grid; gap: 6px; }
.ipi-course-price-row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; font-size: 14px; color: var(--ipi-muted); }
.ipi-course-price-amt { font-weight: 600; color: var(--ipi-ink); white-space: nowrap; font-family: var(--ipi-c-heading-font); }
.ipi-course-price-note { display: block; font-size: 12px; color: var(--ipi-muted); margin-top: 6px; }
.ipi-course-buttons { display: grid; gap: 10px; margin-top: 25px; }
.ipi-course-ctabank { margin-top: 20px; }
.ipi-course .ipi-course-ctabank a { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--ipi-line); font-size: 14px; font-weight: 600; color: var(--ipi-ink); }
.ipi-course .ipi-course-ctabank a:last-child { border-bottom: none; }
.ipi-course .ipi-course-ctabank a:hover { color: var(--ipi-brand); }
.ipi-course-ctabank-icon { flex: none; display: inline-flex; color: var(--ipi-brand); }

/* Booking CTAs — design-system primary / secondary ----------------------- */
/* Match the theme's ipi_button() output exactly (accent tokens + the 2px base
   bar that compresses on hover/press). Tokens fall back to the plugin's brand. */
.ipi-course a.ipi-course-cta {
	display: inline-flex; align-items: center; justify-content: center; gap: 8px;
	width: 100%;
	border: 1.5px solid transparent;
	border-radius: var(--ipi-radius);
	padding: 10px 15px;
	font-family: var(--ipi-c-heading-font);
	font-size: 14px; font-weight: 600; line-height: 20px;
	text-shadow: none;
	transition: transform .15s, box-shadow .15s, background-color .15s, border-color .15s, color .15s;
}
.ipi-course-cta-arrow { flex: none; }
/* Primary */
.ipi-course a.ipi-course-cta--primary { border-color: transparent; background: var(--ipi-brand); color: var(--ipi-on-brand); box-shadow: 0 2px 0 var(--ipi-bar-primary); }
.ipi-course a.ipi-course-cta--primary:link, .ipi-course a.ipi-course-cta--primary:visited { color: var(--ipi-on-brand); }
.ipi-course a.ipi-course-cta--primary:hover { background: var(--ipi-brand-dark); color: var(--ipi-on-brand); transform: translateY(1px); box-shadow: 0 1px 0 var(--ipi-bar-primary); }
.ipi-course a.ipi-course-cta--primary:active { transform: translateY(2px); box-shadow: none; }
/* Secondary */
.ipi-course a.ipi-course-cta--secondary { border-color: var(--ipi-brand); background: var(--ipi-surface-control); color: var(--ipi-brand); box-shadow: 0 2px 0 var(--ipi-bar-secondary); }
.ipi-course a.ipi-course-cta--secondary:link, .ipi-course a.ipi-course-cta--secondary:visited { color: var(--ipi-brand); }
.ipi-course a.ipi-course-cta--secondary:hover { background: var(--ipi-tint); border-color: var(--ipi-brand-dark); color: var(--ipi-brand-dark); transform: translateY(1px); box-shadow: 0 1px 0 var(--ipi-bar-secondary); }
.ipi-course a.ipi-course-cta--secondary:active { transform: translateY(2px); box-shadow: none; }

/* Breadcrumb links stay brand-magenta at rest (matching the standard theme
   templates — "Home" is magenta), darkening on hover; the `/` separators and
   the current crumb keep the theme's muted/ink via their own utility classes. */
.ipi-course .ipi-breadcrumb a { text-decoration: none; color: var(--ipi-muted); } /* muted, as the theme's breadcrumb — outranks .ipi-course a */
.ipi-course .ipi-breadcrumb a:hover { color: var(--ipi-brand); }

/* Responsive ------------------------------------------------------------- */
@media (max-width: 860px) {
	.ipi-course-hero-inner { padding: 0 20px; }
	.ipi-course-card { padding: 25px 25px 30px; }
	.ipi-course h1.ipi-course-title { font-size: 32px; }
}
/* Phones — same as the theme's editorial hero: a short banner, a fixed 40px overlap (not half the card, which
   covered the whole image), and a card 15px from the screen edges. */
@media (max-width: 639px) {
	.ipi-course-hero-media { height: 180px; }
	.ipi-course-hero-media + .ipi-course-hero-inner .ipi-course-card { margin-top: -40px; }
	.ipi-course-hero-inner { padding: 0 15px; }
	.ipi-course-card { padding: 25px 20px 28px; }
	.ipi-course h1.ipi-course-title { font-size: 30px; }
}
@media (max-width: 359px) { .ipi-course h1.ipi-course-title { font-size: 26px; } }
@media (max-width: 860px) {
	.ipi-course-grid { padding: var(--ipi-block-py) 20px; grid-template-columns: minmax(0,1fr); gap: 40px; }
	.ipi-course .opn { --opn-gutter: 20px; }
	/* On mobile the rail sits ABOVE the course content (order beats source order). */
	.ipi-course-rail { position: static; order: -1; }
	.ipi-course-tile { float: none; width: 100%; max-width: 320px; margin: 0 0 20px; }
	.ipi-course-cols { grid-template-columns: minmax(0,1fr); gap: 32px; }
	.ipi-course-related { grid-template-columns: minmax(0,350px); justify-content: center; }
}
@media (min-width: 561px) and (max-width: 860px) {
	.ipi-course-related { grid-template-columns: repeat(2, minmax(0,350px)); justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
	.ipi-course a.ipi-course-related-card { transition: none; }
	.ipi-course a.ipi-course-related-card:hover { transform: none; }
	.ipi-course-unit > summary::after { transition: none; }
}

/* A single CTA under body copy (empty Dates section): natural width, not the rail stack. */
.ipi-course-buttons--inline { display: flex; margin-top: 15px; }
.ipi-course .ipi-course-buttons--inline a.ipi-course-cta { width: auto; }
