/* RSW Studio design system. Tokens come from theme.json (--wp--preset--*). Light gallery canvas,
   oversized Manrope, precise alignment, generous space. Accents are for rules, marks and shapes,
   never for body text (contrast). Classes below are applied to Elementor containers and widgets. */

:root {
	--rsw-ink: var(--wp--preset--color--ink, #181A1C);
	--rsw-white: var(--wp--preset--color--white, #FFFFFF);
	--rsw-blue: var(--wp--preset--color--blue, #2548F4);
	--rsw-cyan: var(--wp--preset--color--cyan, #00C8F0);
	--rsw-coral: var(--wp--preset--color--coral, #FF6957);
	--rsw-yellow: var(--wp--preset--color--yellow, #E8F33A);
	--rsw-tint: rgba(24, 26, 28, 0.045);
	--rsw-rule: rgba(24, 26, 28, 0.14);
	--rsw-wrap: 76rem;
	--rsw-gutter: clamp(1.25rem, 4vw, 3rem);
	--rsw-display: var(--wp--preset--font-family--manrope, system-ui, sans-serif);
}

body { -webkit-font-smoothing: antialiased; }

/* ---------- Header ---------- */
.rsw-header { position: sticky; top: 0; z-index: 50; background: rgba(255, 255, 255, 0.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--rsw-rule); }
.rsw-wordmark, .rsw-wordmark a { font-family: var(--rsw-display); font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; font-size: 0.8125rem !important; text-decoration: none; color: var(--rsw-ink); }
.rsw-header .wp-block-navigation a { text-decoration: none; color: var(--rsw-ink); font-size: 0.9375rem; font-weight: 500; }
.rsw-header .wp-block-navigation a:hover { text-decoration: underline; text-underline-offset: 6px; }
.rsw-header .wp-block-navigation .rsw-nav-cta > a { border: 2px solid var(--rsw-ink); border-radius: 999px; padding: 0.4rem 1.1rem; font-weight: 700; }
.rsw-header .wp-block-navigation .rsw-nav-cta > a:hover { background: var(--rsw-ink); color: var(--rsw-white); text-decoration: none; }

/* ---------- Footer ---------- */
.rsw-footer { border-top: 1px solid var(--rsw-rule); background: var(--rsw-tint); }
.rsw-footer a { color: var(--rsw-ink); text-underline-offset: 4px; }
.rsw-footer__name { font-size: var(--wp--preset--font-size--large); line-height: 1.3; }

/* ---------- Shared type ---------- */
.rsw-eyebrow, .rsw-eyebrow a { font-size: 0.75rem !important; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--rsw-ink); text-decoration: none; margin: 0; }
.elementor .rsw-display .elementor-heading-title,
.rsw-display { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.04em; line-height: 0.98; font-size: clamp(2.5rem, 7vw, 6rem); color: var(--rsw-ink); margin: 0; }
.elementor .rsw-h2 .elementor-heading-title { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.035em; line-height: 1.02; font-size: clamp(2rem, 4.6vw, 3.75rem); color: var(--rsw-ink); }
.elementor .rsw-h3 .elementor-heading-title { font-family: var(--rsw-display); font-weight: 700; letter-spacing: -0.02em; line-height: 1.1; font-size: clamp(1.4rem, 2.4vw, 2rem); color: var(--rsw-ink); }
.elementor .rsw-lead, .elementor .rsw-lead p { font-size: clamp(1.1rem, 1.6vw, 1.4rem); line-height: 1.5; color: var(--rsw-ink); max-width: 38rem; }
.elementor .rsw-body, .elementor .rsw-body p, .elementor .rsw-body li { font-size: 1.0625rem; line-height: 1.65; color: var(--rsw-ink); }
.elementor .rsw-small, .elementor .rsw-small p { font-size: 0.875rem; color: var(--rsw-ink); opacity: 0.8; }
.elementor .rsw-mark { background: linear-gradient(transparent 62%, var(--rsw-yellow) 62%); }
.elementor a { text-underline-offset: 4px; }
.elementor .rsw-body a, .elementor .rsw-lead a { color: var(--rsw-blue); }

/* ---------- Layout primitives (Elementor containers) ---------- */
.elementor .e-con.rsw-section { width: 100%; padding: clamp(3.5rem, 9vw, 8rem) var(--rsw-gutter); --gap: 0px; --row-gap: 0px; --column-gap: 0px; }
.elementor .e-con.rsw-section--tint { background: var(--rsw-tint); }
.elementor .e-con.rsw-wrap { width: 100%; max-width: var(--rsw-wrap); margin-inline: auto; padding: 0; gap: clamp(1.25rem, 3vw, 2.5rem); }
.elementor .e-con.rsw-grid-12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: clamp(1.25rem, 3vw, 2.5rem); align-items: start; }
.elementor .e-con.rsw-col-7 { grid-column: span 7; }
.elementor .e-con.rsw-col-5 { grid-column: span 5; }
.elementor .e-con.rsw-col-6 { grid-column: span 6; }
.elementor .e-con.rsw-col-4 { grid-column: span 4; }
.elementor .e-con.rsw-col-12 { grid-column: span 12; }
.elementor .e-con.rsw-stack { display: flex; flex-direction: column; gap: 1rem; }
.elementor .e-con.rsw-cols-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(1.25rem, 3vw, 2.5rem); }
.elementor .e-con.rsw-cols-4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(1.25rem, 3vw, 2rem); }
.elementor .e-con.rsw-cols-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(1.25rem, 3vw, 2.5rem); }
.elementor .e-con.rsw-card { border-top: 4px solid var(--rsw-ink); padding-top: 1.25rem; gap: 0.9rem; }
.elementor .e-con.rsw-card--cyan { border-top-color: var(--rsw-cyan); }
.elementor .e-con.rsw-card--coral { border-top-color: var(--rsw-coral); }
.elementor .e-con.rsw-card--yellow { border-top-color: var(--rsw-yellow); }
.elementor .e-con.rsw-card--blue { border-top-color: var(--rsw-blue); }
.elementor .e-con.rsw-rule-top { border-top: 1px solid var(--rsw-rule); padding-top: 1.25rem; }

/* ---------- Buttons ---------- */
.elementor .rsw-btn .elementor-button { font-family: var(--rsw-display); font-weight: 700; font-size: 1rem; background: var(--rsw-ink); color: var(--rsw-white); border: 2px solid var(--rsw-ink); border-radius: 999px; padding: 0.85rem 1.6rem; transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease; }
.elementor .rsw-btn .elementor-button:hover { background: var(--rsw-blue); border-color: var(--rsw-blue); color: var(--rsw-white); }
.elementor .rsw-btn--ghost .elementor-button { background: transparent; color: var(--rsw-ink); }
.elementor .rsw-btn--ghost .elementor-button:hover { background: var(--rsw-ink); border-color: var(--rsw-ink); color: var(--rsw-white); }
.elementor .rsw-btn .elementor-button:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.elementor .e-con.rsw-btn-row { flex-direction: row; flex-wrap: wrap; gap: 0.9rem; }

/* ---------- Home hero: asymmetric, W is the object, copy stays readable on its own ---------- */
.rsw-motion { width: 100%; }
.elementor .e-con.rsw-hero { width: 100%; padding: 0 var(--rsw-gutter); }
.elementor .e-con.rsw-hero__stage {
	width: 100%; max-width: var(--rsw-wrap); margin-inline: auto; padding: clamp(1rem, 2.5vw, 2rem) 0;
	display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 8fr); align-items: center; gap: clamp(0.5rem, 2vw, 2rem);
	min-height: min(78svh, 46rem);
}
.elementor .e-con.rsw-hero__copy { display: flex; flex-direction: column; gap: 1.25rem; padding: 0; z-index: 2; }
.elementor .e-con.rsw-hero__media { position: relative; display: grid; padding: 0; margin: -1.5rem calc(var(--rsw-gutter) * -1.6) -1.5rem -2rem; }
/* The hero headline is smaller than page display type so it holds two or three lines, not five. */
.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(2.25rem, 4.6vw, 4.25rem); line-height: 1; }
.elementor .rsw-hero__poster-block, .elementor .rsw-hero__video-block { grid-area: 1 / 1; margin: 0; }
.elementor .rsw-hero__poster-block img { width: 100%; height: auto; aspect-ratio: 8 / 5; object-fit: contain; display: block; }
.elementor .rsw-hero__video-block { display: none; }
.rsw-motion--on .elementor .rsw-hero__video-block, .rsw-motion--on .rsw-hero__video-block { display: block; }
.elementor .rsw-hero__video-block .elementor-wrapper { position: static; padding: 0 !important; aspect-ratio: 8 / 5; }
.elementor .rsw-hero__video-block video { width: 100%; height: 100%; aspect-ratio: 8 / 5; object-fit: contain; opacity: 0; transition: opacity 0.3s ease; background: #fff; }
/* The poster stays until a frame can be shown; only while motion is allowed does the video take over. */
@media (prefers-reduced-motion: no-preference) {
	.rsw-hero--video-ready .rsw-hero__video-block video { opacity: 1; }
	.rsw-hero--video-ready .rsw-hero__poster-block { visibility: hidden; }
}
.rsw-hero--static .rsw-hero__video-block { display: none !important; }
.rsw-hero--static .rsw-hero__poster-block { visibility: visible !important; }
.rsw-proof-label { position: absolute; right: 0.5rem; bottom: 0.5rem; z-index: 3; margin: 0; padding: 0.25rem 0.6rem; font-size: 0.75rem; background: var(--rsw-ink); color: var(--rsw-white); border-radius: 999px; }
.rsw-motion-toggle { align-self: flex-start; margin-top: 0.5rem; padding: 0.45rem 1rem; font: inherit; font-size: 0.8125rem; font-weight: 700; color: var(--rsw-ink); background: transparent; border: 2px solid currentColor; border-radius: 999px; cursor: pointer; }
.rsw-motion-toggle:hover { background: var(--rsw-ink); color: var(--rsw-white); }
.rsw-motion-toggle:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }

/* ---------- Work feature + grid ---------- */
.elementor .rsw-feature-img img { width: 100%; height: auto; display: block; aspect-ratio: 3 / 2; object-fit: cover; }
.rsw-work-grid .wp-block-post-template { gap: clamp(1.25rem, 3vw, 2.5rem); }
.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) { grid-column: 1 / -1; display: grid; grid-template-columns: 7fr 5fr; gap: 0.75rem clamp(1.25rem, 3vw, 2.5rem); align-content: center; align-items: start; }
.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) .wp-block-post-featured-image { grid-column: 1; grid-row: 1 / span 4; margin: 0; }
.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) > :not(.wp-block-post-featured-image) { grid-column: 2; }
.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) .wp-block-post-title { font-size: clamp(1.75rem, 3vw, 2.75rem); line-height: 1.05; }
.rsw-work-grid .wp-block-post-title a, .rsw-journal .wp-block-post-title a { color: var(--rsw-ink); text-decoration: none; font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.02em; }
.rsw-work-grid .wp-block-post-title a:hover, .rsw-journal .wp-block-post-title a:hover { text-decoration: underline; text-underline-offset: 5px; }
.rsw-work-grid .wp-block-post-featured-image img, .rsw-journal .wp-block-post-featured-image img { transition: transform 0.4s ease; }
.rsw-work-grid li:hover .wp-block-post-featured-image img { transform: scale(1.02); }
.rsw-work-grid li:not(:has(.wp-block-post-featured-image img)) { border-top: 4px solid var(--rsw-ink); padding-top: 1rem; }

/* ---------- Case study gallery ---------- */
.elementor .e-con.rsw-gallery { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: clamp(0.75rem, 2vw, 1.5rem); }
.elementor .rsw-gallery .rsw-g-wide { grid-column: span 8; }
.elementor .rsw-gallery .rsw-g-half { grid-column: span 6; }
.elementor .rsw-gallery .rsw-g-third { grid-column: span 4; }
.elementor .rsw-gallery img { width: 100%; height: 100%; object-fit: cover; aspect-ratio: 3 / 2; display: block; }
.elementor .rsw-reveal { opacity: 1; transform: none; }
/* Only elements that start below the fold are armed (by JS), so nothing above the fold ever fades in. */
@media (prefers-reduced-motion: no-preference) {
	.js-rsw .elementor .rsw-reveal.is-armed { opacity: 0; transform: translateY(18px); transition: opacity 0.7s ease, transform 0.7s ease; }
	.js-rsw .elementor .rsw-reveal.is-armed.is-in { opacity: 1; transform: none; }
}

/* ---------- Brand guidelines page ---------- */
.elementor .e-con.rsw-brand { display: grid; grid-template-columns: 14rem minmax(0, 1fr); gap: clamp(1.5rem, 4vw, 4rem); max-width: 86rem; margin-inline: auto; padding: 0 var(--rsw-gutter); }
.rsw-brand-nav { position: sticky; top: 5rem; align-self: start; padding: 2rem 0; display: flex; flex-direction: column; gap: 0.15rem; }
.rsw-brand-nav a { display: block; padding: 0.45rem 0.75rem; text-decoration: none; color: var(--rsw-ink); font-weight: 500; border-left: 3px solid transparent; }
.rsw-brand-nav a:hover { border-left-color: var(--rsw-ink); }
.rsw-brand-nav a[aria-current="true"] { color: var(--rsw-blue); border-left-color: var(--rsw-blue); font-weight: 700; }
.rsw-brand-section { padding: clamp(2.5rem, 6vw, 5rem) 0; border-bottom: 1px solid var(--rsw-rule); scroll-margin-top: 5rem; }
.rsw-swatches { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: 1rem; }
.rsw-swatch { border: 0; padding: 0; background: none; text-align: left; cursor: pointer; font: inherit; color: var(--rsw-ink); }
.rsw-swatch__chip { display: block; height: 9rem; border-radius: 12px; border: 1px solid var(--rsw-rule); }
.rsw-swatch__label { display: block; margin-top: 0.5rem; font-weight: 700; }
.rsw-swatch__hex { display: block; font-variant-numeric: tabular-nums; font-size: 0.875rem; }
.rsw-swatch:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 4px; border-radius: 12px; }
.rsw-swatch[data-copied="true"] .rsw-swatch__hex::after { content: "  copied"; font-weight: 700; }
.rsw-type-specimen { font-family: var(--rsw-display); font-weight: 800; font-size: clamp(5rem, 14vw, 11rem); line-height: 0.9; letter-spacing: -0.05em; margin: 0; }
.rsw-type-body { font-family: var(--wp--preset--font-family--dm-sans, system-ui); font-size: clamp(1.5rem, 3vw, 2.25rem); margin: 0; }
.rsw-live-region { position: absolute; left: -9999px; }

/* ---------- Responsive ---------- */
/* Placeholders and dashed notices (block theme style.css is not loaded on the front end, so they live here). */
.rsw-placeholder, p.rsw-placeholder { border: 2px dashed currentColor; padding: 1.25rem; text-align: center; font-size: 0.875rem; margin: 0; }
.elementor .rsw-placeholder { border: 2px dashed currentColor; padding: 1.25rem; text-align: center; font-size: 0.875rem; }

@media (max-width: 900px) {
	.elementor .e-con.rsw-hero__stage { grid-template-columns: 1fr; min-height: 0; padding-top: 1.5rem; }
	.elementor .e-con.rsw-hero__media { margin: 0 calc(var(--rsw-gutter) * -0.5); order: -1; }
	.elementor .e-con.rsw-grid-12 { display: flex; flex-direction: column; }
	.elementor .e-con.rsw-cols-3, .elementor .e-con.rsw-cols-4, .elementor .e-con.rsw-cols-2 { grid-template-columns: 1fr; }
	.elementor .e-con.rsw-gallery { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.elementor .rsw-gallery .rsw-g-wide { grid-column: span 2; }
	.elementor .rsw-gallery .rsw-g-half, .elementor .rsw-gallery .rsw-g-third { grid-column: span 1; }
	.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) { grid-template-columns: 1fr; }
	.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) .wp-block-post-featured-image { grid-row: auto; }
	.rsw-work-grid .wp-block-post-template > li:first-child:has(.wp-block-post-featured-image img) > :not(.wp-block-post-featured-image) { grid-column: 1; }
	.elementor .e-con.rsw-brand { grid-template-columns: 1fr; }
	.rsw-brand-nav { position: static; flex-direction: row; flex-wrap: wrap; padding: 1rem 0; gap: 0.25rem 0.75rem; }
	.rsw-brand-nav a { border-left: 0; border-bottom: 3px solid transparent; padding: 0.35rem 0; }
	.rsw-brand-nav a[aria-current="true"] { border-bottom-color: var(--rsw-blue); }
}
@media (prefers-reduced-motion: reduce) {
	.rsw-work-grid .wp-block-post-featured-image img, .elementor .rsw-btn .elementor-button { transition: none; }
}

/* Previous / next project links */
.rsw-next .wp-block-post-navigation-link { font-family: var(--rsw-display); font-weight: 700; font-size: 1.125rem; }
.rsw-next .wp-block-post-navigation-link a { color: var(--rsw-ink); text-decoration: none; border-bottom: 3px solid var(--rsw-ink); padding-bottom: 2px; }
.rsw-next .wp-block-post-navigation-link a:hover { border-bottom-color: var(--rsw-blue); color: var(--rsw-blue); }

/* Short laptop screens: keep the headline and both calls to action above the fold. */
@media (min-width: 901px) and (max-height: 780px) {
	.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(2rem, 3.6vw, 3.25rem); }
	.elementor .e-con.rsw-hero__copy { gap: 0.8rem; }
	.elementor .rsw-hero__copy .rsw-lead, .elementor .rsw-hero__copy .rsw-lead p { font-size: 1.05rem; }
}

/* ============================================================================================
   Review 05 additions: shared Motion preference, handoff, review layer, About, Brand toolkit
   ============================================================================================ */

/* Motion off (from the toggle or the system) means content is simply visible, everywhere. */
html[data-rsw-motion="off"] .rsw-reveal,
html[data-rsw-motion="off"] .rsw-reveal.is-armed { opacity: 1 !important; transform: none !important; transition: none !important; }

/* Compact hero motion control: a small pill in the corner of the artwork, not a full-column outline. */
.rsw-motion-toggle { position: absolute; left: 0.5rem; bottom: 0.5rem; z-index: 4; margin: 0; padding: 0.25rem 0.7rem; font: inherit; font-size: 0.6875rem; font-weight: 700; letter-spacing: 0.02em; color: var(--rsw-ink); background: rgba(255, 255, 255, 0.9); border: 1px solid var(--rsw-ink); border-radius: 999px; cursor: pointer; }
.rsw-motion-toggle:disabled { opacity: 0.75; cursor: default; }
.rsw-footer-motion { margin-top: 0.5rem; padding: 0.35rem 0.9rem; font: inherit; font-size: 0.8125rem; font-weight: 600; color: var(--rsw-ink); background: transparent; border: 1px solid var(--rsw-ink); border-radius: 999px; cursor: pointer; }
.rsw-footer-motion:hover:not(:disabled) { background: var(--rsw-ink); color: var(--rsw-white); }
.rsw-footer-motion:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.rsw-footer-motion:disabled { opacity: 0.7; cursor: default; }

/* Development-only review layer: internal notes never appear in public copy. Open any page with ?review=1. */
.rsw-review-note { display: none; margin: 0.75rem 0 0; padding: 0.5rem 0.75rem; font-size: 0.8125rem; border: 1px dashed var(--rsw-ink); background: rgba(232, 243, 58, 0.25); }
html[data-rsw-review="on"] .rsw-review-note { display: block; }

/* ---------- W to portfolio handoff: frames rise out of the W's space. Final layout is the static layout. ---------- */
.rsw-handoff { position: relative; z-index: 2; padding: 0 var(--rsw-gutter); margin-top: -4vh; }
.rsw-handoff__inner { max-width: var(--rsw-wrap); margin-inline: auto; padding: clamp(2rem, 6vw, 5rem) 0; }
.rsw-handoff__title { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.04em; line-height: 0.98; font-size: clamp(2.25rem, 6vw, 5rem); margin: 0.5rem 0 clamp(1.5rem, 4vw, 3rem); color: var(--rsw-ink); }
.rsw-handoff__frames { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1.1fr 1.4fr 1fr; gap: clamp(0.75rem, 2vw, 1.75rem); align-items: end; }
.rsw-frame { margin: 0; }
.rsw-frame a, .rsw-frame__empty { position: relative; display: flex; flex-direction: column; justify-content: flex-end; gap: 0.35rem; min-height: clamp(14rem, 28vw, 24rem); padding: 1rem; border-radius: 18px; overflow: hidden; text-decoration: none; color: var(--rsw-ink); background: var(--rsw-tint); border: 1px solid var(--rsw-rule); }
.rsw-frame--brand a { color: var(--rsw-white); border-color: transparent; padding: 1rem; min-height: clamp(18rem, 34vw, 30rem); }
.rsw-frame--brand img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; transition: transform 0.5s ease; }
.rsw-frame--brand a::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to top, rgba(0, 0, 0, 0.65), transparent 55%); z-index: 1; }
.rsw-frame--brand .rsw-frame__label, .rsw-frame--brand .rsw-frame__title { position: relative; z-index: 2; }
.rsw-frame--brand a:hover img { transform: scale(1.03); }
.rsw-frame--art a { background: var(--rsw-yellow); border-color: transparent; min-height: clamp(15rem, 30vw, 26rem); }
.rsw-frame__type { font-family: var(--rsw-display); font-weight: 800; font-size: clamp(3.5rem, 9vw, 7.5rem); line-height: 0.9; letter-spacing: -0.05em; margin-bottom: auto; }
.rsw-frame__empty { border-style: dashed; border-color: var(--rsw-ink); background: transparent; }
.rsw-frame__label { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; }
.rsw-frame__title { font-family: var(--rsw-display); font-weight: 700; font-size: clamp(1.1rem, 1.8vw, 1.5rem); line-height: 1.15; }
.rsw-frame a:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
@media (min-width: 901px) {
	.rsw-handoff__frames .rsw-frame--art { transform: translateY(2.5rem); }
	.rsw-handoff__frames .rsw-frame--graphics { transform: translateY(1rem); }
}
/* Motion only: the frames travel in from the W as the section scrolls into view (--rsw-p is 0 to 1). */
html[data-rsw-motion="on"] .rsw-handoff.is-driven .rsw-frame { opacity: calc(0.15 + var(--rsw-p, 1) * 0.85); will-change: transform, opacity; }
html[data-rsw-motion="on"] .rsw-handoff.is-driven .rsw-frame--art { transform: translate3d(calc((1 - var(--rsw-p, 1)) * 38vw), calc(2.5rem + (1 - var(--rsw-p, 1)) * -9rem), 0) scale(calc(0.72 + var(--rsw-p, 1) * 0.28)) rotate(calc((1 - var(--rsw-p, 1)) * 5deg)); }
html[data-rsw-motion="on"] .rsw-handoff.is-driven .rsw-frame--brand { transform: translate3d(0, calc((1 - var(--rsw-p, 1)) * -7rem), 0) scale(calc(0.78 + var(--rsw-p, 1) * 0.22)); }
html[data-rsw-motion="on"] .rsw-handoff.is-driven .rsw-frame--graphics { transform: translate3d(calc((1 - var(--rsw-p, 1)) * -38vw), calc(1rem + (1 - var(--rsw-p, 1)) * -9rem), 0) scale(calc(0.72 + var(--rsw-p, 1) * 0.28)) rotate(calc((1 - var(--rsw-p, 1)) * -5deg)); }
@media (max-width: 900px) {
	.rsw-handoff { margin-top: 0; }
	.rsw-handoff__frames { grid-template-columns: 1fr; }
	.rsw-handoff__frames .rsw-frame--art, .rsw-handoff__frames .rsw-frame--graphics { transform: none; }
	html[data-rsw-motion="on"] .rsw-handoff.is-driven .rsw-frame { transform: none !important; opacity: 1; }
}

/* ---------- Home rhythm: image band, art accent ---------- */
.elementor .e-con.rsw-band { padding-top: 0; padding-bottom: 0; }
.elementor .e-con.rsw-band__row { display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: clamp(0.5rem, 1.5vw, 1.25rem); width: 100%; max-width: 92rem; margin-inline: auto; padding: 0; }
.elementor .rsw-band__row img { width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4 / 3; display: block; }
.elementor .rsw-band__a img { aspect-ratio: 16 / 11; }
@media (max-width: 900px) { .elementor .e-con.rsw-band__row { grid-template-columns: 1fr; } }
.elementor .e-con.rsw-art img { width: 100%; height: auto; display: block; border-radius: 4px; }

/* ---------- About ---------- */
.rsw-portrait { position: relative; aspect-ratio: 4 / 5; width: 100%; max-width: 28rem; margin-left: auto; background: linear-gradient(160deg, #fff 0%, var(--rsw-tint) 100%); border: 1px solid var(--rsw-rule); border-radius: 22px; display: grid; place-items: center; overflow: hidden; }
.rsw-portrait::before { content: ""; position: absolute; inset: 0.9rem; border: 1px solid var(--rsw-rule); border-radius: 14px; }
.rsw-portrait__mark { font-family: var(--rsw-display); font-weight: 800; font-size: clamp(3rem, 9vw, 6rem); letter-spacing: -0.05em; color: var(--rsw-ink); opacity: 0.12; }
.rsw-timeline { list-style: none; margin: 1.25rem 0 0; padding: 0; display: grid; gap: 0; border-top: 1px solid var(--rsw-rule); }
.rsw-timeline li { display: grid; grid-template-columns: 9rem 1fr; gap: 1rem; padding: 0.8rem 0; border-bottom: 1px solid var(--rsw-rule); }
.rsw-timeline__year { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.02em; }
.elementor .e-con.rsw-frames-row { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: clamp(0.5rem, 1.5vw, 1.25rem); align-items: end; }
.elementor .rsw-frames-row img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }
.elementor .rsw-frames-row .rsw-fr-a img { aspect-ratio: 3 / 2; }
@media (max-width: 900px) { .elementor .e-con.rsw-frames-row { grid-template-columns: 1fr; } .rsw-portrait { margin-inline: 0; max-width: 100%; } .rsw-timeline li { grid-template-columns: 1fr; gap: 0.15rem; } }
.elementor figcaption, .elementor .widget-image-caption { font-size: 0.8125rem; opacity: 0.85; padding-top: 0.4rem; }

/* ---------- Case study video poster with an explicit play control ---------- */
.rsw-video-poster { position: relative; aspect-ratio: 16 / 9; width: 100%; background: var(--rsw-ink); overflow: hidden; border-radius: 6px; }
.rsw-video-poster > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.82; }
.rsw-video-poster__play { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); display: inline-flex; align-items: center; gap: 0.6rem; padding: 0.9rem 1.6rem; font: inherit; font-family: var(--rsw-display); font-weight: 800; font-size: 1.125rem; color: var(--rsw-ink); background: var(--rsw-white); border: 0; border-radius: 999px; cursor: pointer; box-shadow: 0 6px 30px rgba(0, 0, 0, 0.35); }
.rsw-video-poster__play:hover { background: var(--rsw-yellow); }
.rsw-video-poster__play:focus-visible { outline: 3px solid var(--rsw-yellow); outline-offset: 4px; }
.rsw-video-poster__note { position: absolute; left: 1rem; bottom: 0.75rem; font-size: 0.75rem; color: var(--rsw-white); text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); }
.rsw-video-poster__frame { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* ---------- Brand toolkit ---------- */
.rsw-field { display: grid; gap: 0.35rem; margin: 0.75rem 0; border: 0; padding: 0; }
.rsw-field > span, .rsw-field legend { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; padding: 0; }
.rsw-field--inline { display: flex; gap: 1.25rem; align-items: center; flex-wrap: wrap; }
.rsw-field input[type="text"] { font: inherit; font-size: 1.0625rem; padding: 0.65rem 0.85rem; border: 2px solid var(--rsw-ink); border-radius: 10px; width: 100%; max-width: 36rem; }
.rsw-field input[type="range"] { width: 100%; max-width: 28rem; accent-color: var(--rsw-blue); }
.rsw-field input:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.rsw-type-tester__out { margin: 1rem 0 0.25rem; line-height: 1; letter-spacing: -0.03em; overflow-wrap: anywhere; min-height: 2em; }
.rsw-identity { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1rem 0; }
.rsw-identity__tile { position: relative; aspect-ratio: 4 / 3; border-radius: 16px; padding: 1.1rem; display: flex; flex-direction: column; justify-content: space-between; overflow: hidden; border: 1px solid var(--rsw-rule); }
.rsw-identity__tile--light { background: #FAFAF8; color: var(--rsw-ink); }
.rsw-identity__tile--dark { background: var(--rsw-ink); color: #FAFAF8; border-color: var(--rsw-ink); }
.rsw-identity__wordmark { font-family: var(--rsw-display); font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; font-size: 0.8125rem; }
.rsw-identity__w { width: 100%; height: auto; max-height: 70%; object-fit: contain; align-self: center; mix-blend-mode: multiply; }
.rsw-identity__chip { align-self: center; width: 78%; background: #FAFAF8; border-radius: 14px; padding: 0.25rem; }
.rsw-identity__chip img { width: 100%; height: auto; display: block; border-radius: 10px; }
.rsw-grid-demo { position: relative; margin: 1rem 0; padding: 1rem; background: var(--rsw-tint); border-radius: 14px; }
.rsw-grid-demo__overlay { position: absolute; inset: 1rem; display: none; grid-template-columns: repeat(12, 1fr); gap: 12px; pointer-events: none; z-index: 2; }
.rsw-grid-demo__overlay i { background: rgba(37, 72, 244, 0.16); border-left: 1px solid rgba(37, 72, 244, 0.5); border-right: 1px solid rgba(37, 72, 244, 0.5); }
.rsw-grid-demo.is-on .rsw-grid-demo__overlay { display: grid; }
.rsw-grid-demo__content { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12px; min-height: 9rem; }
.rsw-grid-demo__a { grid-column: span 7; background: var(--rsw-white); border: 1px solid var(--rsw-rule); padding: 1rem; font-weight: 700; }
.rsw-grid-demo__b { grid-column: span 5; background: var(--rsw-ink); color: var(--rsw-white); padding: 1rem; font-weight: 700; }
.rsw-btn-lite { font: inherit; font-weight: 700; padding: 0.55rem 1.1rem; color: var(--rsw-ink); background: transparent; border: 2px solid var(--rsw-ink); border-radius: 999px; cursor: pointer; }
.rsw-btn-lite:hover, .rsw-btn-lite[aria-pressed="true"] { background: var(--rsw-ink); color: var(--rsw-white); }
.rsw-btn-lite:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.rsw-motion-demo { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1rem 0; }
.rsw-motion-demo figure { margin: 0; }
.rsw-motion-demo img, .rsw-motion-demo video { width: 100%; height: auto; aspect-ratio: 8 / 5; object-fit: contain; background: #fff; border: 1px solid var(--rsw-rule); border-radius: 12px; display: block; }
.rsw-motion-demo figcaption { font-size: 0.8125rem; padding-top: 0.4rem; }
.rsw-material { margin: 1rem 0; }
.rsw-material img { width: 100%; max-width: 34rem; height: auto; border-radius: 14px; display: block; }
.rsw-chapters { border-collapse: collapse; width: 100%; max-width: 40rem; font-size: 0.9375rem; }
.rsw-chapters th, .rsw-chapters td { text-align: left; padding: 0.55rem 0.75rem; border-bottom: 1px solid var(--rsw-rule); }
.rsw-chapters thead th { font-size: 0.75rem; letter-spacing: 0.14em; text-transform: uppercase; }
.rsw-swatch[data-copy-failed="true"] .rsw-swatch__hex::after { content: "  select and copy"; font-weight: 700; }
@media (max-width: 900px) { .rsw-identity, .rsw-motion-demo { grid-template-columns: 1fr; } }
@media (prefers-reduced-motion: reduce) { .rsw-frame--brand img { transition: none; } }

/* Let the engine pin the hero stage. Elementor's `.e-con { position: relative }` outranks the engine's
   `.sc-stage` rule, which is why the engine warned that the stage would not pin. */
@media (min-width: 901px) {
	.elementor .e-con.rsw-hero__stage.sc-stage { position: sticky; top: 0; height: 100svh; min-height: 0; padding-top: 4.5rem; padding-bottom: 1.5rem; align-self: flex-start; overflow: clip; }
	.elementor .e-con.rsw-hero.sc-act--pinned { position: relative; }
}

/* Reserve the pinned hero height from first paint (the engine sets exactly 200vh at mount). Without this,
   everything below the hero jumped down when the engine mounted (CLS 0.139). Released the moment motion is
   off or the adapter falls back to static. */
@media (min-width: 901px) {
	html[data-rsw-motion="on"] .rsw-motion:not(.rsw-hero--static) .e-con.rsw-hero { min-height: 200vh; }
}

/* ============================================================================================
   Flow: motion that carries the visitor between blocks and between pages.
   Everything here follows the shared Motion preference (html[data-rsw-motion]) and degrades to the
   plain, fully visible layout when motion is off or the system asks for reduced motion.
   ============================================================================================ */

/* ---------- Across pages: same-origin View Transitions ---------- */
/* Declared for everyone: with motion allowed the head script picks "morph" or "wipe"; with Motion off or
   prefers-reduced-motion: reduce it picks "fade", a short crossfade with nothing moving (TASK-2.10). */
@view-transition { navigation: auto; }
/* While the head script names the clicked tile, the static names below stand down so no name is duplicated. */
html.rsw-vt-dyn .rsw-frame--brand img, html.rsw-vt-dyn .elementor .rsw-lead-img img,
html.rsw-vt-dyn .rsw-work-grid .wp-block-post-template > li:first-child .wp-block-post-featured-image img { view-transition-name: none; }
/* The header never cross-fades with itself. */
.rsw-header { view-transition-name: rsw-header; }
/* Shared elements morph between pages. Names must be unique per page, so each is set on exactly one element:
   the hero W (home) becomes the brand hero W; the Brand frame (home) and the first Work card become the case-study lead image. */
.elementor .rsw-hero__poster-block img { view-transition-name: rsw-w; }
.rsw-frame--brand img,
.elementor .rsw-lead-img img,
.rsw-work-grid .wp-block-post-template > li:first-child .wp-block-post-featured-image img { view-transition-name: rsw-lead; }

::view-transition-old(root) { animation: rsw-vt-out 220ms cubic-bezier(.4, 0, .6, 1) both; }
::view-transition-new(root) { animation: rsw-vt-in 360ms cubic-bezier(.2, .7, .2, 1) both; }
::view-transition-group(rsw-w), ::view-transition-group(rsw-lead) { animation-duration: 560ms; animation-timing-function: cubic-bezier(.2, .7, .2, 1); }
::view-transition-group(rsw-header) { animation: none; }
@keyframes rsw-vt-out { to { opacity: 0; transform: translateY(-10px); } }
/* wipe: the old page is cut away left to right over a color field, then the new page is drawn in the same way
   (mirrored on Back). 600 ms in all; the field color comes from the head script (coral, acid yellow, violet in turn). */
html:active-view-transition-type(wipe)::view-transition { background: var(--rsw-vt-field, var(--rsw-coral)); }
html:active-view-transition-type(wipe)::view-transition-old(root) { animation: rsw-wipe-out 300ms cubic-bezier(.7, 0, .3, 1) both; }
html:active-view-transition-type(wipe)::view-transition-new(root) { animation: rsw-wipe-in 340ms 260ms cubic-bezier(.7, 0, .3, 1) both; }
html:active-view-transition-type(back)::view-transition-old(root) { animation-name: rsw-wipe-out-back; }
html:active-view-transition-type(back)::view-transition-new(root) { animation-name: rsw-wipe-in-back; }
@keyframes rsw-wipe-out { from { clip-path: inset(0 0 0 0); } to { clip-path: inset(0 0 0 100%); } }
@keyframes rsw-wipe-in { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes rsw-wipe-out-back { from { clip-path: inset(0 0 0 0); } to { clip-path: inset(0 100% 0 0); } }
@keyframes rsw-wipe-in-back { from { clip-path: inset(0 0 0 100%); } to { clip-path: inset(0 0 0 0); } }
/* An old image with no partner on the new page is hidden, so it never floats over the wipe. */
html:active-view-transition-type(wipe)::view-transition-group(rsw-lead), html:active-view-transition-type(wipe)::view-transition-group(rsw-w) { display: none; }
/* morph: a quick crossfade underneath while the clicked image travels into place. */
html:active-view-transition-type(morph)::view-transition-old(root) { animation: rsw-fade-out 240ms ease both; }
html:active-view-transition-type(morph)::view-transition-new(root) { animation: rsw-fade-in 320ms 120ms ease both; }
html:active-view-transition-type(morph)::view-transition-group(rsw-lead) { animation-duration: 600ms; animation-timing-function: cubic-bezier(.2, .8, .2, 1); }
/* fade (Motion off, reduced motion): opacity only, nothing travels or scales. */
html:active-view-transition-type(fade)::view-transition-group(*) { animation: none; }
html:active-view-transition-type(fade)::view-transition-old(*) { animation: rsw-fade-out 160ms ease both; }
html:active-view-transition-type(fade)::view-transition-new(*) { animation: rsw-fade-in 160ms ease both; }
@keyframes rsw-fade-out { to { opacity: 0; } }
@keyframes rsw-fade-in { from { opacity: 0; } }
@keyframes rsw-vt-in { from { opacity: 0; transform: translateY(16px); } }

/* ---------- Between blocks on a page: the ribbon thread ---------- */
/* Above the blocks (Rob, 2026-10-09: it was hidden behind every coloured or dark block); it runs in the side lanes, so it never crosses copy. */
.rsw-thread { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; z-index: 6; }
.rsw-thread path { fill: none; stroke: url(#rsw-thread-grad); stroke-width: 3; stroke-linecap: round; opacity: 0.85; }
.rsw-thread .rsw-thread__ghost { stroke: var(--rsw-rule); stroke-width: 1; opacity: 1; }
html:not([data-rsw-motion="on"]) .rsw-thread { display: none; }
@media (max-width: 900px) { .rsw-thread { display: none; } }

/* The block the visitor is in lights up: eyebrow rule grows, card rules extend. */
.rsw-eyebrow::before { content: ""; display: none; vertical-align: middle; height: 2px; width: 1.75rem; margin-right: 0.6rem; background: currentColor; transform: scaleX(0); transform-origin: left center; transition: transform 0.5s cubic-bezier(.2, .7, .2, 1); }
html[data-rsw-motion="on"] .rsw-eyebrow::before { display: inline-block; }
html[data-rsw-motion="on"] .is-current .rsw-eyebrow::before { transform: scaleX(1); }
.elementor .e-con.rsw-card { background-image: linear-gradient(currentColor, currentColor); background-repeat: no-repeat; background-size: 0 0; }
html[data-rsw-motion="on"] .elementor .e-con.rsw-card { transition: transform 0.35s cubic-bezier(.2, .7, .2, 1); }
html[data-rsw-motion="on"] .elementor .e-con.rsw-card:hover,
html[data-rsw-motion="on"] .elementor .e-con.rsw-card:focus-within { transform: translateY(-4px); }

/* Images wipe in with a short stagger (index set by the page script). Only armed, below-the-fold images do this. */
@media (prefers-reduced-motion: no-preference) {
	html[data-rsw-motion="on"] .elementor-widget-image.rsw-reveal.is-armed img { clip-path: inset(0 0 100% 0); }
	html[data-rsw-motion="on"] .elementor-widget-image.rsw-reveal.is-armed.is-in img { clip-path: inset(0); transition: clip-path 0.9s cubic-bezier(.2, .7, .2, 1); transition-delay: calc(var(--i, 0) * 70ms); }
	html[data-rsw-motion="on"] .js-rsw .elementor .rsw-reveal.is-armed.is-in { transition-delay: calc(var(--i, 0) * 70ms); }
}

/* ---------- Interaction: neighbours respond to what the visitor points at or focuses ---------- */
html[data-rsw-motion="on"] .rsw-frame { transition: opacity 0.3s ease, filter 0.3s ease; }
html[data-rsw-motion="on"] .rsw-handoff__frames:has(.rsw-frame a:hover, .rsw-frame a:focus-visible) .rsw-frame:not(:has(a:hover, a:focus-visible)) { opacity: 0.55; filter: saturate(0.7); }
html[data-rsw-motion="on"] .elementor .rsw-btn .elementor-button { background-image: linear-gradient(100deg, transparent 30%, rgba(255, 255, 255, 0.28) 50%, transparent 70%); background-size: 250% 100%; background-position: 130% 0; }
html[data-rsw-motion="on"] .elementor .rsw-btn .elementor-button:hover { background-position: -30% 0; transition: background-position 0.7s ease, background-color 0.2s ease, color 0.2s ease; }
html[data-rsw-motion="on"] .rsw-work-grid li .wp-block-post-title a { background: linear-gradient(currentColor, currentColor) 0 100% / 0 2px no-repeat; transition: background-size 0.4s cubic-bezier(.2, .7, .2, 1); text-decoration: none; }
html[data-rsw-motion="on"] .rsw-work-grid li:hover .wp-block-post-title a, html[data-rsw-motion="on"] .rsw-work-grid li:focus-within .wp-block-post-title a { background-size: 100% 2px; }

/* ============================================================================================
   Canon v1.1 additions (TASK-2.1): full token set, dark moments, hero deck, per-page headers,
   labelled image slots, portfolio filter, contact form.
   ============================================================================================ */
:root {
	--rsw-ink-secondary: var(--wp--preset--color--ink-secondary, #55595E);
	--rsw-rule-solid: var(--wp--preset--color--rule, #D9DDE1);
	--rsw-violet: var(--wp--preset--color--art-violet, #9564F5);
	--rsw-dark-canvas: var(--wp--preset--color--dark-canvas, #090A10);
	--rsw-dark-ink: var(--wp--preset--color--dark-ink, #F5F3ED);
	--rsw-canvas: var(--wp--preset--color--canvas, #FAFAF8);
}
body { background: var(--rsw-canvas); }
.elementor .rsw-small, .elementor .rsw-small p { color: var(--rsw-ink-secondary); opacity: 1; }
.elementor figcaption, .elementor .widget-image-caption { color: var(--rsw-ink-secondary); opacity: 1; }

/* ---------- Dark moments: any Elementor container can take the class `rsw-dark` ---------- */
.elementor .e-con.rsw-dark { background: var(--rsw-dark-canvas); color: var(--rsw-dark-ink); }
.rsw-dark .rsw-display, .elementor .rsw-dark .rsw-display .elementor-heading-title,
.elementor .rsw-dark .rsw-h2 .elementor-heading-title, .elementor .rsw-dark .rsw-h3 .elementor-heading-title,
.elementor .rsw-dark .rsw-lead, .elementor .rsw-dark .rsw-lead p,
.elementor .rsw-dark .rsw-body, .elementor .rsw-dark .rsw-body p, .elementor .rsw-dark .rsw-body li,
.rsw-dark .rsw-eyebrow, .rsw-dark .rsw-eyebrow a { color: var(--rsw-dark-ink); }
.elementor .rsw-dark .rsw-small, .elementor .rsw-dark .rsw-small p { color: var(--rsw-dark-ink); opacity: 0.85; }
.elementor .rsw-dark .rsw-body a, .elementor .rsw-dark .rsw-lead a, .elementor .rsw-dark .rsw-small a { color: var(--rsw-cyan); }
.elementor .rsw-dark .rsw-btn .elementor-button { background: var(--rsw-dark-ink); color: var(--rsw-dark-canvas); border-color: var(--rsw-dark-ink); }
.elementor .rsw-dark .rsw-btn .elementor-button:hover { background: var(--rsw-yellow); border-color: var(--rsw-yellow); color: var(--rsw-dark-canvas); }
.elementor .rsw-dark .rsw-btn--ghost .elementor-button { background: transparent; color: var(--rsw-dark-ink); }
.elementor .rsw-dark .rsw-btn--ghost .elementor-button:hover { background: var(--rsw-dark-ink); color: var(--rsw-dark-canvas); border-color: var(--rsw-dark-ink); }
.elementor .rsw-dark .rsw-btn .elementor-button:focus-visible { outline-color: var(--rsw-yellow); }
.elementor .e-con.rsw-dark .rsw-card { border-top-color: var(--rsw-dark-ink); }
.elementor .e-con.rsw-dark .rsw-card--cyan { border-top-color: var(--rsw-cyan); }
.elementor .e-con.rsw-dark .rsw-card--coral { border-top-color: var(--rsw-coral); }
.elementor .e-con.rsw-dark.rsw-section { padding-block: clamp(4rem, 10vw, 9rem); }
.elementor .e-con.rsw-dark--band { background: radial-gradient(120% 140% at 85% 120%, rgba(149, 100, 245, 0.35), transparent 55%), radial-gradient(90% 120% at 10% -20%, rgba(0, 200, 240, 0.22), transparent 55%), var(--rsw-dark-canvas); }
.elementor .rsw-pending, .rsw-pending { background: rgba(232, 243, 58, 0.55); color: var(--rsw-ink); padding: 0.1rem 0.4rem; border-radius: 4px; font-weight: 600; }
.elementor .rsw-dark .rsw-pending, .rsw-dark .rsw-pending { background: var(--rsw-yellow); color: var(--rsw-dark-canvas); }
.elementor .e-con.rsw-rule-top { border-top-color: var(--rsw-rule-solid); }

/* ---------- Home hero is dark; the W is slide 1 of a deck ---------- */
.elementor .e-con.rsw-dark--hero { background: var(--rsw-dark-canvas); }
.elementor .rsw-dark--hero .rsw-hero__video-block video { background: var(--rsw-dark-canvas); }
.rsw-dark--hero .rsw-motion-toggle { background: rgba(9, 10, 16, 0.85); color: var(--rsw-dark-ink); border-color: var(--rsw-dark-ink); }
.elementor .rsw-deck .rsw-slide { display: none; width: 100%; }
.elementor .rsw-deck .rsw-slide.is-active { display: flex; }
.elementor .e-con.rsw-slide--work, .elementor .e-con.rsw-slide--infra { position: relative; min-height: min(78svh, 46rem); padding: clamp(3rem, 8vw, 6rem) var(--rsw-gutter); justify-content: center; overflow: hidden; }
.rsw-slide__kinetic { position: relative; z-index: 2; margin: 0 0 1.5rem; font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.045em; line-height: 0.95; font-size: clamp(2.75rem, 10vw, 9rem); color: var(--rsw-dark-ink); max-width: 14ch; }
.elementor .rsw-slide--work .rsw-slide__kinetic { color: var(--rsw-yellow); }
.elementor .rsw-slide .rsw-wrap { position: relative; z-index: 2; }
.elementor .rsw-slide__art { position: absolute; inset: 0; z-index: 0; margin: 0; }
.elementor .rsw-slide__art .rsw-slot { height: 100%; border: 0; border-radius: 0; opacity: 0.9; }
.elementor .rsw-slide__art .rsw-slot img { width: 100%; height: 100%; object-fit: cover; }
.elementor .rsw-deck .rsw-deck-ui { position: sticky; bottom: 1rem; z-index: 6; margin-top: -4rem; padding: 0 var(--rsw-gutter) 1rem; width: 100%; }
.rsw-deck__ui { display: flex; align-items: center; justify-content: center; gap: 0.9rem; }
.rsw-deck__prev, .rsw-deck__next, .rsw-deck__dot { font: inherit; cursor: pointer; color: var(--rsw-dark-ink); background: rgba(9, 10, 16, 0.7); border: 1px solid var(--rsw-dark-ink); border-radius: 999px; }
.rsw-deck__prev, .rsw-deck__next { width: 2.5rem; height: 2.5rem; font-size: 1.1rem; line-height: 1; }
.rsw-deck__dots { display: flex; gap: 0.5rem; list-style: none; margin: 0; padding: 0; }
.rsw-deck__dot { width: 0.8rem; height: 0.8rem; padding: 0; }
.rsw-deck__dot[aria-current="true"] { background: var(--rsw-yellow); border-color: var(--rsw-yellow); }
.rsw-deck__prev:hover, .rsw-deck__next:hover { background: var(--rsw-dark-ink); color: var(--rsw-dark-canvas); }
.rsw-deck__prev:focus-visible, .rsw-deck__next:focus-visible, .rsw-deck__dot:focus-visible { outline: 3px solid var(--rsw-yellow); outline-offset: 3px; }
@media (prefers-reduced-motion: no-preference) {
	html[data-rsw-motion="on"] .rsw-slide.is-entering .rsw-slide__kinetic { animation: rsw-kin 0.9s cubic-bezier(.2, .7, .2, 1) both; }
	html[data-rsw-motion="on"] .rsw-slide.is-entering .rsw-slide__art { animation: rsw-fade 1.2s ease both; }
}
@keyframes rsw-kin { from { opacity: 0; transform: translateY(40px) skewY(3deg); clip-path: inset(0 0 100% 0); } to { opacity: 1; transform: none; clip-path: inset(0); } }
@keyframes rsw-fade { from { opacity: 0; } to { opacity: 0.9; } }

/* ---------- Labelled image slots (Rob's file when present, otherwise an honest placeholder) ---------- */
.rsw-slot { position: relative; margin: 0; width: 100%; overflow: hidden; border-radius: 18px; background: var(--rsw-tint); }
.rsw-slot img { display: block; width: 100%; height: auto; }
.rsw-slot--landscape { aspect-ratio: 16 / 9; }
.rsw-slot--square { aspect-ratio: 1 / 1; }
.rsw-slot--portrait { aspect-ratio: 4 / 5; }
.rsw-slot--empty { display: grid; place-items: end start; padding: 0.9rem; border: 2px dashed var(--rsw-ink-secondary);
	background: radial-gradient(70% 80% at 80% 20%, rgba(255, 105, 87, 0.28), transparent 60%), radial-gradient(60% 70% at 15% 85%, rgba(0, 200, 240, 0.25), transparent 60%), radial-gradient(50% 60% at 55% 55%, rgba(149, 100, 245, 0.22), transparent 65%), var(--rsw-canvas); }
.rsw-slot__tag { display: inline-block; max-width: 100%; padding: 0.3rem 0.6rem; font-size: 0.75rem; font-weight: 700; line-height: 1.3; background: var(--rsw-ink); color: var(--rsw-white); border-radius: 8px; }
.rsw-dark .rsw-slot--empty { border-color: var(--rsw-dark-ink); background: radial-gradient(70% 80% at 80% 20%, rgba(255, 105, 87, 0.3), transparent 60%), radial-gradient(60% 70% at 15% 85%, rgba(0, 200, 240, 0.28), transparent 60%), radial-gradient(50% 60% at 55% 55%, rgba(149, 100, 245, 0.3), transparent 65%), var(--rsw-dark-canvas); }
.rsw-dark .rsw-slot__tag { background: var(--rsw-dark-ink); color: var(--rsw-dark-canvas); }
.rsw-slot--tile { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 0; border: 0; aspect-ratio: auto; }
.rsw-frame--art a { background: var(--rsw-tint); }
.elementor .e-con.rsw-campaign { gap: 0.9rem; }
.elementor .e-con.rsw-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.elementor .rsw-credits, .rsw-credits { list-style: none; margin: 1.25rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 1rem; }
.rsw-credits li { border-top: 2px solid var(--rsw-ink); padding-top: 0.6rem; }

/* ---------- Page headers: "floating frame". Rob's image objects sit around the edges (the art layer), the live
   headline sits in the calm centre. One idea per page; the art moves with pointer and scroll (pages.js) while
   Motion is on. ---------- */
.elementor .e-con.rsw-ph, .rsw-ph { width: 100%; position: relative; overflow: hidden; padding: 0; isolation: isolate; }
.rsw-ph__grid, .elementor .e-con.rsw-ph__grid { position: relative; max-width: none; width: 100%; margin: 0; padding: clamp(3rem, 8vw, 6rem) var(--rsw-gutter); min-height: clamp(22rem, 46vw, 34rem); display: grid; align-items: center; }
.rsw-ph__copy, .elementor .e-con.rsw-ph__copy { position: relative; z-index: 2; display: flex; flex-direction: column; gap: 1rem; width: 100%; max-width: 38rem; margin-inline: auto; padding: 0; align-items: center; text-align: center; }
.rsw-ph__art, .elementor .e-con.rsw-ph__art { position: absolute; inset: 0; z-index: 0; margin: 0; padding: 0; }
.rsw-ph__art .rsw-slot, .elementor .rsw-ph__art .rsw-slot { height: 100%; width: 100%; border-radius: 0; box-shadow: none; aspect-ratio: auto; will-change: transform; }
.rsw-ph__art .rsw-slot img { width: 100%; height: 100%; object-fit: cover; }
.rsw-ph__art .rsw-slot--empty { place-items: start center; padding: 0.75rem; }
.rsw-ph .rsw-display, .elementor .rsw-ph .rsw-display .elementor-heading-title { font-size: clamp(2.25rem, 5.6vw, 5rem); }
.rsw-ph--about .rsw-ph__copy, .rsw-ph--contact .rsw-ph__copy, .rsw-ph--usecases .rsw-ph__copy { margin-inline: 0; align-items: flex-start; text-align: left; max-width: 34rem; }
.rsw-ph__grid > .rsw-ph__copy { margin-inline: auto; }
.rsw-ph--about .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--contact .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--usecases .rsw-ph__grid > .rsw-ph__copy { margin-inline: 0 auto; max-width: min(34rem, 46%); }
.rsw-ph--portfolio .rsw-display::after { content: ""; display: block; margin: 0.9rem auto 0; width: 5rem; height: 0.5rem; background: var(--rsw-yellow); }
.rsw-ph--usecases .rsw-display { color: var(--rsw-dark-ink); }
.rsw-ph--blog { background: repeating-linear-gradient(0deg, transparent 0 39px, rgba(149, 100, 245, 0.12) 39px 40px); }
.rsw-ph--brand, .elementor .e-con.rsw-ph--brand { background-image: linear-gradient(rgba(37, 72, 244, 0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(37, 72, 244, 0.1) 1px, transparent 1px); background-size: 32px 32px; }
.rsw-ph--contact .rsw-display, .elementor .rsw-ph--contact .rsw-display .elementor-heading-title { color: var(--rsw-ink); }
@media (max-width: 900px) {
	.rsw-ph--about .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--contact .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--usecases .rsw-ph__grid > .rsw-ph__copy { max-width: 100%; }
	.rsw-ph__art { opacity: 0.55; }
	.elementor .e-con.rsw-cols-4 { grid-template-columns: 1fr; }
}
@media (min-width: 901px) and (max-width: 1100px) { .elementor .e-con.rsw-cols-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* ---------- Dark type moment: oversized live type over a grainy, blurred, glowing graphic on black ---------- */
.elementor .e-con.rsw-typemoment { position: relative; overflow: hidden; isolation: isolate; padding: clamp(5rem, 12vw, 11rem) var(--rsw-gutter); }
.elementor .e-con.rsw-typemoment .rsw-typemoment__art { position: absolute; inset: 0; z-index: 0; padding: 0; margin: 0; width: 100%; }
.elementor .rsw-typemoment__art .rsw-slot { height: 100%; border-radius: 0; border: 0; aspect-ratio: auto; }
.elementor .rsw-typemoment__art .rsw-slot img { width: 100%; height: 100%; object-fit: cover; opacity: 0.6; }
.elementor .e-con.rsw-typemoment .rsw-wrap { position: relative; z-index: 2; }
.elementor .rsw-typemoment__text, .elementor .rsw-typemoment__text p { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.035em; line-height: 1.04; font-size: clamp(1.9rem, 4.6vw, 4.25rem); color: var(--rsw-dark-ink); max-width: 28ch; text-shadow: 0 2px 30px rgba(9, 10, 16, 0.85); }
.elementor .rsw-typemoment .rsw-pending { text-shadow: none; }

/* ---------- Portfolio filter (links with ?d=, so every state is addressable; JS only refines) ---------- */
.rsw-filter { max-width: var(--rsw-wrap); margin: 0 auto 1.5rem; padding: 0 var(--rsw-gutter); }
.rsw-filter ul { display: flex; flex-wrap: wrap; gap: 0.6rem; list-style: none; margin: 0; padding: 0; }
.rsw-filter a { display: inline-block; padding: 0.5rem 1.1rem; border: 2px solid var(--rsw-ink); border-radius: 999px; text-decoration: none; font-weight: 700; color: var(--rsw-ink); }
.rsw-filter a:hover { background: var(--rsw-ink); color: var(--rsw-white); }
.rsw-filter a[aria-current="true"] { background: var(--rsw-ink); color: var(--rsw-white); }
.rsw-filter a:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.rsw-filter__status { margin: 0.6rem 0 0; font-size: 0.875rem; color: var(--rsw-ink-secondary); }
.rsw-work-grid li[hidden] { display: none; }

/* ---------- Contact form ---------- */
.rsw-form { display: grid; gap: 1rem; max-width: 36rem; }
.rsw-form .rsw-field { display: grid; gap: 0.35rem; margin: 0; }
.rsw-form label { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; }
.rsw-form input, .rsw-form textarea { font: inherit; font-size: 1.0625rem; padding: 0.7rem 0.9rem; border: 2px solid var(--rsw-ink); border-radius: 10px; width: 100%; background: var(--rsw-white); color: var(--rsw-ink); }
.rsw-form input:focus-visible, .rsw-form textarea:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.rsw-form__submit { font: inherit; font-family: var(--rsw-display); font-weight: 700; padding: 0.85rem 1.8rem; color: var(--rsw-white); background: var(--rsw-ink); border: 2px solid var(--rsw-ink); border-radius: 999px; cursor: pointer; }
.rsw-form__submit:hover { background: var(--rsw-blue); border-color: var(--rsw-blue); }
.rsw-form__submit:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
.rsw-form__status { margin: 0; min-height: 1.5em; font-size: 0.9375rem; color: var(--rsw-ink-secondary); }
.rsw-form [aria-invalid="true"] { border-color: #B3261E; }
.rsw-journal { max-width: var(--rsw-wrap); margin-inline: auto; padding: 0 var(--rsw-gutter); }

/* ---------- Hero deck refinements (TASK-2.1 review) ---------- */
.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(1.9rem, 3.5vw, 3.5rem); line-height: 1.04; letter-spacing: -0.035em; }
.elementor .e-con.rsw-hero__stage { grid-template-columns: minmax(0, 6fr) minmax(0, 7fr); }
.rsw-motion-toggle { left: auto; right: 0.5rem; bottom: auto; top: 0.5rem; }
.elementor .rsw-deck .rsw-deck-ui { margin-top: 0; padding-top: 0.5rem; padding-bottom: 1rem; background: linear-gradient(to top, var(--rsw-dark-canvas) 55%, transparent); }
@media (min-width: 901px) and (max-height: 780px) {
	.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(1.7rem, 3vw, 2.75rem); }
}
.elementor .rsw-typemoment--light .rsw-typemoment__art .rsw-slot img { opacity: 0.55; }
.elementor .e-con.rsw-typemoment.rsw-dark--band { padding-block: clamp(4rem, 9vw, 8rem); }

/* Art layers fill their host: Elementor wraps each HTML widget in two divs that must stretch. */
.elementor .rsw-ph__art, .elementor .rsw-typemoment__art { display: flex; }
.elementor .rsw-ph__art > .elementor-widget, .elementor .rsw-typemoment__art > .elementor-widget,
.elementor .rsw-ph__art .elementor-widget-container, .elementor .rsw-typemoment__art .elementor-widget-container,
.elementor .rsw-slide__art .elementor-widget-container { height: 100%; width: 100%; }
.elementor .rsw-slide__art.elementor-widget { position: absolute; inset: 0; width: 100%; height: 100%; }
.elementor .rsw-ph__art .rsw-slot, .elementor .rsw-typemoment__art .rsw-slot, .elementor .rsw-slide__art .rsw-slot { height: 100%; }
/* Portfolio index sits on the same column as the rest of the site. */
.rsw-work-grid { max-width: var(--rsw-wrap); margin-inline: auto; padding: 0 var(--rsw-gutter); }
.rsw-work-grid .wp-block-post-template { align-items: start; }
.elementor .e-con.rsw-col-8 { grid-column: span 8; }
.elementor .e-con.rsw-col-3 { grid-column: span 3; }
/* The page header owns its own spacing (its art fills the frame), including on dark pages. */
.elementor .e-con.rsw-dark.rsw-ph, .elementor .e-con.rsw-section.rsw-ph { padding: 0; }
/* Deck slides stack their content in a column and fill the width. */
.elementor .rsw-deck .rsw-slide.is-active { flex-direction: column; align-items: stretch; }
.elementor .rsw-deck .rsw-slide > .e-con.rsw-hero { width: 100%; }
@media (max-width: 900px) {
	.elementor .rsw-deck .rsw-deck-ui { position: static; background: none; margin: 0; padding-top: 1.25rem; }
	.rsw-motion-toggle { top: 0.5rem; right: 0.5rem; }
	.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(1.75rem, 8vw, 2.4rem); }
}
@media (max-width: 900px) {
	.elementor .e-con.rsw-hero__stage { grid-template-columns: minmax(0, 1fr); }
}
/* Links inside running text must not rely on colour alone (WCAG 1.4.1). */
.elementor .rsw-body a, .elementor .rsw-lead a, .elementor .rsw-small a { text-decoration: underline; text-decoration-thickness: 1px; }

/* ============================================================================================
   Brand Guidelines, Dropbox pattern (TASK-2.2): one Menu button, a full-screen grid of chapter tiles,
   no persistent sidebar, a shared chapter template, an overscroll ring into the next chapter.
   ============================================================================================ */
.rsw-brandbar { position: sticky; top: 3.4rem; z-index: 40; display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 0.6rem var(--rsw-gutter); background: rgba(250, 250, 248, 0.92); backdrop-filter: blur(8px); border-bottom: 1px solid var(--rsw-rule-solid); }
.rsw-brandbar__title { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.02em; font-size: 1.05rem; color: var(--rsw-ink); text-decoration: none; }
.rsw-brandbar__btn { font: inherit; font-weight: 700; padding: 0.5rem 1.3rem; color: var(--rsw-white); background: var(--rsw-ink); border: 2px solid var(--rsw-ink); border-radius: 999px; cursor: pointer; }
.rsw-brandbar__btn:hover { background: var(--rsw-blue); border-color: var(--rsw-blue); }
.rsw-brandbar__btn:focus-visible, .rsw-brandmenu__close:focus-visible, .rsw-bm__tile:focus-visible, .rsw-nextchapter__link:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
@media (max-width: 900px) {
	/* On phones the Menu button sits bottom-centre, the title stays at the top. */
	.rsw-brandbar { position: static; padding: 0.9rem var(--rsw-gutter); backdrop-filter: none; }
	.rsw-brandbar__btn { position: fixed; left: 50%; bottom: 1rem; transform: translateX(-50%); z-index: 41; box-shadow: 0 8px 28px rgba(9, 10, 16, 0.35); }
}
html.rsw-menu-open { overflow: hidden; }
.rsw-brandmenu { position: fixed; inset: 0; z-index: 100; display: block; overflow-y: auto; padding: clamp(4rem, 8vw, 6rem) var(--rsw-gutter) 6rem; background: var(--rsw-dark-canvas); color: var(--rsw-dark-ink); opacity: 0; transition: opacity 0.35s ease; }
.rsw-brandmenu[hidden] { display: none; }
.rsw-brandmenu.is-open { opacity: 1; }
.rsw-brandmenu__close { position: fixed; top: 1rem; right: 1rem; z-index: 101; font: inherit; font-weight: 700; padding: 0.55rem 1.2rem; color: var(--rsw-dark-ink); background: transparent; border: 2px solid var(--rsw-dark-ink); border-radius: 999px; cursor: pointer; }
.rsw-brandmenu__close:hover { background: var(--rsw-dark-ink); color: var(--rsw-dark-canvas); }
.rsw-brandmenu__grid, .rsw-brandgrid { list-style: none; margin: 0 auto; padding: 0; max-width: 78rem; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(0.75rem, 2vw, 1.5rem); }
.rsw-bm__tile { --tx: 0; --ty: 0; position: relative; display: flex; align-items: flex-end; aspect-ratio: 1 / 1; padding: 1rem; overflow: hidden; border-radius: 22px; text-decoration: none; color: var(--rsw-ink); background: var(--rsw-canvas); border: 2px solid transparent; transform: perspective(900px) rotateX(calc(var(--ty) * -7deg)) rotateY(calc(var(--tx) * 7deg)); transition: transform 0.25s ease, border-color 0.2s ease; }
.rsw-bm__tile[aria-current="page"], .rsw-bm__tile:hover { border-color: var(--rsw-yellow); }
.rsw-bm__tile img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.rsw-bm__art { position: absolute; inset: 0; background: radial-gradient(70% 80% at 80% 20%, rgba(255, 105, 87, 0.5), transparent 60%), radial-gradient(60% 70% at 15% 85%, rgba(0, 200, 240, 0.45), transparent 60%), radial-gradient(50% 60% at 55% 55%, rgba(149, 100, 245, 0.4), transparent 65%), var(--rsw-canvas); background-size: 140% 140%; }
.rsw-bm__name { position: relative; z-index: 2; padding: 0.3rem 0.7rem; font-family: var(--rsw-display); font-weight: 800; font-size: 1.05rem; letter-spacing: -0.01em; color: var(--rsw-ink); background: rgba(250, 250, 248, 0.92); border-radius: 999px; }
.rsw-bm__tag { position: absolute; z-index: 2; top: 0.6rem; left: 0.6rem; right: 0.6rem; font-size: 0.6875rem; font-weight: 700; line-height: 1.25; padding: 0.2rem 0.45rem; color: var(--rsw-white); background: var(--rsw-ink); border-radius: 6px; }
@media (prefers-reduced-motion: no-preference) {
	html[data-rsw-motion="on"] .rsw-bm__art { animation: rsw-drift 9s ease-in-out infinite alternate; }
	html[data-rsw-motion="on"] .rsw-brandmenu.is-open .rsw-bm__item { animation: rsw-tile-in 0.55s cubic-bezier(.2, .7, .2, 1) both; animation-delay: calc(var(--n, 0) * 55ms); }
}
.rsw-bm__item:nth-child(1) { --n: 0; } .rsw-bm__item:nth-child(2) { --n: 1; } .rsw-bm__item:nth-child(3) { --n: 2; } .rsw-bm__item:nth-child(4) { --n: 3; }
.rsw-bm__item:nth-child(5) { --n: 4; } .rsw-bm__item:nth-child(6) { --n: 5; } .rsw-bm__item:nth-child(7) { --n: 6; } .rsw-bm__item:nth-child(8) { --n: 7; }
@keyframes rsw-drift { from { background-position: 0% 0%; } to { background-position: 100% 100%; } }
@keyframes rsw-tile-in { from { opacity: 0; transform: translateY(26px) scale(0.96); } to { opacity: 1; transform: none; } }
@media (max-width: 900px) { .rsw-brandmenu__grid, .rsw-brandgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.rsw-brandgrid .rsw-bm__tile { border-color: var(--rsw-rule-solid); }

/* Chapter template */
.elementor .e-con.rsw-bchapter__intro { padding-top: clamp(3rem, 7vw, 6rem); }
.elementor .e-con.rsw-bchapter__slot { max-width: 34rem; }
.elementor .e-con.rsw-bchapter__next { padding-block: clamp(3rem, 8vw, 7rem); }
.rsw-nextchapter { display: flex; align-items: center; gap: 1.25rem; }
.rsw-nextchapter__link { display: inline-flex; flex-direction: column; gap: 0.2rem; text-decoration: none; color: var(--rsw-ink); font-family: var(--rsw-display); font-weight: 800; font-size: clamp(1.5rem, 4vw, 3rem); letter-spacing: -0.03em; line-height: 1; border-bottom: 4px solid var(--rsw-ink); padding-bottom: 0.4rem; }
.rsw-nextchapter__link:hover { color: var(--rsw-blue); border-bottom-color: var(--rsw-blue); }
.rsw-nextchapter__name { font-size: 0.4em; font-weight: 700; letter-spacing: 0; }
.rsw-nextchapter__ring { width: 4.5rem; height: 4.5rem; transform: rotate(-90deg); flex: none; }
.rsw-ring__track { fill: none; stroke: var(--rsw-rule-solid); stroke-width: 3; }
.rsw-ring__fill { fill: none; stroke: var(--rsw-blue); stroke-width: 3; stroke-linecap: round; stroke-dasharray: 119.4; stroke-dashoffset: 119.4; }
html:not([data-rsw-motion="on"]) .rsw-nextchapter__ring { display: none; }
.rsw-nextchapter.is-charging .rsw-ring__fill { stroke: var(--rsw-coral); }

/* Specimens */
.rsw-swatch__hex { min-height: 1.25em; }
.rsw-swatch[data-copied="true"] .rsw-swatch__hex::after { content: "  Copied!"; font-weight: 800; color: var(--rsw-blue); }
.rsw-live-region { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.rsw-motion-demo__controls { display: flex; flex-wrap: wrap; align-items: end; gap: 1.25rem; margin: 1rem 0 0.25rem; }
.rsw-motion-play:disabled { opacity: 0.55; cursor: default; }
.rsw-empty { padding: 2rem; border: 2px dashed var(--rsw-ink-secondary); border-radius: 18px; }

/* ============================================================================================
   TASK-2.4 B2: subordinate motion on Rob's stills (and on their placeholders until they land).
   All of it is under the shared Motion preference; the footer control pauses every loop on the site.
   ============================================================================================ */
.rsw-slot picture, .rsw-slot picture img { display: block; width: 100%; height: 100%; object-fit: cover; }
@media (prefers-reduced-motion: no-preference) {
	/* Page headers: one slow light sweep across the art when the page opens (2.4 s, once). */
	html[data-rsw-motion="on"] .rsw-ph__art .rsw-slot::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(105deg, transparent 35%, rgba(255, 255, 255, 0.35) 50%, transparent 65%); transform: translateX(-100%); animation: rsw-sweep 2.4s 0.4s cubic-bezier(.2, .7, .2, 1) 1 both; }
	/* Portfolio tiles: the art leans in on hover and focus. */
	html[data-rsw-motion="on"] .rsw-frame .rsw-slot--tile, html[data-rsw-motion="on"] .rsw-frame .rsw-slot--tile img { transition: transform 0.5s cubic-bezier(.2, .7, .2, 1); }
	html[data-rsw-motion="on"] .rsw-frame a:hover .rsw-slot--tile, html[data-rsw-motion="on"] .rsw-frame a:focus-visible .rsw-slot--tile { transform: scale(1.04); }
	/* Dark contact band (B-04): a slow drifting light, decorative, paused by Motion off. */
	html[data-rsw-motion="on"] .rsw-dark--band .rsw-typemoment__art::after { content: ""; position: absolute; inset: -20%; pointer-events: none; background: radial-gradient(40% 50% at 30% 60%, rgba(149, 100, 245, 0.28), transparent 70%), radial-gradient(35% 45% at 75% 40%, rgba(0, 200, 240, 0.2), transparent 70%); animation: rsw-band-drift 22s ease-in-out infinite alternate; }
}
.elementor .rsw-typemoment__art { position: relative; overflow: hidden; }
@keyframes rsw-sweep { to { transform: translateX(100%); } }
@keyframes rsw-band-drift { from { transform: translate3d(-6%, 3%, 0); } to { transform: translate3d(6%, -3%, 0); } }

/* ---------- Designed 404 (TASK-2.6): a dark type moment with routes home ---------- */
.rsw-404 { position: relative; overflow: hidden; background: radial-gradient(60% 70% at 78% 30%, rgba(255, 105, 87, 0.35), transparent 60%), radial-gradient(50% 60% at 20% 80%, rgba(0, 200, 240, 0.25), transparent 60%), var(--rsw-dark-canvas); color: var(--rsw-dark-ink); min-height: 72svh; display: grid; align-items: center; padding: clamp(4rem, 10vw, 9rem) var(--rsw-gutter); }
.rsw-404__inner { position: relative; z-index: 1; max-width: var(--rsw-wrap); margin-inline: auto; width: 100%; }
.rsw-404__code { margin: 0; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(6rem, 22vw, 18rem); line-height: 0.85; letter-spacing: -0.06em; color: var(--rsw-yellow); }
.rsw-404 .rsw-display { color: var(--rsw-dark-ink); margin: 1rem 0; }
.rsw-404__msg { font-size: clamp(1.1rem, 1.6vw, 1.4rem); margin: 0 0 2rem; }
.rsw-404 .rsw-pending { background: var(--rsw-yellow); color: var(--rsw-dark-canvas); }
.rsw-404__routes { list-style: none; display: flex; flex-wrap: wrap; gap: 0.9rem; margin: 0; padding: 0; }
.rsw-404__routes a { display: inline-block; padding: 0.8rem 1.6rem; font-family: var(--rsw-display); font-weight: 700; color: var(--rsw-dark-ink); border: 2px solid var(--rsw-dark-ink); border-radius: 999px; text-decoration: none; }
.rsw-404__routes a:hover { background: var(--rsw-dark-ink); color: var(--rsw-dark-canvas); }
.rsw-404__routes a:focus-visible { outline: 3px solid var(--rsw-yellow); outline-offset: 3px; }

/* ============================================================================================
   TASK-2.7 comp-fidelity pass. Target: ops/queue/design concepts/design concepts-light-v2-brand-comp.png and the
   two concept PNGs. Very large, very heavy, tight display type; art at comp scale bleeding off the right edge with no
   frame; hairline rules, spaced uppercase micro-labels, circular-arrow links; quiet placeholders.
   ============================================================================================ */
:root {
	--rsw-h1: clamp(3.5rem, 1.6rem + 7.4vw, 8rem);          /* 56 px at 390 to 128 px at 1440 and up */
	--rsw-h2: clamp(2.5rem, 1.65rem + 3.4vw, 4.5rem);        /* 40 to 72 px */
	--rsw-body-size: clamp(1.125rem, 1.07rem + 0.24vw, 1.25rem); /* 18 to 20 px */
	--rsw-label-size: 0.78rem;                               /* 12.5 px */
	--rsw-label-track: 0.18em;
	--rsw-hair: 1px solid var(--rsw-rule-solid);
	--rsw-art-w: 58vw;
}

/* ---------- Type to comp ---------- */
.rsw-display, .elementor .rsw-display .elementor-heading-title, .rsw-ph .rsw-display, .elementor .rsw-ph .rsw-display .elementor-heading-title {
	font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.04em; line-height: 0.95; font-size: var(--rsw-h1);
}
.elementor .rsw-h2 .elementor-heading-title, .rsw-handoff__title { font-weight: 800; letter-spacing: -0.035em; line-height: 0.98; font-size: var(--rsw-h2); }
.elementor .rsw-body, .elementor .rsw-body p, .elementor .rsw-body li { font-size: var(--rsw-body-size); line-height: 1.6; }
.elementor .rsw-lead, .elementor .rsw-lead p { font-size: clamp(1.25rem, 1.05rem + 0.9vw, 1.75rem); line-height: 1.38; max-width: 36rem; }
.rsw-eyebrow, .rsw-eyebrow a, .rsw-brandside__head { font-size: var(--rsw-label-size) !important; font-weight: 600; letter-spacing: var(--rsw-label-track); text-transform: uppercase; }
.rsw-wordmark, .rsw-wordmark a, .rsw-brandbar__wordmark { font-family: var(--rsw-display); font-weight: 700; letter-spacing: 0.32em; text-transform: uppercase; font-size: 0.875rem !important; color: var(--rsw-ink); text-decoration: none; }
.rsw-header { border-bottom: var(--rsw-hair); }

/* ---------- Home hero: giant headline left, art at comp scale bleeding right, no frame ---------- */
.elementor .e-con.rsw-hero__stage { position: relative; grid-template-columns: minmax(0, 1fr); min-height: min(92svh, 60rem); align-items: center; }
.elementor .e-con.rsw-hero__copy { max-width: min(44rem, 46vw); gap: 1.4rem; }
.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: var(--rsw-h1); line-height: 0.95; }
.elementor .rsw-hero__lead, .elementor .rsw-hero__lead p { font-family: var(--rsw-display); font-weight: 700; letter-spacing: -0.02em; font-size: clamp(1.4rem, 1.1rem + 1.2vw, 2.25rem); line-height: 1.15; color: var(--rsw-dark-ink); max-width: 30rem; }
.elementor .rsw-hero__body, .elementor .rsw-hero__body p { max-width: 32rem; opacity: 0.88; }
.elementor .e-con.rsw-hero__media { position: absolute; top: 0; bottom: 0; right: calc(var(--rsw-gutter) * -1); width: var(--rsw-art-w); margin: 0; padding: 0; z-index: 0; }
.elementor .rsw-hero__poster-block, .elementor .rsw-hero__video-block { height: 100%; }
.elementor .rsw-hero__poster-block img, .elementor .rsw-hero__video-block video, .elementor .rsw-hero__video-block .elementor-wrapper { width: 100%; height: 100%; aspect-ratio: auto; object-fit: cover; object-position: 30% 50%; }
.elementor .rsw-dark--hero .rsw-hero__poster-block img, .elementor .rsw-dark--hero .rsw-hero__video-block video {
	-webkit-mask-image: linear-gradient(to right, transparent 0, #000 22%); mask-image: linear-gradient(to right, transparent 0, #000 22%);
}
.elementor .e-con.rsw-hero__copy { position: relative; z-index: 2; }
@media (min-width: 901px) { .elementor .e-con.rsw-hero__stage.sc-stage { padding-top: 0; padding-bottom: 0; } }
@media (max-width: 900px) {
	.elementor .e-con.rsw-hero__stage { min-height: 0; display: flex; flex-direction: column; }
	.elementor .e-con.rsw-hero__media { position: relative; right: auto; width: calc(100% + var(--rsw-gutter) * 2); margin: 0 calc(var(--rsw-gutter) * -1); height: 72vw; order: -1; }
	.elementor .rsw-dark--hero .rsw-hero__poster-block img, .elementor .rsw-dark--hero .rsw-hero__video-block video { -webkit-mask-image: linear-gradient(to bottom, #000 70%, transparent 100%); mask-image: linear-gradient(to bottom, #000 70%, transparent 100%); }
	.elementor .e-con.rsw-hero__copy { max-width: 100%; }
}

/* ---------- Page headers: copy left, art at comp scale bleeding off the right edge, no frame ---------- */
.rsw-ph__grid, .elementor .e-con.rsw-ph__grid { min-height: clamp(26rem, 52vw, 44rem); padding: clamp(3rem, 7vw, 6rem) var(--rsw-gutter); }
.rsw-ph__grid > .rsw-ph__copy, .rsw-ph__copy, .elementor .e-con.rsw-ph__copy,
.rsw-ph--about .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--contact .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--usecases .rsw-ph__grid > .rsw-ph__copy {
	margin-inline: 0 auto; max-width: min(40rem, 40vw); align-items: flex-start; text-align: left;
}
.rsw-ph__art, .elementor .e-con.rsw-ph__art { left: auto; right: 0; width: var(--rsw-art-w); }
.rsw-ph__art .rsw-slot, .elementor .rsw-ph__art .rsw-slot { border: 0; background: transparent; }
.rsw-ph__art .rsw-slot img { object-position: 20% 50%; }
.rsw-ph--portfolio .rsw-display::after { margin: 0.9rem 0 0; }
.rsw-ph, .elementor .e-con.rsw-ph { border-bottom: var(--rsw-hair); }
.rsw-ph--blog, .rsw-ph--brand, .elementor .e-con.rsw-ph--brand { background-image: none; }
@media (max-width: 900px) {
	.rsw-ph__grid, .elementor .e-con.rsw-ph__grid { display: flex; flex-direction: column; min-height: 0; padding-top: 0; }
	.rsw-ph__art, .elementor .e-con.rsw-ph__art { position: relative; inset: auto; width: calc(100% + var(--rsw-gutter) * 2); margin: 0 calc(var(--rsw-gutter) * -1) 1.5rem; height: 70vw; opacity: 1; order: -1; }
	.rsw-ph__grid > .rsw-ph__copy, .rsw-ph__copy, .elementor .e-con.rsw-ph__copy { max-width: 100%; }
}

/* ---------- Quiet placeholders: no black chips by default (they return with ?review=1) ---------- */
.rsw-slot__tag, .rsw-bm__tag { display: none; }
html[data-rsw-review="on"] .rsw-slot__tag, html[data-rsw-review="on"] .rsw-bm__tag { display: inline-block; }
.rsw-slot--empty, .rsw-dark .rsw-slot--empty { border: 0; background: var(--rsw-tint); }
.rsw-dark .rsw-slot--empty { background: rgba(245, 243, 237, 0.05); }
.rsw-bm__art { background: var(--rsw-tint); animation: none !important; }
.elementor .rsw-pending, .rsw-pending, .elementor .rsw-dark .rsw-pending, .rsw-dark .rsw-pending, .rsw-404 .rsw-pending {
	background: none; padding: 0; border-radius: 0; font-weight: 400; font-style: italic; color: inherit; opacity: 0.6;
	text-decoration: underline dotted; text-decoration-thickness: 1px; text-underline-offset: 0.3em;
}

/* ---------- Editorial finish: circular-arrow links, the Art / Brand / Graphics trio ---------- */
.rsw-arrowlink { display: inline-flex; align-items: center; gap: 0.9rem; margin-top: 1.5rem; color: var(--rsw-ink); text-decoration: none; font-weight: 500; }
.rsw-arrowlink__c { display: inline-grid; place-items: center; width: 2.5rem; height: 2.5rem; border: 1.5px solid currentColor; border-radius: 50%; font-size: 1rem; transition: transform 0.25s ease, background 0.25s ease, color 0.25s ease; }
.rsw-arrowlink:hover .rsw-arrowlink__c { background: var(--rsw-ink); color: var(--rsw-white); }
html[data-rsw-motion="on"] .rsw-arrowlink:hover .rsw-arrowlink__c { transform: translateX(3px); }
.rsw-arrowlink:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 4px; border-radius: 999px; }
.rsw-trio { display: flex; gap: 1.1rem; align-items: baseline; margin: 1.5rem 0 0; font-size: 1.0625rem; }
.rsw-trio a { color: var(--rsw-ink); text-decoration: none; }
.rsw-trio a:hover { text-decoration: underline; text-underline-offset: 5px; }
.rsw-trio span { color: var(--rsw-ink-secondary); }

/* ---------- /brand/ = the comp: its own header row, a quiet chapter list at >= 1200 px, the Dropbox menu kept ---------- */
body:has(.rsw-brandbar) .rsw-header { display: none; }
.rsw-brandbar { position: sticky; top: 0; z-index: 45; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 1rem; padding: 1.4rem var(--rsw-gutter); background: rgba(250, 250, 248, 0.94); border-bottom: var(--rsw-hair); }
.rsw-brandbar__title { justify-self: center; font-family: var(--wp--preset--font-family--dm-sans, system-ui); font-weight: 500; letter-spacing: 0; font-size: 1rem; }
.rsw-brandbar__end { justify-self: end; display: inline-flex; align-items: center; gap: 1.25rem; }
.rsw-brandbar__back { color: var(--rsw-ink); text-decoration: none; font-size: 1rem; }
.rsw-brandbar__back:hover { text-decoration: underline; text-underline-offset: 5px; }
.rsw-brandbar__btn { padding: 0.45rem 1.1rem; font-size: 0.875rem; }
.rsw-brandside { display: none; }
@media (min-width: 1200px) {
	.rsw-brandside { display: block; position: fixed; z-index: 30; left: 0; top: 4.6rem; bottom: 0; width: 13rem; padding: 2.5rem 0 0 2.5rem; border-right: var(--rsw-hair); background: var(--rsw-canvas); }
	.rsw-brandside__head { margin: 0 0 1.5rem; color: var(--rsw-ink); letter-spacing: 0 !important; text-transform: none; font-size: 1rem !important; font-weight: 500; }
	.rsw-brandside ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 1.05rem; }
	.rsw-brandside a { position: relative; display: block; padding-left: 1.75rem; color: var(--rsw-ink); text-decoration: none; font-size: 1rem; }
	.rsw-brandside a:hover { color: var(--rsw-blue); }
	.rsw-brandside a[aria-current="page"] { color: var(--rsw-blue); font-weight: 700; }
	.rsw-brandside a[aria-current="page"]::before { content: ""; position: absolute; left: 0.25rem; top: 50%; width: 0.6rem; height: 0.6rem; margin-top: -0.3rem; border-radius: 50%; background: var(--rsw-blue); }
	body:has(.rsw-brandside) .elementor, body:has(.rsw-brandside) .rsw-footer { margin-left: 13rem; }
	body:has(.rsw-brandside) { --rsw-art-w: 50vw; }
}
@media (max-width: 900px) {
	.rsw-brandbar { grid-template-columns: 1fr auto; }
	.rsw-brandbar__title { display: none; }
	.rsw-brandbar__wordmark { font-size: 0.75rem !important; letter-spacing: 0.24em; }
	.rsw-brandbar__back { font-size: 0.875rem; }
}
.rsw-ph--brandcomp .rsw-ph__copy .rsw-display { font-size: clamp(3.25rem, 1.6rem + 5.6vw, 7rem); }
.elementor .e-con.rsw-specimens-section { padding-top: 0; }
.rsw-specimens { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: var(--rsw-hair); }
.rsw-specimen { padding: 2.25rem clamp(1rem, 2.5vw, 2.5rem) 1rem; display: flex; flex-direction: column; }
.rsw-specimen + .rsw-specimen { border-left: var(--rsw-hair); }
.rsw-specimen:first-child { padding-left: 0; }
.rsw-specimen__aa { margin: 1.25rem 0 0.25rem; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(5rem, 9vw, 9.5rem); line-height: 0.9; letter-spacing: -0.05em; color: var(--rsw-ink); }
.rsw-specimen__name { margin: 0.5rem 0 0; font-size: 1.25rem; }
.rsw-swatches--card { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.9rem; margin-top: 1.25rem; }
.rsw-swatch--card .rsw-swatch__chip { height: clamp(6rem, 9vw, 8.5rem); border-radius: 10px; border: 0; }
.rsw-swatch--card .rsw-swatch__hex { text-align: center; margin-top: 0.75rem; font-size: 0.9rem; letter-spacing: 0.04em; }
.rsw-specimen__clip { position: relative; margin-top: 1.25rem; aspect-ratio: 16 / 7; overflow: hidden; border-radius: 14px; background: var(--rsw-dark-canvas); }
.rsw-specimen__clip video { width: 100%; height: 100%; object-fit: cover; display: block; }
.rsw-specimen__play { position: absolute; left: 50%; top: 50%; width: 4rem; height: 4rem; margin: -2rem 0 0 -2rem; border: 0; border-radius: 50%; background: var(--rsw-white); color: var(--rsw-ink); font-size: 1.15rem; cursor: pointer; box-shadow: 0 10px 30px rgba(9, 10, 16, 0.35); }
.rsw-specimen__play[aria-pressed="true"] { opacity: 0; }
.rsw-specimen__clip:hover .rsw-specimen__play[aria-pressed="true"], .rsw-specimen__play:focus-visible { opacity: 1; }
.rsw-specimen__play:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
@media (max-width: 900px) {
	.rsw-specimens { grid-template-columns: 1fr; }
	.rsw-specimen + .rsw-specimen { border-left: 0; border-top: var(--rsw-hair); }
	.rsw-specimen { padding-left: 0; padding-right: 0; }
}

/* ---------- TASK-2.7 review fixes ---------- */
/* No block-gap strip between the header and the page. */
.wp-site-blocks > main, .wp-site-blocks > * + * { margin-block-start: 0; }
/* Home hero: the copy keeps clear of the bright part of the art; the art fades in behind it. */
.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(3.5rem, 1.6rem + 6vw, 7rem); }
.elementor .e-con.rsw-hero__copy { max-width: min(40rem, 42vw); }
.elementor .rsw-dark--hero .rsw-hero__poster-block img, .elementor .rsw-dark--hero .rsw-hero__video-block video {
	-webkit-mask-image: linear-gradient(to right, transparent 0, rgba(0, 0, 0, 0.35) 18%, #000 42%); mask-image: linear-gradient(to right, transparent 0, rgba(0, 0, 0, 0.35) 18%, #000 42%);
}
@media (min-width: 901px) {
	.elementor .rsw-deck .rsw-deck-ui { position: absolute; left: auto; right: 0; bottom: 1.5rem; width: auto; margin: 0; background: none; padding: 0 var(--rsw-gutter); }
	.rsw-deck__ui { justify-content: flex-end; }
	.elementor .rsw-deck { position: relative; }
}
/* Light page headers: the art's own pale ground melts into the canvas instead of a hard edge. */
.rsw-ph:not(.rsw-dark) .rsw-ph__art .rsw-slot img { -webkit-mask-image: linear-gradient(to right, transparent 0, #000 16%); mask-image: linear-gradient(to right, transparent 0, #000 16%); }
.rsw-dark.rsw-ph .rsw-ph__art .rsw-slot img { -webkit-mask-image: linear-gradient(to right, transparent 0, #000 30%); mask-image: linear-gradient(to right, transparent 0, #000 30%); }
@media (max-width: 900px) { .rsw-ph .rsw-ph__art .rsw-slot img { -webkit-mask-image: none; mask-image: none; } }
/* /brand/: the comp header is fixed full width; the side list sits under it; the brand H1 fits its column. */
.rsw-brandbar { position: fixed; top: 0; left: 0; right: 0; }
body:has(.rsw-brandbar) { padding-top: 4.75rem; }
body.admin-bar .rsw-brandbar { top: 32px; }
.elementor .elementor-widget.rsw-brandbar-widget { margin: 0; height: 0; }
@media (min-width: 1200px) { .rsw-brandside { top: 4.75rem; } body.admin-bar .rsw-brandside { top: calc(4.75rem + 32px); } }
.rsw-ph--brandcomp .rsw-ph__copy .rsw-display, .elementor .rsw-ph--brandcomp .rsw-display .elementor-heading-title { font-size: clamp(3rem, 0.8rem + 4.4vw, 5rem); }
@media (max-width: 900px) { body:has(.rsw-brandbar) { padding-top: 3.9rem; } }
@media (min-width: 901px) {
	.elementor .e-con.rsw-hero__media { right: calc(50% - 50vw); width: var(--rsw-art-w); }
}
.rsw-ph--brandcomp .rsw-ph__grid, .elementor .rsw-ph--brandcomp .e-con.rsw-ph__grid { min-height: clamp(24rem, 42vw, 34rem); padding-top: clamp(2rem, 4vw, 3.5rem); padding-bottom: clamp(2rem, 4vw, 3.5rem); }
/* Page-header H1s include long single words ("Infrastructure."): cap them so they hold their column. */
.rsw-ph .rsw-display, .elementor .rsw-ph .rsw-display .elementor-heading-title { font-size: clamp(3rem, 1rem + 4.6vw, 5.75rem); }
.rsw-ph__grid > .rsw-ph__copy, .rsw-ph__copy, .elementor .e-con.rsw-ph__copy,
.rsw-ph--about .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--contact .rsw-ph__grid > .rsw-ph__copy, .rsw-ph--usecases .rsw-ph__grid > .rsw-ph__copy { max-width: min(42rem, 44vw); }
@media (max-width: 900px) { .rsw-ph__grid > .rsw-ph__copy, .rsw-ph__copy, .elementor .e-con.rsw-ph__copy { max-width: 100%; } }
/* Header copy lines up with the site column (the wordmark and the content), not the viewport edge. */
.rsw-ph__grid, .elementor .e-con.rsw-ph__grid { padding-left: max(var(--rsw-gutter), calc((100vw - var(--rsw-wrap)) / 2)); }
body:has(.rsw-brandside) .rsw-ph__grid, body:has(.rsw-brandside) .elementor .e-con.rsw-ph__grid { padding-left: clamp(2rem, 3.4vw, 3.5rem); }
@media (max-width: 900px) {
	.elementor .e-con.rsw-hero__copy { max-width: 100%; }
	.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { font-size: clamp(3rem, 12vw, 4.5rem); }
	.elementor .e-con.rsw-hero, .elementor .e-con.rsw-hero__stage { padding-left: 0; padding-right: 0; }
	.elementor .e-con.rsw-hero__copy { padding: 0 var(--rsw-gutter); }
}
@media (min-width: 1200px) {
	body:has(.rsw-brandside) .rsw-ph__grid > .rsw-ph__copy, body:has(.rsw-brandside) .elementor .e-con.rsw-ph__copy { max-width: min(30rem, 31vw); }
	body:has(.rsw-brandside) .rsw-ph .rsw-lead, body:has(.rsw-brandside) .rsw-ph .rsw-lead p { font-size: 1.25rem; }
}
/* The hero stage spans the viewport (the pinned stage clips its overflow), so the art can bleed to the edge in
   motion and static modes alike; the copy keeps to the site column through padding. */
@media (min-width: 901px) {
	.elementor .e-con.rsw-hero { padding-left: 0; padding-right: 0; }
	.elementor .e-con.rsw-hero__stage { max-width: none; padding-left: max(var(--rsw-gutter), calc((100vw - var(--rsw-wrap)) / 2)); padding-right: var(--rsw-gutter); }
	.elementor .e-con.rsw-hero__media { right: 0; }
}
/* Quiet placeholders still meet AA: secondary ink on light, softened ink on dark (no opacity). */
.elementor .rsw-pending, .rsw-pending { opacity: 1; color: var(--rsw-ink-secondary); }
.elementor .rsw-dark .rsw-pending, .rsw-dark .rsw-pending, .rsw-404 .rsw-pending, .rsw-frame--graphics .rsw-pending { opacity: 1; color: rgba(245, 243, 237, 0.8); }
.rsw-frame--graphics .rsw-pending { color: var(--rsw-ink-secondary); }
/* Phones: long single words in titles ("Transformation") must never push the page sideways. */
.rsw-display, .elementor .rsw-display .elementor-heading-title { overflow-wrap: break-word; hyphens: auto; }
@media (max-width: 600px) {
	.elementor .rsw-section:not(.rsw-ph) .rsw-display .elementor-heading-title { font-size: clamp(2.25rem, 10.5vw, 3.5rem); }
}
/* CTO-MSG-12 polish. C6: the deck and its first slide carry no container padding, so the hero art meets the header
   rule and the right viewport edge. */
.elementor .e-con.rsw-deck, .elementor .e-con.rsw-slide--w, .elementor .rsw-slide--w > .e-con.rsw-hero { padding: 0 !important; --padding-top: 0px; --padding-right: 0px; --padding-bottom: 0px; --padding-left: 0px; }
/* C5: the "current block" rule beside an eyebrow takes no layout space (it sits in the margin), so eyebrows align. */
.rsw-eyebrow { position: relative; }
html[data-rsw-motion="on"] .rsw-eyebrow::before { position: absolute; left: -2.35rem; top: 50%; margin: -1px 0 0; }
/* C4: never break inside a word in the hero headline (the period stays with "executable."). */
.elementor .rsw-hero__copy .rsw-display .elementor-heading-title { overflow-wrap: normal; hyphens: manual; }
/* Phones and tablets: with the deck padding removed (C6) the hero art is simply full width, no negative margins. */
@media (max-width: 900px) {
	.elementor .e-con.rsw-hero__media { width: 100%; margin: 0; }
}

/* ---------- TASK-2.8 phone polish: every non-inline tap target at least 44 x 44 px on touch widths ---------- */
@media (max-width: 900px) {
	.rsw-footer a, .rsw-footer .rsw-footer-motion, .rsw-wordmark a, .rsw-brandbar__wordmark, .rsw-brandbar__back, .rsw-brandbar__btn,
	.rsw-filter a, .rsw-arrowlink, .rsw-trio a, .rsw-next .wp-block-post-navigation-link a, .rsw-motion-toggle,
	.elementor .rsw-small a, .elementor .rsw-lead a[href^="tel:"], .elementor .rsw-lead a[href^="mailto:"], .elementor .rsw-body a[href^="tel:"], .elementor .rsw-body a[href^="mailto:"] {
		display: inline-flex; align-items: center; min-height: 44px;
	}
	.rsw-trio a { min-width: 44px; justify-content: center; }
	.rsw-header .wp-block-navigation__responsive-container-open, .rsw-header .wp-block-navigation__responsive-container-close { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }
	.rsw-deck__prev, .rsw-deck__next { width: 44px; height: 44px; }
	.rsw-field input[type="range"], .rsw-motion-slider { height: 44px; }
	.rsw-field--inline label { display: inline-flex; align-items: center; min-height: 44px; gap: 0.5rem; }
}
/* Slide dots: a 44 px hit area at every width, with the 12 px dot drawn inside it. */
.rsw-deck__dot { position: relative; width: 44px; height: 44px; padding: 0; border: 0; background: transparent; }
.rsw-deck__dot::before { content: ""; position: absolute; left: 50%; top: 50%; width: 0.8rem; height: 0.8rem; margin: -0.4rem 0 0 -0.4rem; border: 1px solid var(--rsw-dark-ink); border-radius: 50%; background: rgba(9, 10, 16, 0.7); }
.rsw-deck__dot[aria-current="true"] { background: transparent; }
.rsw-deck__dot[aria-current="true"]::before { background: var(--rsw-yellow); border-color: var(--rsw-yellow); }
.rsw-deck__dots { gap: 0; }

/* ---- Image direction v4 (CTO-MSG-18): gallery-grade restraint, no squircle tiles or candy blobs outside P-02 ----------- */
/* Media frames and the /brand/ menu tiles: restrained corners instead of 18-22 px "tiles". The comp's swatches and specimens keep theirs. */
.rsw-slot, .rsw-frame a, .rsw-frame__empty, .rsw-portrait, .rsw-bm__tile, .rsw-empty { border-radius: 8px; }
.rsw-portrait::before { border-radius: 6px; }
/* Light placeholders: one soft caustic of light on the canvas, not three pastel blobs. Dark ones keep their glow (color as light). */
.rsw-slot--empty, .rsw-bm__art { background: radial-gradient(55% 70% at 78% 28%, rgba(0, 200, 240, 0.16), transparent 70%), linear-gradient(115deg, transparent 46%, rgba(255, 105, 87, 0.1) 50%, transparent 54%), var(--rsw-canvas); }
.rsw-dark .rsw-slot--empty { background: radial-gradient(55% 70% at 78% 28%, rgba(0, 200, 240, 0.26), transparent 70%), radial-gradient(45% 60% at 22% 80%, rgba(149, 100, 245, 0.24), transparent 70%), var(--rsw-dark-canvas); }

/* ---- Kinetic headlines (TASK-2.10 item 2) ------------------------------------------------------------------------------- */
/* Hidden only while motion is on and the script is present; a failsafe shows the heading at 1.5 s if the script never runs. */
html.js-rsw[data-rsw-motion="on"] main h1:not(.is-kin-armed):not(.is-kin-in) { opacity: 0; animation: rsw-kin-failsafe 0s 1.5s forwards; }
@keyframes rsw-kin-failsafe { to { opacity: 1; } }
.rsw-kw { display: inline-block; overflow: hidden; vertical-align: top; padding-bottom: 0.12em; margin-bottom: -0.12em; }
.rsw-kw__in { display: inline-block; }
html[data-rsw-motion="on"] h1.is-kin-armed .rsw-kw__in { transform: translateY(105%); font-weight: 600; }
html[data-rsw-motion="on"] h1.is-kin-armed.is-kin-in .rsw-kw__in {
	transform: none; font-weight: 800;
	transition: transform 720ms cubic-bezier(.2, .8, .2, 1), font-weight 900ms cubic-bezier(.3, .7, .2, 1);
	transition-delay: calc(var(--rsw-kw-line, 0) * 110ms + var(--rsw-kw-i, 0) * 35ms);
}

/* ---- Full-screen site menu (TASK-2.10 item 4) ------------------------------------------------------------------------------- */
.rsw-sitemenu-btn { min-height: 44px; padding: 0.45rem 1.2rem; font: inherit; font-weight: 700; color: var(--rsw-white); background: var(--rsw-ink); border: 2px solid var(--rsw-ink); border-radius: 999px; cursor: pointer; }
.rsw-sitemenu-btn:focus-visible, .rsw-sitemenu__close:focus-visible, .rsw-sitemenu__link:focus-visible { outline: 3px solid var(--rsw-yellow); outline-offset: 4px; }
/* Phones: the Menu button replaces the stock overlay toggle; wider screens keep the inline links as well. */
@media (max-width: 900px) {
	.js-rsw .rsw-header .wp-block-navigation__responsive-container-open { display: none; }
}
.rsw-sitemenu { position: fixed; inset: 0; z-index: 200; display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); align-items: center; gap: clamp(1.5rem, 4vw, 4rem); padding: clamp(4.5rem, 9vh, 7rem) var(--rsw-gutter) clamp(2rem, 6vh, 4rem); background: var(--rsw-dark-canvas); color: var(--rsw-dark-ink); overflow-y: auto; }
.rsw-sitemenu[hidden] { display: none; }
.rsw-sitemenu__close { position: absolute; top: 1rem; right: var(--rsw-gutter); min-height: 44px; padding: 0.45rem 1.2rem; font: inherit; font-weight: 700; color: var(--rsw-dark-ink); background: transparent; border: 2px solid var(--rsw-dark-ink); border-radius: 999px; cursor: pointer; }
.rsw-sitemenu__list { list-style: none; margin: 0; padding: 0; display: grid; gap: clamp(0.1rem, 1vh, 0.6rem); }
.rsw-sitemenu__link { display: inline-block; min-height: 44px; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2.4rem, 7vw, 6rem); line-height: 1; letter-spacing: -0.035em; color: var(--rsw-dark-ink); text-decoration: none; transition: color 0.2s ease, transform 0.35s cubic-bezier(.2, .8, .2, 1); }
.rsw-sitemenu__link:hover, .rsw-sitemenu__link:focus-visible { color: var(--rsw-yellow); }
.rsw-sitemenu__link[aria-current="page"] { text-decoration: underline; text-decoration-thickness: 0.06em; text-underline-offset: 0.12em; }
.rsw-sitemenu__preview { position: relative; aspect-ratio: 16 / 10; overflow: hidden; border-radius: 8px; background: rgba(255, 255, 255, 0.04); }
.rsw-sitemenu__preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 900px) { .rsw-sitemenu { grid-template-columns: 1fr; align-content: start; } .rsw-sitemenu__preview { display: none; } }
html.rsw-menu-open { overflow: hidden; }
/* Motion on: the panel wipes down, items rise in turn, the preview scales and reveals. Motion off: it simply appears. */
html[data-rsw-motion="on"] .rsw-sitemenu.is-open { animation: rsw-sm-in 520ms cubic-bezier(.7, 0, .2, 1) both; }
html[data-rsw-motion="on"] .rsw-sitemenu.is-open .rsw-sitemenu__list li { animation: rsw-sm-item 640ms cubic-bezier(.2, .8, .2, 1) both; animation-delay: calc(180ms + var(--rsw-sm-i, 0) * 60ms); }
html[data-rsw-motion="on"] .rsw-sitemenu__link:hover { transform: translateX(0.35rem); }
html[data-rsw-motion="on"] .rsw-sitemenu__preview.is-on img { animation: rsw-sm-reveal 700ms cubic-bezier(.2, .8, .2, 1) both; }
@keyframes rsw-sm-in { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes rsw-sm-item { from { opacity: 0; transform: translateY(40%); } }
@keyframes rsw-sm-reveal { from { clip-path: inset(12% 12% 12% 12%); transform: scale(1.12); opacity: 0.4; } to { clip-path: inset(0 0 0 0); transform: scale(1); opacity: 1; } }

/* ---- Color-field chapters (TASK-2.10 item 7) -------------------------------------------------------------------------------- */
/* Full-bleed token color, one of Rob's section headings set oversized. Measured contrast: ink on coral 6.2, on acid yellow 14.4,
   on violet 4.5; white on electric blue 6.3 (all AA at any size). Acid yellow only ever takes ink. */
.elementor .e-con.rsw-field { padding: clamp(4rem, 12vw, 10rem) var(--rsw-gutter) clamp(2.5rem, 6vw, 5rem); }
.elementor .e-con.rsw-field--coral { background: var(--rsw-coral); --rsw-field-ink: var(--rsw-ink); }
.elementor .e-con.rsw-field--yellow { background: var(--rsw-yellow); --rsw-field-ink: var(--rsw-ink); }
.elementor .e-con.rsw-field--violet { background: var(--rsw-violet); --rsw-field-ink: var(--rsw-ink); }
.elementor .e-con.rsw-field--blue { background: var(--rsw-blue); --rsw-field-ink: var(--rsw-white); }
.elementor .rsw-field .rsw-field__title .elementor-heading-title { margin: 0; max-width: 14ch; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2.75rem, 9vw, 8.5rem); line-height: 0.92; letter-spacing: -0.045em; color: var(--rsw-field-ink); overflow-wrap: anywhere; hyphens: manual; }
/* Motion on: the heading rises out of the field as the band enters (uses the existing reveal observer). */
html[data-rsw-motion="on"] .rsw-field.rsw-reveal.is-armed .rsw-field__title { transform: translateY(18%); opacity: 0; }
html[data-rsw-motion="on"] .rsw-field.rsw-reveal.is-in .rsw-field__title { transform: none; opacity: 1; transition: transform 900ms cubic-bezier(.2, .8, .2, 1), opacity 600ms ease; }

/* ---- Project header: title beside the lead image (TASK-2.10 item 1, morph target in the first view) --------------------------- */
.elementor .e-con.rsw-casehead__grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(1.5rem, 4vw, 4rem); align-items: center; }
.elementor .rsw-casehead .rsw-display .elementor-heading-title { font-size: clamp(2rem, 3.6vw, 3.6rem); line-height: 1.02; }
.elementor .rsw-casehead__art img { width: 100%; height: auto; max-height: 72vh; object-fit: cover; border-radius: 8px; }
@media (max-width: 900px) { .elementor .e-con.rsw-casehead__grid { grid-template-columns: 1fr; } }

/* ---- Featured work on Portfolio (Portfolio and Use Cases as one section, Rob 2026-10-08): the Home block format --------------- */
.rsw-featured { padding: clamp(2.5rem, 6vw, 5rem) var(--rsw-gutter); scroll-margin-top: 5rem; }
.rsw-featured__grid { max-width: 76rem; margin: 0 auto; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: clamp(1.25rem, 3vw, 2.5rem); align-items: start; }
.rsw-featured__art { grid-column: span 7; display: block; overflow: hidden; }
.rsw-featured__art img { width: 100%; height: auto; display: block; aspect-ratio: 3 / 2; object-fit: cover; }
.rsw-featured__copy { grid-column: span 5; display: flex; flex-direction: column; align-items: flex-start; gap: 1rem; }
.rsw-featured__title { margin: 0; font-family: var(--rsw-display); font-weight: 700; letter-spacing: -0.02em; line-height: 1.1; font-size: clamp(1.4rem, 2.4vw, 2rem); color: var(--rsw-ink); }
.rsw-featured__text { margin: 0; }
.rsw-featured__btn { display: inline-flex; align-items: center; min-height: 44px; font-family: var(--rsw-display); font-weight: 700; font-size: 1rem; text-decoration: none; background: var(--rsw-ink); color: var(--rsw-white); border: 2px solid var(--rsw-ink); border-radius: 999px; padding: 0.85rem 1.6rem; transition: background 0.2s ease, color 0.2s ease; }
.rsw-featured__btn:hover { background: transparent; color: var(--rsw-ink); }
.rsw-featured__btn:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 4px; }
html[data-rsw-motion="on"] .rsw-featured__art img { transition: transform 0.6s cubic-bezier(.2, .8, .2, 1); }
html[data-rsw-motion="on"] .rsw-featured__art:hover img { transform: scale(1.03); }
@media (max-width: 900px) { .rsw-featured__grid { display: flex; flex-direction: column; } }

/* ---- About: Skills, What I Do (Rob, 2026-10-08): five cards in the Portfolio-card format ---------------------------------- */
.elementor .e-con.rsw-card--yellow { border-top-color: var(--rsw-yellow); }
.elementor .e-con.rsw-card--violet { border-top-color: var(--rsw-violet); }
.elementor .e-con.rsw-skills { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: clamp(1rem, 2vw, 1.5rem); margin-top: 0.5rem; }
.elementor .rsw-skill__name .elementor-heading-title { margin: 0; font-family: var(--rsw-display); font-weight: 700; font-size: clamp(1.05rem, 1.4vw, 1.3rem); line-height: 1.2; letter-spacing: -0.01em; color: var(--rsw-ink); }
@media (max-width: 1100px) { .elementor .e-con.rsw-skills { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 700px) { .elementor .e-con.rsw-skills { grid-template-columns: 1fr; } }

/* ---- Grid reveals and hover depth (TASK-2.10 item 5) ----------------------------------------------------------------------- */
html[data-rsw-motion="on"] .js-rsw .rsw-tile.rsw-reveal.is-armed { opacity: 0; transform: translateY(28px); transition: opacity 0.7s ease, transform 0.8s cubic-bezier(.2, .8, .2, 1); transition-delay: calc(var(--i, 0) * 90ms); }
html[data-rsw-motion="on"] .js-rsw .rsw-tile.rsw-reveal.is-armed.is-in { opacity: 1; transform: none; }
.rsw-tile .wp-block-post-featured-image { position: relative; overflow: hidden; border-radius: 8px; }
.rsw-tile .wp-block-post-featured-image::after { content: ""; position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity 0.3s ease;
	background: radial-gradient(360px circle at var(--mx, 50%) var(--my, 50%), rgba(255, 255, 255, 0.28), transparent 60%); }
html[data-rsw-motion="on"] .rsw-tile .wp-block-post-featured-image img { transition: transform 0.6s cubic-bezier(.2, .8, .2, 1); }
html[data-rsw-motion="on"] .rsw-tile.is-lit .wp-block-post-featured-image img { transform: scale(1.05) translate(var(--px, 0), var(--py, 0)); }
html[data-rsw-motion="on"] .rsw-tile.is-lit .wp-block-post-featured-image::after { opacity: 1; }

/* ---- Pointer light on dark sections (TASK-2.10 item 9): a soft caustic that follows the pointer, screen-blended so it never darkens text */
.rsw-glow { position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity 0.5s ease; mix-blend-mode: screen;
	background: radial-gradient(520px circle at var(--mx, 50%) var(--my, 50%), rgba(0, 200, 240, 0.16), rgba(149, 100, 245, 0.08) 40%, transparent 70%); }
html[data-rsw-motion="on"] .is-lit > .rsw-glow { opacity: 1; }

/* ---- Next project, full-bleed (TASK-2.10 item 6) ---------------------------------------------------------------------------- */
.rsw-nextwork { position: relative; margin-top: clamp(2rem, 6vw, 5rem); background: var(--rsw-dark-canvas); }
.rsw-nextwork__media { display: block; height: min(78vh, 46rem); overflow: hidden; }
.rsw-nextwork__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.rsw-nextwork__media--field { background: radial-gradient(80% 90% at 75% 30%, rgba(255, 105, 87, 0.55), transparent 60%), radial-gradient(70% 80% at 20% 80%, rgba(0, 200, 240, 0.35), transparent 60%), var(--rsw-dark-canvas); }
.rsw-nextwork__bar { position: absolute; left: 0; right: 0; bottom: 0; padding: clamp(1.5rem, 4vw, 3rem) var(--rsw-gutter); background: linear-gradient(to top, rgba(9, 10, 16, 0.88), transparent); }
.rsw-nextwork .rsw-nextchapter__link { color: var(--rsw-dark-ink); }
.rsw-nextwork .rsw-nextchapter__link:hover { color: var(--rsw-yellow); }
.rsw-nextwork .rsw-ring__track { stroke: rgba(255, 255, 255, 0.3); }
html[data-rsw-motion="on"] .rsw-nextwork__media img { transition: transform 0.9s cubic-bezier(.2, .8, .2, 1); }
html[data-rsw-motion="on"] .rsw-nextwork:hover .rsw-nextwork__media img { transform: scale(1.03); }

/* ---- Full-viewport statement moments (TASK-2.10 item 3) -------------------------------------------------------------------- */
/* Motion off or no script: the lines simply stack on the dark stage, all readable. Motion on: the section is tall, the stage
   pins, and one line is lit at a time as the visitor scrolls (pages.js sets .is-lit). */
.elementor .e-con.rsw-statements { padding: 0; }
.elementor .e-con.rsw-statements__stage { position: relative; min-height: 100svh; display: grid; align-items: center; overflow: hidden; padding: clamp(4rem, 10vh, 7rem) var(--rsw-gutter); }
.elementor .e-con.rsw-statements__art { position: absolute; inset: 0; z-index: 0; }
.elementor .rsw-statements__art .rsw-slot { position: absolute; inset: 0; aspect-ratio: auto; border-radius: 0; }
.elementor .rsw-statements__art img { width: 100%; height: 100%; object-fit: cover; opacity: 0.75; }
.rsw-statements__lines { position: relative; z-index: 1; display: grid; gap: 1.5rem; max-width: 76rem; margin: 0 auto; }
.rsw-statements__line { margin: 0; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2.4rem, 7.2vw, 7rem); line-height: 0.98; letter-spacing: -0.045em; color: var(--rsw-dark-ink); max-width: 16ch; text-wrap: balance; }
html[data-rsw-motion="on"].js-rsw .elementor .e-con.rsw-statements:has([data-rsw-statements="2"]) { height: 220vh; }
html[data-rsw-motion="on"].js-rsw .elementor .e-con.rsw-statements:has([data-rsw-statements="3"]) { height: 300vh; }
html[data-rsw-motion="on"].js-rsw .elementor .e-con.rsw-statements__stage { position: sticky; top: 0; height: 100svh; }
html[data-rsw-motion="on"].js-rsw .rsw-statements__lines { display: block; min-height: 3.2em; }
html[data-rsw-motion="on"].js-rsw .rsw-statements__line { position: absolute; left: 0; right: 0; top: 50%; opacity: 0; transform: translateY(calc(-50% + 0.4em)); transition: opacity 0.6s ease, transform 0.8s cubic-bezier(.2, .8, .2, 1); }
html[data-rsw-motion="on"].js-rsw .rsw-statements__line.is-lit { opacity: 1; transform: translateY(-50%); }
html[data-rsw-motion="on"].js-rsw .rsw-statements__line.is-past { opacity: 0; transform: translateY(calc(-50% - 0.4em)); }
/* The art's Elementor widget wrapper fills the stage, so the absolutely placed image has a box to fill. */
.elementor .rsw-statements__art > .elementor-element { position: absolute; inset: 0; }
.elementor .rsw-statements__art picture { display: block; width: 100%; height: 100%; }

/* ---- Living brand guide (TASK-2.10 item 8): the color chapter's light moving from swatch to swatch ---------------------------- */
html[data-rsw-motion="on"] .rsw-swatch .rsw-swatch__chip { transition: transform 0.5s cubic-bezier(.2, .8, .2, 1), box-shadow 0.5s ease; }
html[data-rsw-motion="on"] .rsw-swatch.is-spot .rsw-swatch__chip { transform: translateY(-8px) scale(1.04); box-shadow: 0 18px 40px -18px rgba(9, 10, 16, 0.55); }
html:not(.js-rsw) .rsw-sitemenu-btn { display: none; }
/* Phone menu (CTO-MSG-20): items fill the takeover like desktop, about 46-56 px at 390, centred vertically. */
@media (max-width: 900px) {
	.rsw-sitemenu { align-content: center; }
	.rsw-sitemenu__link { font-size: clamp(2.75rem, 12vw, 4.5rem); }
	.rsw-sitemenu__list { gap: clamp(0.4rem, 2vh, 1rem); }
}

/* ---- Real art behind type (Rob's mood board, 2026-10-09): bright images need a scrim so type keeps AA contrast ------------- */
/* Hero deck slides and dark type moments: dark on the side the type sits, opening towards the image. */
.elementor .rsw-slide__art .rsw-slot::after,
.elementor .rsw-dark .rsw-typemoment__art .rsw-slot::after,
.elementor .rsw-dark.rsw-typemoment .rsw-typemoment__art .rsw-slot::after,
.elementor .rsw-panel__art .rsw-slot::after,
.elementor .rsw-statements__art .rsw-slot::after { content: ""; position: absolute; inset: 0; pointer-events: none;
	background: linear-gradient(90deg, rgba(9, 10, 16, 0.86) 0%, rgba(9, 10, 16, 0.72) 45%, rgba(9, 10, 16, 0.38) 100%), linear-gradient(0deg, rgba(9, 10, 16, 0.55), transparent 45%); }
.elementor .rsw-slide__art .rsw-slot, .elementor .rsw-typemoment__art .rsw-slot { position: relative; }
.elementor .rsw-slide__art .rsw-slot { opacity: 1; }

/* ---- Living stills (TASK-2.4 B2): a rendered loop fades in over the still while playing; scrims (::after) stay on top ---- */
.rsw-slot[data-rsw-loop] { position: relative; overflow: hidden; }
.rsw-slot video.rsw-loop { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 0.9s ease; pointer-events: none; }
.rsw-slot.is-living video.rsw-loop { opacity: 1; }
html:not([data-rsw-motion="on"]) .rsw-slot video.rsw-loop { display: none; }

/* ---- Art bands (Rob, 2026-10-09): his images as full-bleed backgrounds for big blocks, never boxed ------------------------- */
.elementor .e-con.rsw-artband { position: relative; min-height: clamp(30rem, 72vh, 48rem); display: flex; align-items: center; }
.elementor .rsw-artband .rsw-typemoment__art { position: absolute; inset: 0; z-index: 0; }
.elementor .rsw-artband .rsw-typemoment__art > .elementor-element, .elementor .rsw-artband .rsw-typemoment__art .rsw-slot { position: absolute; inset: 0; height: 100%; aspect-ratio: auto; border-radius: 0; border: 0; }
.elementor .rsw-artband .rsw-typemoment__art img { width: 100%; height: 100%; object-fit: cover; -webkit-mask-image: none; mask-image: none; }
.elementor .rsw-artband > .e-con:not(.rsw-typemoment__art) { position: relative; z-index: 1; }
.elementor .rsw-artband .rsw-lead, .elementor .rsw-artband .rsw-body, .elementor .rsw-artband p { max-width: 40rem; }
.elementor .rsw-artband--campaigns .rsw-campaign { background: rgba(9, 10, 16, 0.55); backdrop-filter: blur(6px); padding: 1.25rem; border-radius: 8px; }
.elementor .rsw-artband--career .rsw-rule-top { background: rgba(9, 10, 16, 0.5); padding: 1rem 1.1rem; border-radius: 8px; }

/* ---- Authored Systems: one tall art panel per product, copy at the foot ----------------------------------------------- */
.elementor .e-con.rsw-panels { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(1rem, 2.5vw, 2rem); }
.elementor .e-con.rsw-panel { position: relative; min-height: clamp(30rem, 78vh, 44rem); overflow: hidden; border-radius: 8px; justify-content: flex-end; border-top: 4px solid var(--rsw-cyan); }
.elementor .e-con.rsw-panel--coral { border-top-color: var(--rsw-coral); }
.elementor .rsw-panel__art { position: absolute; inset: 0; z-index: 0; }
.elementor .rsw-panel__art > .elementor-element, .elementor .rsw-panel__art .rsw-slot { position: absolute; inset: 0; height: 100%; aspect-ratio: auto; border-radius: 0; border: 0; }
.elementor .rsw-panel__art img { width: 100%; height: 100%; object-fit: cover; }
.elementor .rsw-panel__art .rsw-slot::after { background: linear-gradient(0deg, rgba(9, 10, 16, 0.94) 0%, rgba(9, 10, 16, 0.8) 38%, rgba(9, 10, 16, 0.15) 75%, transparent 100%) !important; }
.elementor .e-con.rsw-panel__copy { position: relative; z-index: 1; padding: clamp(1.5rem, 3vw, 2.5rem); gap: 1rem; }
.elementor .rsw-panel__title .elementor-heading-title { margin: 0; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2rem, 3.6vw, 3.2rem); letter-spacing: -0.03em; line-height: 1; color: var(--rsw-dark-ink); }
html[data-rsw-motion="on"] .elementor .rsw-panel__art img { transition: transform 1.2s cubic-bezier(.2, .8, .2, 1); }
html[data-rsw-motion="on"] .elementor .rsw-panel:hover .rsw-panel__art img { transform: scale(1.04); }
@media (max-width: 900px) { .elementor .e-con.rsw-panels { grid-template-columns: 1fr; } }
/* Art bands: lighter than the hero scrim so the art shows (Rob: "art, texture and colour"); type keeps AA (measured). */
.elementor .rsw-artband .rsw-typemoment__art .rsw-slot::after { background: linear-gradient(90deg, rgba(9, 10, 16, 0.84) 0%, rgba(9, 10, 16, 0.62) 40%, rgba(9, 10, 16, 0.16) 78%, rgba(9, 10, 16, 0.05) 100%), linear-gradient(0deg, rgba(9, 10, 16, 0.35), transparent 40%) !important; }
.elementor .rsw-artband--campaigns .rsw-typemoment__art .rsw-slot::after { background: linear-gradient(0deg, rgba(9, 10, 16, 0.45), rgba(9, 10, 16, 0.2)) !important; }
.elementor .rsw-artband--campaigns .rsw-typemoment__art img { filter: brightness(1.25) saturate(1.1); }
.elementor .rsw-artband--method .elementor-widget-text-editor, .elementor .rsw-artband--method .elementor-widget-heading { max-width: 38rem; }
.elementor .rsw-artband--campaigns .rsw-campaign { background: rgba(9, 10, 16, 0.7); }

/* Hero pillars (Rob's "Brand | Customer | Culture | Communication | AI"): thin coral separators, words never split. */
.rsw-hero__pillars .rsw-nb { white-space: nowrap; }
.rsw-hero__pillars .rsw-sep { display: inline-block; margin: 0 0.35em; font-weight: 300; color: var(--rsw-coral); transform: scaleY(0.85); }
/* Phones: the wordmark and the Menu button share one row. */
@media (max-width: 900px) {
	.rsw-header .wp-block-group.alignwide { flex-wrap: nowrap; align-items: center; }
	.rsw-header .rsw-wordmark { min-width: 0; }
}

/* ---- Manifesto block (Rob, 2026-10-09): all white, his typographic manifesto shown whole, never cropped or scrimmed ---------- */
.elementor .e-con.rsw-manifesto { background: #FFFFFF; padding: clamp(3rem, 8vw, 7rem) var(--rsw-gutter); }
.elementor .rsw-manifesto .rsw-slot { aspect-ratio: auto; background: transparent; border: 0; border-radius: 0; max-width: 72rem; margin: 0 auto; }
.elementor .rsw-manifesto .rsw-slot img { width: 100%; height: auto; object-fit: contain; -webkit-mask-image: none; mask-image: none; }
.elementor .rsw-manifesto .rsw-slot::after { content: none; }
/* Statement moments: a fourth beat, and long lines (Rob's paragraph) at a readable statement size. */
html[data-rsw-motion="on"].js-rsw .elementor .e-con.rsw-statements:has([data-rsw-statements="4"]) { height: 400vh; }
.rsw-statements__line--long { font-size: clamp(1.6rem, 3.4vw, 3.2rem); line-height: 1.12; letter-spacing: -0.025em; max-width: 30ch; font-weight: 700; }
html[data-rsw-motion="on"].js-rsw .rsw-statements__lines:has(.rsw-statements__line--long) { min-height: 9em; }
/* Manifesto layers (Rob, 2026-10-09): the words, and the smiley floating over them, following the cursor. */
.rsw-manifesto__stage { position: relative; max-width: 72rem; margin: 0 auto; }
.rsw-manifesto__stage > picture img, .rsw-manifesto__smiley img { display: block; width: 100%; height: auto; }
.rsw-manifesto__smiley { position: absolute; inset: 0; mix-blend-mode: multiply; pointer-events: none; will-change: transform; }
/* Manifesto face (v2): eyes and mouth behind the words, each moving on its own. Origins from smiley.json (part centres). */
.rsw-manifesto__stage { aspect-ratio: 1672 / 941; }
.rsw-manifesto__stage > img, .rsw-smiley__face, .rsw-smiley__face > img { position: absolute; inset: 0; width: 100%; height: 100%; }
.rsw-manifesto__words { z-index: 2; }
.rsw-smiley__face { z-index: 1; pointer-events: none; }
.rsw-smiley__face > img { will-change: transform; }
.rsw-smiley__eye--l { transform-origin: 35% 28%; }
.rsw-smiley__eye--r { transform-origin: 63% 28%; }
.rsw-smiley__mouth { transform-origin: 50% 62%; }
/* A slow breath when nobody is near (motion on only). */
@keyframes rsw-smile-breathe { 50% { transform: scale(1.018, 1.03); } }
html[data-rsw-motion="on"] .rsw-manifesto__stage:not(.is-near) .rsw-smiley__mouth { animation: rsw-smile-breathe 5s ease-in-out infinite; }
html[data-rsw-motion="on"] .rsw-smiley__face.is-spraying { filter: url(#rsw-spray); }
/* Long-form case-study text: a comfortable reading measure. */
.elementor .e-con.rsw-longread .elementor-widget-text-editor.elementor-widget { max-width: 44rem; }
.elementor .rsw-longread .rsw-body { font-size: 1.125rem; line-height: 1.7; }

/* ---- Home hero slide 1: Rob's studio portrait, black type in the white space (Rob, 2026-10-09) ------------------------------ */
.elementor .e-con.rsw-slide--light { background: #FFFFFF; color: var(--rsw-ink); }
.elementor .rsw-slide--light .rsw-slide__art .rsw-slot::after { content: none; }
.elementor .rsw-slide--light .rsw-slide__art--portrait img { object-position: 82% 30%; }
.elementor .rsw-slide--light .rsw-hero__copy { max-width: 44rem; }
.elementor .rsw-dark .rsw-slide--light .elementor-heading-title,
.elementor .rsw-dark .rsw-slide--light .elementor-widget-text-editor,
.elementor .rsw-dark .rsw-slide--light .elementor-widget-text-editor p,
.elementor .rsw-dark .rsw-slide--light .rsw-eyebrow,
.elementor .rsw-dark .rsw-slide--light .rsw-eyebrow * { color: var(--rsw-ink); }
.elementor .rsw-dark .rsw-slide--light .rsw-hero__body p { color: #2B2E33; }
.elementor .rsw-dark .rsw-slide--light .rsw-btn .elementor-button { background: var(--rsw-ink); color: var(--rsw-white); border-color: var(--rsw-ink); }
.elementor .rsw-dark .rsw-slide--light .rsw-btn .elementor-button:hover { background: transparent; color: var(--rsw-ink); }
.elementor .rsw-dark .rsw-slide--light .rsw-hero__pillars .rsw-sep { color: var(--rsw-coral); }
/* The motion toggle and the deck controls stay legible on white while slide 1 shows. */
.elementor .rsw-dark--hero:has(.rsw-slide--light.is-active) .rsw-deck__prev,
.elementor .rsw-dark--hero:has(.rsw-slide--light.is-active) .rsw-deck__next { background: rgba(9, 10, 16, 0.85); }
@media (max-width: 900px) {
	/* Phones: the portrait on top, the copy below on white, so type never sits on the figure. */
	.elementor .e-con.rsw-slide--light { display: flex; flex-direction: column; }
	.elementor .rsw-slide--light .rsw-slide__art--portrait { position: relative; inset: auto; height: auto; aspect-ratio: 4 / 5; }
	.elementor .rsw-slide--light .rsw-slide__art--portrait .rsw-slot, .elementor .rsw-slide--light .rsw-slide__art--portrait .elementor-widget-container { position: absolute; inset: 0; }
	.elementor .rsw-slide--light .rsw-slide__art--portrait img { object-position: 78% 20%; }
}
/* Slide 1 desktop: tall enough to show the whole figure (the photo is 16:9), copy centred in the white space, head never cropped. */
@media (min-width: 901px) {
	.elementor .e-con.rsw-slide--light { min-height: min(56.25vw, calc(100svh - 68px)); display: flex; flex-direction: column; justify-content: center; }
	.elementor .rsw-slide--light .rsw-slide__art--portrait img { object-position: 82% 0%; }
}

/* ---- Home block 2: Founder and Principles, a pinned three-step scroll (Rob, 2026-10-09) ------------------------------------ */
.rsw-chapters .rsw-statements__line.rsw-chapter { font-size: 1rem; line-height: 1.4; letter-spacing: 0; font-weight: 400; max-width: none; }
.rsw-chapter__mark { margin: 0 0 clamp(1.25rem, 3vh, 2rem); display: flex; align-items: center; gap: 0.9rem; font-family: var(--rsw-display); font-size: 0.8125rem; font-weight: 700; letter-spacing: 0.22em; color: var(--rsw-dark-ink); }
.rsw-chapter__mark::before { content: ""; width: 2.5rem; height: 2px; background: var(--rsw-coral); }
.rsw-chapter__lead { margin: 0; max-width: 22ch; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2.2rem, 5vw, 4.6rem); line-height: 1.02; letter-spacing: -0.035em; color: var(--rsw-dark-ink); }
.rsw-chapter__sub { margin: 1.25rem 0 0; font-size: clamp(1.1rem, 1.6vw, 1.5rem); color: var(--rsw-dark-ink); }
.rsw-chapter__title { margin: 0 0 clamp(1.5rem, 4vh, 2.75rem); font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2.6rem, 6vw, 5.4rem); line-height: 0.95; letter-spacing: -0.04em; color: var(--rsw-dark-ink); }
.rsw-principles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(1rem, 2.5vw, 2rem); }
.rsw-principle { position: relative; margin: 0; padding: clamp(1.25rem, 2.4vw, 2rem); padding-top: clamp(2.6rem, 4vw, 3.4rem); background: rgba(9, 10, 16, 0.55); border: 1px solid rgba(245, 243, 238, 0.14); border-radius: 8px; backdrop-filter: blur(6px); }
.rsw-principle::before { content: "\201C"; position: absolute; top: 0.1em; left: 0.45em; font-family: Georgia, "Times New Roman", serif; font-size: clamp(3.6rem, 5vw, 5rem); line-height: 1; color: var(--rsw-coral); }
.rsw-principle p { margin: 0; font-family: var(--rsw-display); font-weight: 700; font-size: clamp(1.25rem, 1.9vw, 1.85rem); line-height: 1.22; letter-spacing: -0.02em; color: var(--rsw-dark-ink); }
html[data-rsw-motion="on"] .rsw-statements__line.is-lit .rsw-principle { animation: rsw-principle-in 700ms cubic-bezier(.2, .8, .2, 1) both; }
html[data-rsw-motion="on"] .rsw-statements__line.is-lit .rsw-principle:nth-child(2) { animation-delay: 120ms; }
html[data-rsw-motion="on"] .rsw-statements__line.is-lit .rsw-principle:nth-child(3) { animation-delay: 240ms; }
@keyframes rsw-principle-in { from { opacity: 0; transform: translateY(18px); } }
/* Motion off: the three steps stack, each with room to breathe. */
html:not([data-rsw-motion="on"]) .rsw-chapters .rsw-statements__lines { gap: clamp(3rem, 8vh, 6rem); }
@media (max-width: 900px) {
	.rsw-principles { grid-template-columns: 1fr; gap: 0.75rem; }
	.rsw-principle { padding: 1rem 1.1rem 1rem 3.2rem; }
	.rsw-principle::before { top: 0.05em; left: 0.25em; font-size: 3rem; }
	.rsw-principle p { font-size: 1.1rem; }
}
/* Principles: one per row at every width, so each keeps Rob's two-line rhythm (three across broke the lines). */
.rsw-principles { grid-template-columns: 1fr; max-width: 52rem; gap: clamp(0.75rem, 1.6vh, 1.1rem); }
.rsw-principle { padding: clamp(1rem, 2vh, 1.4rem) clamp(1.25rem, 2vw, 1.75rem) clamp(1rem, 2vh, 1.4rem) clamp(3.6rem, 5vw, 4.6rem); }
.rsw-principle::before { top: 0.08em; left: 0.3em; font-size: clamp(3rem, 4.4vw, 4.4rem); }
.rsw-principle p { font-size: clamp(1.15rem, 2vw, 1.85rem); }

/* Principles v3 (Rob, 2026-10-09): no boxes; the quotes float free across the slide, staggered, each with room to breathe. */
.rsw-principles { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); max-width: 76rem; row-gap: clamp(1.2rem, 4vh, 3rem); column-gap: 0; }
.rsw-principle { background: none; border: 0; border-radius: 0; backdrop-filter: none; padding: 0 0 0 clamp(3.2rem, 4.6vw, 4.8rem); align-self: start; }
.rsw-principle::before { top: -0.18em; left: 0; font-size: clamp(4.4rem, 7vw, 7.5rem); opacity: 0.95; }
.rsw-principle p { white-space: nowrap; font-size: clamp(1.4rem, 2.35vw, 2.4rem); line-height: 1.12; letter-spacing: -0.03em; text-shadow: 0 2px 24px rgba(9, 10, 16, 0.55); }
.rsw-principle:nth-child(1) { grid-column: 1 / span 8; }
.rsw-principle:nth-child(2) { grid-column: 6 / span 7; }
.rsw-principle:nth-child(2) p { font-size: clamp(1.6rem, 2.8vw, 2.9rem); font-weight: 800; }
.rsw-principle:nth-child(2)::before { color: var(--rsw-yellow); }
.rsw-principle:nth-child(3) { grid-column: 2 / span 8; }
.rsw-principle:nth-child(3) p { font-weight: 600; }
.rsw-principle:nth-child(3)::before { color: var(--rsw-cyan); }
/* Float: each drifts on its own slow cycle while its step is on screen (motion on only). */
@keyframes rsw-float { 0%, 100% { transform: translate3d(0, 0, 0); } 50% { transform: translate3d(0.4rem, -0.6rem, 0); } }
html[data-rsw-motion="on"] .rsw-statements__line.is-lit .rsw-principle { animation: rsw-principle-in 900ms cubic-bezier(.2, .8, .2, 1) both, rsw-float 9s ease-in-out 1s infinite; }
html[data-rsw-motion="on"] .rsw-statements__line.is-lit .rsw-principle:nth-child(2) { animation-delay: 180ms, 1.6s; animation-duration: 900ms, 11s; }
html[data-rsw-motion="on"] .rsw-statements__line.is-lit .rsw-principle:nth-child(3) { animation-delay: 360ms, 2.2s; animation-duration: 900ms, 10s; }
@media (max-width: 900px) {
	.rsw-principles { grid-template-columns: 1fr; row-gap: 1.6rem; }
	.rsw-principle, .rsw-principle:nth-child(n) { grid-column: 1; padding: 0 0 0 2.6rem; }
	.rsw-principle:nth-child(2) { margin-left: 1.5rem; }
	.rsw-principle::before { top: -0.12em; font-size: 3.4rem; }
	.rsw-principle p, .rsw-principle:nth-child(2) p { white-space: normal; font-size: 1.3rem; }
}
@media (min-width: 901px) { .rsw-principles { row-gap: clamp(2.2rem, 8vh, 5.5rem); } .rsw-principle:nth-child(2) { margin-top: -0.5rem; } }

/* ---- Video lightbox (Rob, 2026-10-09) ------------------------------------------------------------------------------------- */
.rsw-lightbox { width: min(92vw, 72rem); max-width: none; padding: 0; border: 0; border-radius: 10px; background: #000; overflow: visible; }
.rsw-lightbox::backdrop { background: rgba(9, 10, 16, 0.86); backdrop-filter: blur(4px); }
.rsw-lightbox__frame { aspect-ratio: 16 / 9; width: 100%; border-radius: 10px; overflow: hidden; }
.rsw-lightbox__frame iframe { display: block; width: 100%; height: 100%; border: 0; }
.rsw-lightbox__close { position: absolute; right: 0; bottom: calc(100% + 0.75rem); min-height: 44px; padding: 0.45rem 1.2rem; font: inherit; font-weight: 700; color: var(--rsw-dark-ink); background: transparent; border: 2px solid var(--rsw-dark-ink); border-radius: 999px; cursor: pointer; }
.rsw-lightbox__close:focus-visible { outline: 3px solid var(--rsw-yellow); outline-offset: 3px; }
html[data-rsw-motion="on"] .rsw-lightbox[open] { animation: rsw-lb-in 320ms cubic-bezier(.2, .8, .2, 1) both; }
@keyframes rsw-lb-in { from { opacity: 0; transform: scale(0.96); } }

/* Skills v2 (Rob, 2026-10-10): seven numbered skills, four then three on desktop. */
.elementor .e-con.rsw-skills { grid-template-columns: repeat(4, minmax(0, 1fr)); row-gap: clamp(1.5rem, 3vw, 2.5rem); }
.elementor .rsw-skill__num { margin: 0; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(1.6rem, 2.4vw, 2.2rem); letter-spacing: -0.03em; line-height: 1; color: #5E636B; }
@media (max-width: 1100px) { .elementor .e-con.rsw-skills { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .elementor .e-con.rsw-skills { grid-template-columns: 1fr; } }

/* ---- Authored Systems: video panels (Rob, 2026-10-10) ------------------------------------------------------------------ */
.elementor .e-con.rsw-vpanel { overflow: hidden; border-radius: 8px; border-top: 4px solid var(--rsw-cyan); background: #0E1018; }
.elementor .e-con.rsw-vpanel--coral { border-top-color: var(--rsw-coral); }
.rsw-vpanel__frame { position: relative; display: block; aspect-ratio: 16 / 9; overflow: hidden; background: #000; }
.rsw-vpanel__frame img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.8s cubic-bezier(.2, .8, .2, 1), filter 0.4s ease; }
.rsw-vpanel__play { position: absolute; left: 50%; top: 50%; width: clamp(3.6rem, 6vw, 5rem); aspect-ratio: 1; margin: 0; transform: translate(-50%, -50%); border-radius: 50%; background: rgba(245, 243, 238, 0.94); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.45); transition: transform 0.35s cubic-bezier(.2, .8, .2, 1); }
.rsw-vpanel__play::after { content: ""; position: absolute; left: 54%; top: 50%; transform: translate(-50%, -50%); border-style: solid; border-width: 0.7em 0 0.7em 1.15em; border-color: transparent transparent transparent var(--rsw-ink); font-size: clamp(0.9rem, 1.4vw, 1.2rem); }
.rsw-vpanel__frame:hover img, .rsw-vpanel__frame:focus-visible img { transform: scale(1.03); filter: brightness(0.85); }
.rsw-vpanel__frame:hover .rsw-vpanel__play, .rsw-vpanel__frame:focus-visible .rsw-vpanel__play { transform: translate(-50%, -50%) scale(1.08); }
.rsw-vpanel__frame:focus-visible { outline: 3px solid var(--rsw-yellow); outline-offset: -3px; }
.elementor .e-con.rsw-vpanel__copy { padding: clamp(1.5rem, 3vw, 2.5rem); gap: 1rem; }
.elementor .rsw-vpanel .rsw-panel__title .elementor-heading-title { margin: 0; font-family: var(--rsw-display); font-weight: 800; font-size: clamp(2rem, 3.2vw, 3rem); letter-spacing: -0.03em; line-height: 1; color: var(--rsw-dark-ink); }
/* Frame edge to edge; copy fills the panel so both button rows line up at the foot. */
.elementor .e-con.rsw-vpanel { padding: 0; gap: 0; display: flex; flex-direction: column; }
.elementor .rsw-vpanel > .elementor-element:first-child, .elementor .rsw-vpanel > .elementor-element:first-child .elementor-widget-container { width: 100%; margin: 0; padding: 0; }
.elementor .e-con.rsw-vpanel__copy { flex: 1 1 auto; }
.elementor .rsw-vpanel__copy > .e-con.rsw-btn-row { margin-top: auto; }

/* Footer: Download CV (Rob, 2026-10-11) */
.rsw-footer__cv { margin-top: 1rem; }
.rsw-footer .rsw-footer__cv a.rsw-btn-lite { display: inline-block; text-decoration: none; font-size: 0.9375rem; }
.rsw-footer .rsw-footer__cv a.rsw-btn-lite:hover { color: var(--rsw-white); }

/* ============================================================================================
   Brand Guidelines, finished to Rob's direction comp (2026-10-11)
   ============================================================================================ */
/* Landing: two-line H1, the glass W free on the canvas (multiplied, so its white never shows as a box), comp caption. */
.elementor .rsw-display--two .elementor-heading-title > span { display: block; white-space: nowrap; }
@media (min-width: 1200px) {
	body:has(.rsw-brandside) .rsw-ph--brandcomp .rsw-ph__grid > .rsw-ph__copy, body:has(.rsw-brandside) .elementor .rsw-ph--brandcomp .e-con.rsw-ph__copy { max-width: min(36rem, 40vw); }
	.rsw-brandbar__btn { display: none; }
}
.rsw-ph--brandcomp { --rsw-art-w: 52vw; }
.rsw-ph--brandcomp .rsw-ph__art--free .rsw-slot img { object-fit: contain; object-position: 100% 50%; mix-blend-mode: multiply; -webkit-mask-image: none; mask-image: none; }
.rsw-ph--brandcomp .rsw-ph__art--free .rsw-slot::after { display: none; }
.rsw-ph--brandcomp .rsw-ph__art--free, .elementor .rsw-ph--brandcomp .e-con.rsw-ph__art--free { background: transparent; }
@media (max-width: 900px) { .rsw-ph--brandcomp .rsw-ph__art--free, .elementor .rsw-ph--brandcomp .e-con.rsw-ph__art--free { height: 62vw; } }
@media (prefers-reduced-motion: no-preference) {
	html[data-rsw-motion="on"] .rsw-ph__art--free .rsw-slot img { animation: rsw-wfloat 7s ease-in-out infinite alternate; }
}
@keyframes rsw-wfloat { from { transform: translateY(0) rotate(0); } to { transform: translateY(-10px) rotate(-0.6deg); } }
@media (min-width: 1200px) {
	.rsw-brandside a.is-start { color: var(--rsw-blue); font-weight: 700; }
	.rsw-brandside a.is-start::before { content: ""; position: absolute; left: 0.25rem; top: 50%; width: 0.6rem; height: 0.6rem; margin-top: -0.3rem; border-radius: 50%; background: var(--rsw-blue); }
}
.rsw-brandcap { margin: 2.5rem 0 0; font-size: 0.75rem; letter-spacing: 0.24em; text-transform: uppercase; color: var(--rsw-ink-secondary); }

/* Chapter intro */
.elementor .rsw-bchapter__intro .rsw-eyebrow { margin-bottom: 0.5rem; }

/* Rules lists */
.rsw-brules { list-style: none; margin: 1.5rem 0 0; padding: 0; display: grid; gap: 0; max-width: 46rem; counter-reset: rb; }
.rsw-brules li { counter-increment: rb; display: grid; grid-template-columns: 3rem 1fr; padding: 1.1rem 0; border-top: var(--rsw-hair); font-size: 1.125rem; line-height: 1.45; }
.rsw-brules li:last-child { border-bottom: var(--rsw-hair); }
.rsw-brules li::before { content: counter(rb, decimal-leading-zero); font-family: var(--rsw-display); font-weight: 800; color: var(--rsw-blue); }

/* Foundation: the five pillars */
.rsw-pillars { list-style: none; margin: 2rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); border-top: 2px solid var(--rsw-ink); }
.rsw-pillars li { display: flex; flex-direction: column; gap: 2.5rem; padding: 1.25rem 1rem 0 0; }
.rsw-pillars li + li { padding-left: 1rem; border-left: var(--rsw-hair); }
.rsw-pillars__n { font-weight: 700; color: #5E636B; font-size: 0.875rem; }
.rsw-pillars__w { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.03em; font-size: clamp(1.15rem, 1.65vw, 1.85rem); line-height: 1; }
.rsw-pillars li:nth-child(1) .rsw-pillars__w { color: var(--rsw-ink); }
.rsw-pillars li:nth-child(2) .rsw-pillars__w { color: var(--rsw-blue); }
.rsw-pillars li:nth-child(3) .rsw-pillars__w { color: #D9473A; }
.rsw-pillars li:nth-child(4) .rsw-pillars__w { color: #00839E; }
.rsw-pillars li:nth-child(5) .rsw-pillars__w { color: #7444D8; }
@media (max-width: 900px) { .rsw-pillars { grid-template-columns: 1fr; } .rsw-pillars li, .rsw-pillars li + li { flex-direction: row; align-items: baseline; gap: 1rem; padding: 1rem 0; border-left: 0; border-bottom: var(--rsw-hair); } }

/* Floating, staggered quotes (Foundation principles, Voice) */
.rsw-bquotes { display: flex; flex-wrap: wrap; gap: clamp(1.5rem, 4vw, 3.5rem) clamp(2rem, 6vw, 5rem); margin-top: 2rem; }
.rsw-bquote { position: relative; margin: 0; flex: 0 1 26rem; padding-left: 2.4rem; }
.rsw-bquote::before { content: "\201C"; position: absolute; left: 0; top: -0.35em; font-family: var(--rsw-display); font-weight: 800; font-size: 3.5rem; line-height: 1; color: var(--rsw-blue); }
.rsw-bquote:nth-child(3n+2) { margin-top: clamp(2rem, 6vw, 5rem); }
.rsw-bquote:nth-child(3n+2)::before { color: var(--rsw-coral); }
.rsw-bquote:nth-child(3n) { margin-top: clamp(0.5rem, 2vw, 1.5rem); margin-left: auto; }
.rsw-bquote:nth-child(3n)::before { color: var(--rsw-cyan); }
.rsw-bquote p { margin: 0; font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.03em; line-height: 1.12; font-size: clamp(1.4rem, 2.6vw, 2.25rem); color: var(--rsw-ink); }
@media (max-width: 900px) { .rsw-bquote, .rsw-bquote:nth-child(n) { flex-basis: 100%; margin: 0; } }

/* Voice: write this, not that */
.rsw-pairs { display: grid; gap: 1.25rem; margin-top: 1.75rem; }
.rsw-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--rsw-rule-solid); border: 1px solid var(--rsw-rule-solid); border-radius: 14px; overflow: hidden; }
.rsw-pair p { margin: 0; padding: 1.25rem 1.4rem; background: var(--rsw-white); font-size: 1.0625rem; line-height: 1.5; }
.rsw-pair__dont { color: var(--rsw-ink-secondary); }
.rsw-pair__dont s { text-decoration-color: var(--rsw-coral); text-decoration-thickness: 2px; }
.rsw-pair__tag { display: block; margin-bottom: 0.4rem; font-size: 0.75rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--rsw-blue); }
.rsw-pair__dont .rsw-pair__tag { color: #B8321F; }
@media (max-width: 700px) { .rsw-pair { grid-template-columns: 1fr; } }

/* Typography: the scale */
.rsw-ts { margin-top: 1.5rem; border-top: var(--rsw-hair); }
.rsw-ts__row { display: grid; grid-template-columns: 12rem 1fr; gap: 1.5rem; align-items: baseline; padding: 1.25rem 0; border-bottom: var(--rsw-hair); }
.rsw-ts__meta { margin: 0; display: grid; gap: 0.15rem; font-size: 0.875rem; color: var(--rsw-ink-secondary); }
.rsw-ts__meta strong { color: var(--rsw-ink); font-size: 1rem; }
.rsw-ts__sample { margin: 0; color: var(--rsw-ink); overflow-wrap: anywhere; }
.rsw-ts--display { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.04em; line-height: 0.95; font-size: clamp(3rem, 0.8rem + 4.4vw, 5.75rem); }
.rsw-ts--h2 { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.03em; line-height: 1; font-size: var(--wp--preset--font-size--xx-large); }
.rsw-ts--h3 { font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.02em; font-size: var(--wp--preset--font-size--x-large); }
.rsw-ts--lead { font-size: var(--wp--preset--font-size--large); }
.rsw-ts--body { font-size: var(--wp--preset--font-size--base); }
.rsw-ts--small { font-size: var(--wp--preset--font-size--small); font-weight: 500; }
@media (max-width: 700px) { .rsw-ts__row { grid-template-columns: 1fr; gap: 0.5rem; } }

/* Color: roles and proportion */
.rsw-swatch__role { display: block; margin-top: 0.15rem; font-size: 0.875rem; line-height: 1.35; color: var(--rsw-ink-secondary); }
.elementor .rsw-section .rsw-h3 { margin-top: 1.5rem; }
.rsw-prop { display: flex; height: 7rem; margin-top: 1.5rem; border-radius: 14px; overflow: hidden; border: 1px solid var(--rsw-rule-solid); }
.rsw-prop__seg { position: relative; min-width: 0.5rem; }
.rsw-prop__lab { position: absolute; left: 0.9rem; bottom: 0.7rem; font-size: 0.8125rem; font-weight: 700; white-space: nowrap; color: var(--rsw-ink); }
.rsw-prop__seg:nth-child(2) .rsw-prop__lab, .rsw-prop__seg:nth-child(3) .rsw-prop__lab { color: var(--rsw-white); }

/* Layout: spacing steps */
.rsw-space { display: grid; gap: 0.9rem; margin-top: 1.5rem; }
.rsw-space__row { display: flex; align-items: center; gap: 1.25rem; }
.rsw-space__bar { display: block; height: 1.5rem; background: var(--rsw-blue); border-radius: 4px; flex: none; }
.rsw-space__lab { font-size: 0.9375rem; color: var(--rsw-ink-secondary); }

/* Downloads */
.rsw-dl { list-style: none; margin: 1.75rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: 1rem; }
.rsw-dl__card { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1.5rem; min-height: 8rem; background: var(--rsw-white); border: 1px solid var(--rsw-rule-solid); border-radius: 16px; color: var(--rsw-ink); text-decoration: none; font-family: var(--rsw-display); font-weight: 800; font-size: 1.2rem; letter-spacing: -0.01em; transition: border-color 0.2s ease, transform 0.2s ease; }
.rsw-dl__card .rsw-arrowlink__c { flex: none; }
.rsw-dl__card:hover { border-color: var(--rsw-blue); }
.rsw-dl__card:hover .rsw-arrowlink__c { background: var(--rsw-ink); color: var(--rsw-white); }
.rsw-dl__card:focus-visible { outline: 3px solid var(--rsw-blue); outline-offset: 3px; }
html[data-rsw-motion="on"] .rsw-dl__card:hover { transform: translateY(-3px); }

/* Art & Imagery: the art bands carry the statements; the mood board shows every still at its own shape, no frames */
.elementor .e-con.rsw-artband.rsw-bband { min-height: clamp(26rem, 64vh, 42rem); }
.elementor .e-con.rsw-moodsec { padding-bottom: clamp(3rem, 7vw, 6rem); }
.elementor .rsw-mood-widget { width: 100%; }
.rsw-mood { columns: 4 15rem; column-gap: clamp(0.6rem, 1.2vw, 1rem); margin-top: 2rem; padding: 0 clamp(0.6rem, 1.2vw, 1rem); }
.rsw-mood__item { break-inside: avoid; margin: 0 0 clamp(0.6rem, 1.2vw, 1rem); }
.rsw-mood__item img { display: block; width: 100%; height: auto; }
@media (prefers-reduced-motion: no-preference) {
	html[data-rsw-motion="on"] .rsw-mood__item img { transition: transform 0.6s cubic-bezier(.2, .7, .2, 1), filter 0.4s ease; }
	html[data-rsw-motion="on"] .rsw-mood:hover .rsw-mood__item img { filter: saturate(0.6) brightness(0.92); }
	html[data-rsw-motion="on"] .rsw-mood .rsw-mood__item:hover img { filter: none; transform: scale(1.02); }
}
.rsw-ph--brandcomp { --rsw-art-w: 46vw; }
.rsw-ph--brandcomp .rsw-lead, .rsw-ph--brandcomp .rsw-lead p { max-width: 26rem; }
.rsw-swatches:has(.rsw-swatch__role) { grid-template-columns: repeat(auto-fit, minmax(7.25rem, 1fr)); }
.elementor .rsw-mood .rsw-mood__item { margin: 0 0 clamp(0.6rem, 1.2vw, 1rem); }
.rsw-ts .rsw-ts--display { font-size: clamp(3rem, 1rem + 5.2vw, 5.75rem); }
.rsw-ts .rsw-ts--h2 { font-size: clamp(2.2rem, 4vw, 3.5rem); }
.rsw-ph--brandcomp .rsw-ph__art--free, .elementor .rsw-ph--brandcomp .e-con.rsw-ph__art--free { mix-blend-mode: multiply; }
.rsw-ph.rsw-ph--brandcomp:not(.rsw-dark) .rsw-ph__art--free .rsw-slot img {
	-webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 9%, #000 88%, transparent 100%), linear-gradient(to right, transparent 0, #000 10%);
	-webkit-mask-composite: source-in; mask-image: linear-gradient(to bottom, transparent 0, #000 9%, #000 88%, transparent 100%), linear-gradient(to right, transparent 0, #000 10%); mask-composite: intersect;
}

/* Voice: How Rob writes, What Rob believes (Rob, 2026-10-12) */
.rsw-points { list-style: none; margin: 2rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); gap: clamp(1.5rem, 3vw, 2.5rem); }
.rsw-points li { display: grid; grid-template-columns: 3rem 1fr; gap: 0.5rem; padding-top: 1.25rem; border-top: 2px solid var(--rsw-ink); }
.rsw-points__n { font-family: var(--rsw-display); font-weight: 800; color: var(--rsw-blue); font-size: 1rem; line-height: 1.6; }
.rsw-points li:nth-child(4n+2) .rsw-points__n { color: #D9473A; }
.rsw-points li:nth-child(4n+3) .rsw-points__n { color: #00839E; }
.rsw-points li:nth-child(4n) .rsw-points__n { color: #7444D8; }
.rsw-points__t { margin: 0 0 0.6rem; font-family: var(--rsw-display); font-weight: 800; letter-spacing: -0.02em; line-height: 1.15; font-size: clamp(1.25rem, 1.8vw, 1.6rem); color: var(--rsw-ink); }
.rsw-points__b { margin: 0; font-size: 1.0625rem; line-height: 1.55; color: var(--rsw-ink-secondary); }
@media (min-width: 700px) { .rsw-points:has(> li:nth-child(4)) { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.rsw-mood .rsw-mood__item { padding-bottom: clamp(0.6rem, 1.2vw, 1rem); }
