/* OIV / Connected. Approved navy, mountain landscape and five-field compass. */
:root {
  --navy:#102431; --navy-deep:#0b1a25; --navy-raised:#183341;
  --paper:#f6f4ef; --white:#fdfcf8; --ink:#122736; --muted:#53616b;
  --gold:#d3b780; --gold-strong:#a9874b; --gold-ink:#83652f;
  --line:#d9d7cf; --line-dark:#40515a; --light-text:#d4dde1;
  --error:#9b2f26; --success:#295e4a; --focus:#94703a;
  --display:Georgia,'Times New Roman',serif;
  --body:'Segoe UI','Helvetica Neue',Arial,sans-serif;
  --max:1320px; --gutter:clamp(24px,5.3vw,84px);
  --ease:cubic-bezier(.2,.7,.2,1);
}
*,*::before,*::after {box-sizing:border-box}
html {scroll-behavior:smooth;scroll-padding-top:102px}
body {margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased}
body:has(dialog[open]) {overflow:hidden}
h1,h2,h3,h4,p,figure {margin:0}
h1,h2,h3,h4 {font-family:var(--display);font-weight:400;line-height:1.14;letter-spacing:-.042em;text-wrap:balance}
h1 {font-size:clamp(42px,5vw,70px)}
h2 {font-size:clamp(31px,3.12vw,44px)}
h3 {font-size:25px}
p {text-wrap:pretty}
a {color:inherit;text-decoration:none;touch-action:manipulation}
button,input,select,textarea {font:inherit}
button {cursor:pointer;touch-action:manipulation}
button, input, select, textarea {border-radius:0}
button {color:inherit}
img {max-width:100%;height:auto;display:block}
svg {display:block;flex-shrink:0}
::selection {background:var(--gold);color:var(--navy)}
[hidden] {display:none!important}
:focus-visible {outline:3px solid var(--focus);outline-offset:5px}
.dark :focus-visible,.site-header :focus-visible,.site-footer :focus-visible {outline-color:var(--gold)}
main:focus {outline:none}
.container {width:min(var(--max),calc(100% - var(--gutter)*2));margin-inline:auto}
.section {padding-block:64px}
.dark {background:var(--navy);color:var(--white)}
.dark p {color:var(--light-text)}
.eyebrow {display:flex;align-items:center;gap:19px;font-family:var(--body);font-size:11px;font-weight:600;letter-spacing:.15em;line-height:1.55;text-transform:uppercase;color:var(--gold-ink);margin-bottom:18px;text-wrap:wrap}
.eyebrow::before {content:'';width:30px;height:1px;background:currentColor;flex-shrink:0}
.dark .eyebrow {color:var(--gold)}
.button {display:inline-flex;gap:27px;justify-content:space-between;align-items:center;padding:13px 23px;min-height:50px;border:1px solid transparent;border-radius:0;font-family:var(--body);font-weight:600;font-size:13px;line-height:1.5;transition:background .2s var(--ease),color .2s var(--ease),border-color .2s var(--ease),transform .2s var(--ease)}
.button svg {width:20px;height:20px}
.button-gold {background:var(--gold);color:var(--navy-deep);border-color:var(--gold)}
.button-gold:hover {background:var(--white);border-color:var(--white)}
.button-light {color:var(--white);background:transparent;border-color:var(--light-text)}
.button-light:hover {color:var(--navy);background:var(--white)}
.button-outline {color:var(--ink);background:transparent;border-color:var(--muted)}
.button-outline:hover {background:var(--ink);color:var(--white)}
.button-ink {background:var(--ink);color:var(--white);border-color:var(--ink)}
.button-ink:hover {background:var(--navy-raised)}
.button:active {transform:scale(.97)}
.text-link {display:inline-flex;align-items:center;gap:20px;min-height:44px;font-size:12px;font-weight:600;line-height:1.5}
.text-link span {border-bottom:1px solid currentColor;padding-bottom:3px}
.text-link svg {width:18px;height:18px;transition:transform .2s var(--ease)}
.text-link:hover svg {transform:translateX(5px)}
.text-link:hover span {color:var(--gold-ink)}
.dark .text-link {color:var(--white)}
.dark .text-link:hover span {color:var(--gold)}
.icon {width:48px;height:48px;color:var(--gold-strong)}
.icon-button {display:grid;place-items:center;width:44px;height:44px;padding:9px;border:0;background:transparent}
.icon-button svg {width:23px;height:23px;color:inherit}
.icon-button:hover {background:color-mix(in srgb,currentColor 9%,transparent)}
.sr-only {position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.skip-link {position:fixed;left:20px;top:12px;z-index:99;background:var(--paper);color:var(--ink);padding:10px 18px;transform:translateY(-180%)}
.skip-link:focus {transform:none}
/* Navigation is a quiet horizontal rule, not a floating app toolbar. */
.site-header {background:var(--navy);color:var(--white);position:relative;z-index:20}
.header-inner {display:flex;align-items:center;gap:30px;min-height:86px;border-bottom:1px solid var(--line-dark)}
.brand {display:flex;align-items:center;gap:22px;flex-shrink:0}
.brand img {width:80px;height:auto;flex-shrink:0}
.brand>span {border-left:1px solid var(--line-dark);padding-left:22px;font-size:11px;line-height:1.9;letter-spacing:.2em}
.main-nav {display:flex;gap:26px;align-items:center;margin-left:auto}
.main-nav>a {display:flex;align-items:center;min-height:44px;font-size:12px;white-space:nowrap;position:relative}
.main-nav>a::after {position:absolute;content:'';bottom:6px;left:0;width:100%;height:1px;background:var(--gold);transform:scaleX(0);transform-origin:left;transition:transform .2s}
.main-nav>a:hover::after,.main-nav>a[aria-current]::after {transform:scaleX(1)}
.header-tools {display:flex;align-items:center;gap:16px}
.languages {display:flex;gap:4px;align-items:center;border-left:1px solid var(--line-dark);padding-left:17px}
.languages a {min-width:38px;min-height:44px;font-size:11px;display:grid;place-content:center;position:relative}
.languages a[aria-current] {color:var(--gold)}
.languages a[aria-current]::after {content:'';position:absolute;bottom:6px;left:11px;right:11px;height:1px;background:var(--gold)}
.menu-toggle {display:none;background:transparent;border:0;padding:8px;min-height:44px}
/* The hero faithfully follows the approved composition. No rasterized UI. */
.hero {position:relative;isolation:isolate;overflow:hidden}
.hero-landscape {position:absolute;inset:0;background-image:linear-gradient(90deg,var(--navy) 0%,color-mix(in srgb,var(--navy) 80%,transparent) 23%,color-mix(in srgb,var(--navy) 6%,transparent) 70%,color-mix(in srgb,var(--navy) 35%,transparent)),url('../img/mountains.webp');background-size:cover;background-position:center;z-index:-1}
.hero::after {content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(0deg,var(--navy),transparent 24%,transparent 78%,color-mix(in srgb,var(--navy) 65%,transparent))}
.hero-grid {display:grid;grid-template-columns:1.02fr 1fr;gap:10px;min-height:534px;align-items:center;padding-top:40px;padding-bottom:52px}
.hero-copy {position:relative;z-index:2;min-width:0}
.hero .eyebrow {margin-bottom:24px;font-size:11px;letter-spacing:.12em}
.hero h1 {font-size:clamp(43px,4.6vw,68px);line-height:1.055;letter-spacing:-.042em}
.hero h1>span {display:block}
.hero h1>span:not(:first-child) {color:var(--gold)}
.hero-lead {max-width:520px;font-size:16px;line-height:1.7;margin-top:25px}
.hero-actions {display:flex;gap:18px;flex-wrap:wrap;margin-top:28px}
.compass {position:relative;width:100%;max-width:610px;aspect-ratio:500/440;margin-inline:auto;isolation:isolate}
.compass-lines {position:absolute;inset:0;width:100%;height:100%;stroke:var(--gold);stroke-width:.65;opacity:.82;z-index:-1}
.compass-lines .faint {opacity:.18;stroke-width:.6}
.compass-lines .point {fill:var(--gold);stroke:none}
.compass-center {position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:20%;padding:8px}
.compass-center img {width:100%}
.compass-node {position:absolute;display:flex;align-items:center;flex-direction:column;gap:7px;transform:translate(-50%,-50%);padding:9px 10px;min-width:96px;min-height:78px;text-align:center;font-size:11px;line-height:1.35;letter-spacing:.065em;text-transform:uppercase;color:var(--white);border:1px solid transparent;transition:background .2s,border-color .2s}
.compass-node .icon {width:31px;height:31px;color:var(--gold)}
.compass-node:hover,.compass-node:focus-visible {background:color-mix(in srgb,var(--navy) 83%,transparent);border-color:var(--gold-strong)}
.node-ai {left:50%;top:14%}
.node-workflows {left:17%;top:48%}
.node-training {left:82%;top:47%}
.node-research {left:68%;top:78%}
.node-evaluation {left:29%;top:77%}
.compass-aside {position:absolute;right:-7%;top:11%;border-left:1px solid var(--gold-strong);padding:10px 0 16px 13px;font-size:11px;line-height:1.8;letter-spacing:.08em;text-transform:uppercase;max-width:98px}
.compass-quote {position:absolute;right:-7%;bottom:3%;font-family:var(--display);font-size:16px;font-style:italic;line-height:1.35;max-width:147px;letter-spacing:-.02em}
/* Five pillars share the space and neither becomes the entire company. */
.solutions {padding-block:54px 45px}
.section-heading {display:grid;grid-template-columns:1.05fr 1.05fr auto;align-items:start;gap:52px;margin-bottom:39px}
.section-heading>p {font-size:14px;color:var(--muted);max-width:510px;padding-top:10px;line-height:1.7}
.section-heading>.text-link {margin-top:3px;justify-self:end;white-space:nowrap}
.solution-grid {display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0}
.solution-card {padding:0 26px;border-left:1px solid var(--line);display:flex;flex-direction:column;align-items:flex-start}
.solution-card:first-child {border-left:0;padding-left:0}
.solution-card:last-child {padding-right:0}
.solution-card h3 {font-size:23px;letter-spacing:-.04em;min-height:53px;margin-top:12px;line-height:1.17}
.solution-card h3 a:hover {color:var(--gold-ink)}
.solution-card>p {font-size:14px;color:var(--muted);line-height:1.65;max-width:210px;margin:10px 0 14px}
.solution-card .text-link {margin-top:auto}
/* Source-backed projects, with their existing marks rather than pretend dashboards. */
.featured {padding-block:46px}
.featured-grid {display:grid;grid-template-columns:.85fr 1.17fr 1.17fr;gap:27px;align-items:center}
.featured-heading h2 {font-size:38px;line-height:1.1;max-width:295px}
.featured-heading .eyebrow {font-size:11px;gap:13px;letter-spacing:.13em;margin-bottom:15px}
.featured-heading .text-link {font-size:11px;gap:12px;margin-top:16px}
.featured-project {display:grid;grid-template-columns:43% 1fr;gap:17px;align-items:center;min-width:0}
.featured-project+.featured-project {border-left:1px solid var(--line-dark);padding-left:25px}
.project-mark {display:block;transition:transform .25s}
.project-mark:hover {transform:translateY(-3px)}
.project-mark img {width:100%;height:auto}
.featured-project h3 {font-size:34px;line-height:1.13;margin:2px 0 10px}
.featured-project p:not(.project-role) {font-size:12px;line-height:1.7;color:var(--light-text)}
.featured-project .project-role {font-size:11px;line-height:1.5;color:var(--gold);margin-bottom:6px}
.featured-project .text-link {font-size:11px;gap:15px;margin-top:8px}
.process {padding-block:55px 60px}
.process .section-heading {margin-bottom:30px}
.process-list {display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:25px;list-style:none;padding:0;margin:0}
.step-line {display:flex;align-items:center;margin-bottom:16px;gap:13px}
.step-line span {width:41px;height:41px;border:1px solid var(--gold-strong);border-radius:50%;display:grid;place-content:center;font-family:var(--display);font-size:13px;color:var(--gold-ink);flex-shrink:0}
.step-line i {display:block;position:relative;flex:1;height:1px;background:var(--gold-strong);opacity:.6;margin-right:1px}
.step-line i::after {content:'';position:absolute;right:0;top:-3px;width:7px;height:7px;transform:rotate(45deg);border-top:1px solid var(--gold-strong);border-right:1px solid var(--gold-strong)}
.process-list li:last-child .step-line i {display:none}
.process-list h3 {font-size:23px;margin-bottom:8px}
.process-list p {color:var(--muted);font-size:13px;line-height:1.65;max-width:190px}
.philosophy {position:relative;background-image:linear-gradient(90deg,var(--navy) 0%,color-mix(in srgb,var(--navy) 88%,transparent) 70%),url('../img/mountains.webp');background-size:cover;background-position:center 55%}
.cta-band {padding-block:40px}
.cta-grid {display:grid;grid-template-columns:.95fr 1fr auto;align-items:center;gap:45px}
.cta-grid h2 {font-size:38px}
.cta-grid>p {font-size:13px;line-height:1.7;color:var(--muted);max-width:430px}
.cta-grid .eyebrow {font-size:11px;margin-bottom:12px;gap:15px}
.cta-actions {display:flex;gap:12px;align-items:center}
.cta-actions .button {padding:11px 16px;min-height:46px;font-size:12px;gap:20px}
/* Footer */
.site-footer {background:var(--navy);color:var(--white);padding-block:24px 18px}
.footer-top {display:flex;align-items:center;gap:32px;padding-bottom:20px}
.footer-top .brand img {width:70px}
.footer-top .brand>span {font-size:11px}
.footer-top nav {display:flex;gap:27px;margin-inline:auto}
.footer-top nav a {min-height:44px;display:flex;align-items:center;font-size:11px}
.footer-top nav a:hover {color:var(--gold)}
.footer-top>p {border-left:1px solid var(--line-dark);padding-left:24px;font-size:11px;max-width:200px;color:var(--light-text)}
.company-details {border-top:1px solid var(--line-dark);border-bottom:1px solid var(--line-dark)}
.company-details summary {display:flex;justify-content:space-between;align-items:center;min-height:44px;cursor:pointer;list-style:none;font-size:11px;color:var(--light-text)}
.company-details summary::-webkit-details-marker {display:none}
.company-details summary>span {font-size:19px}
.company-details[open] summary>span {transform:rotate(45deg)}
.company-grid {display:grid;grid-template-columns:1.1fr .7fr 1.3fr .7fr;gap:30px;padding-block:16px 26px}
.company-grid span {font-size:11px;letter-spacing:.05em;color:var(--gold)}
.company-grid p {font-size:12px;margin-top:4px;color:var(--light-text)}
.company-grid p a {display:flex;align-items:center;gap:10px;min-height:32px}
.company-grid svg {width:14px;height:14px}
.footer-bottom {display:flex;justify-content:space-between;align-items:center;gap:25px;padding-top:16px}
.footer-bottom p {font-size:11px;color:var(--light-text)}
.footer-bottom>div {display:flex;gap:24px;align-items:center;font-size:11px}
.footer-bottom a {display:flex;align-items:center;min-height:36px}
.footer-bottom a:hover {color:var(--gold)}
.footer-bottom .to-top {min-height:40px;width:40px;display:grid;place-content:center;border:1px solid var(--line-dark);font-size:20px}
/* Inner pages inherit the same language without repeating the whole hero. */
.inner-hero {padding-block:22px 64px;background-image:linear-gradient(90deg,var(--navy) 35%,color-mix(in srgb,var(--navy) 80%,transparent)),url('../img/mountains.webp');background-position:center 30%;background-size:cover}
.breadcrumb {display:flex;align-items:center;gap:12px;font-size:11px;color:var(--light-text);margin-bottom:32px;min-height:32px}
.breadcrumb a:hover {color:var(--gold)}
.inner-hero h1 {max-width:950px;font-size:clamp(39px,4.4vw,62px);line-height:1.1}
.inner-hero .inner-lead {max-width:735px;margin-top:24px;font-size:17px;line-height:1.8}
.service-layout {display:grid;grid-template-columns:300px minmax(0,1fr);gap:90px}
.service-nav {align-self:start;position:sticky;top:35px}
.service-nav>a {display:flex;align-items:center;gap:14px;padding:14px 8px;border-bottom:1px solid var(--line);font-size:13px;min-height:66px}
.service-nav>a .icon {width:29px;height:29px}
.service-nav>a>svg:last-child {width:16px;height:16px;margin-left:auto}
.service-nav>a[aria-current] {color:var(--gold-ink);border-bottom:1px solid var(--gold-strong)}
.service-nav>a:hover {background:color-mix(in srgb,var(--gold) 12%,var(--paper))}
.service-content h2 {font-size:33px;margin:0 0 23px}
.deliverables {list-style:none;margin:0 0 50px;padding:0;counter-reset:deliver}
.deliverables li {counter-increment:deliver;display:flex;gap:22px;padding-block:16px;border-bottom:1px solid var(--line);font-size:16px;line-height:1.6}
.deliverables li::before {content:counter(deliver,decimal-leading-zero);font-size:11px;color:var(--gold-ink);padding-top:5px}
.example-list {display:grid;gap:15px;margin-bottom:40px}
.example-list p {border-left:2px solid var(--gold-strong);padding-left:22px;max-width:65ch;color:var(--muted)}
.scope-note {padding:25px 30px;background:color-mix(in srgb,var(--gold) 12%,var(--paper));border-left:2px solid var(--gold-strong);margin-bottom:30px}
.scope-note h3 {font-size:23px;margin-bottom:10px}
.scope-note p {font-size:14px;color:var(--muted);line-height:1.8}
.related {border-top:1px solid var(--line);margin-top:38px;padding-top:27px}
.related p {font-size:14px;color:var(--muted)}
/* Projects and product index */
.filter-bar {display:flex;justify-content:space-between;align-items:center;gap:30px;padding-bottom:25px;border-bottom:1px solid var(--line);margin-bottom:35px}
.filter-bar>div {display:flex;gap:8px;flex-wrap:wrap}
.filter-bar button {padding:10px 19px;min-height:44px;background:transparent;border:1px solid var(--line);font-size:13px}
.filter-bar button[aria-pressed="true"] {background:var(--ink);color:var(--white);border-color:var(--ink)}
.filter-bar button:hover:not([aria-pressed="true"]) {border-color:var(--ink)}
.filter-count {font-size:12px;color:var(--muted)}
.project-detail {display:grid;grid-template-columns:32% 1fr;gap:60px;align-items:center;padding-block:15px 50px;margin-bottom:35px;border-bottom:1px solid var(--line);scroll-margin-top:40px}
.project-emblem {display:grid;place-items:center;aspect-ratio:1.3}
.project-emblem img {width:70%;max-width:270px}
.project-detail h2 {font-size:40px;margin:0 0 16px}
.project-detail p:not(.eyebrow) {font-size:15px;color:var(--muted);max-width:65ch}
.project-links {display:flex;gap:32px;flex-wrap:wrap;margin-top:16px}
.scope-detail {border-top:1px solid var(--line);margin-top:20px}
.scope-detail summary {display:flex;align-items:center;justify-content:space-between;min-height:44px;list-style:none;cursor:pointer;font-size:12px}
.scope-detail summary::-webkit-details-marker {display:none}
.scope-detail[open] summary>span {transform:rotate(45deg)}
.scope-detail p {font-size:13px!important;padding:6px 0 16px;line-height:1.8}
.apps-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
.app-card {border:1px solid var(--line);padding:30px;display:flex;flex-direction:column;align-items:flex-start;min-width:0}
.app-card img {width:62px;border-radius:13px;margin-bottom:21px}
.app-card h2 {font-size:29px;margin-bottom:12px}
.app-card>p {font-size:14px;color:var(--muted);margin-bottom:18px}
.app-card .app-status {font-size:11px;margin-bottom:9px;color:var(--gold-ink);line-height:1.5}
.app-card .text-link {margin-top:auto}
.footnote {font-size:12px!important;color:var(--muted);line-height:1.8;margin-top:25px;max-width:80ch}
.about-layout {display:grid;grid-template-columns:1.1fr 1fr;gap:90px}
.about-layout h2 {margin-bottom:23px}
.about-layout p:not(.eyebrow) {font-size:16px;line-height:1.85;color:var(--muted)}
.about-services {display:flex;flex-direction:column;align-items:flex-start;gap:6px;margin-top:25px}
.founder-panel {border-left:1px solid var(--line);padding-left:48px}
.founder-panel .text-link {margin-top:20px}
.method-section {border-top:1px solid var(--line)}
.resources-top {display:grid;grid-template-columns:1.2fr 1fr;gap:80px;align-items:center;padding-bottom:60px;border-bottom:1px solid var(--line)}
.resources-top h2 {font-size:35px;margin-bottom:20px}
.resources-top p:not(.eyebrow) {font-size:15px;color:var(--muted);max-width:60ch;margin-bottom:22px}
.resource-links {border-left:1px solid var(--line);padding-left:45px;display:flex;flex-direction:column;align-items:flex-start}
.resource-links>.text-link {width:100%;justify-content:space-between;border-bottom:1px solid var(--line);padding-block:10px}
.publication-heading {padding-block:55px 30px}
.publication-heading p:not(.eyebrow) {margin-top:20px;max-width:65ch;font-size:14px;color:var(--muted)}
.publications {display:grid;grid-template-columns:1fr 1fr;gap:45px}
.publications article {display:grid;grid-template-columns:170px 1fr;gap:30px;align-items:center}
.book-cover {background:color-mix(in srgb,var(--gold) 10%,var(--paper));padding:18px}
.book-cover img {width:100%;height:auto}
.publications h3 {font-size:28px;margin-bottom:16px}
.prose {max-width:760px}
.prose h2 {font-size:31px;margin-bottom:20px;margin-top:35px}
.prose h2:first-child {margin-top:0}
.prose p {color:var(--muted);font-size:16px;line-height:1.85}
.prose .updated {margin-top:35px;font-size:12px}
/* A real local brief composer. Clear language, not a pretend message endpoint. */
.contact-layout {display:grid;grid-template-columns:.85fr 1.5fr;gap:85px;align-items:start}
.contact-aside {position:sticky;top:35px}
.direct-email {font-family:var(--display);font-size:clamp(22px,2vw,29px);letter-spacing:-.035em;overflow-wrap:anywhere;border-bottom:1px solid var(--gold-strong);padding-bottom:6px;display:inline-block}
.contact-steps {list-style:none;padding:0;counter-reset:contact;margin-block:30px}
.contact-steps li {counter-increment:contact;font-size:14px;display:flex;gap:14px;padding-block:14px;border-bottom:1px solid var(--line)}
.contact-steps li::before {content:counter(contact,decimal-leading-zero);font-size:11px;color:var(--gold-ink);padding-top:3px}
.privacy-note {color:var(--muted);font-size:13px;line-height:1.85;max-width:42ch}
.contact-aside .text-link {margin-top:14px}
.form-fields {display:grid;grid-template-columns:1fr 1fr;gap:22px}
.field {margin-bottom:23px;min-width:0}
.field label {display:flex;gap:9px;flex-wrap:wrap;align-items:baseline;margin-bottom:10px;font-size:13px;font-weight:600}
.field label span {font-size:11px;color:var(--muted);font-weight:400}
.field input,.field select,.field textarea {background:var(--white);border:1px solid var(--line);width:100%;padding:12px 14px;color:var(--ink);min-height:48px;font-size:16px;outline-offset:2px}
.field input:hover,.field select:hover,.field textarea:hover {border-color:var(--muted)}
.field input[aria-invalid="true"],.field textarea[aria-invalid="true"] {border-color:var(--error)}
.field textarea {resize:vertical;min-height:155px;line-height:1.7}
.field textarea::placeholder {color:var(--muted)}
.field-bottom {display:flex;align-items:flex-start;justify-content:space-between;gap:25px;margin-top:9px}
.field-bottom p {font-size:11px;color:var(--muted);max-width:54ch}
.char-count {white-space:nowrap;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.field-error {font-size:12px;color:var(--error);margin-top:7px}
.brief-app {min-width:0}
#brief-preview h2 {font-size:36px;margin-bottom:24px}
#brief-preview>.eyebrow {letter-spacing:.04em;text-transform:none;font-size:12px}
#brief-text {display:block;width:100%;resize:vertical;min-height:300px;font-family:var(--body);font-size:15px;line-height:1.8;border:1px solid var(--line);background:var(--white);color:var(--ink);padding:22px}
.brief-actions {display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:21px}
.brief-actions .button {font-size:12px;padding:12px 17px;gap:17px}
.text-button {display:inline-flex;align-items:center;min-height:44px;padding:8px 0;font-size:12px;border:0;background:none;text-decoration:underline;text-underline-offset:5px}
.text-button:hover {color:var(--gold-ink)}
#copy-result {font-size:13px;color:var(--success);margin-top:12px;min-height:24px}
.edit-brief {margin-top:18px}
.long-brief-note {font-size:13px;background:color-mix(in srgb,var(--gold) 18%,var(--paper));padding:15px;margin-top:15px}
/* Local search. Native dialog provides focus containment and an Escape exit. */
.search-dialog {width:min(700px,calc(100% - 32px));max-height:80dvh;padding:0;border:1px solid var(--line);background:var(--paper);color:var(--ink);box-shadow:none}
.search-dialog::backdrop {background:color-mix(in srgb,var(--navy-deep) 82%,transparent);backdrop-filter:blur(4px)}
.search-dialog-inner {padding:30px}
.dialog-heading {display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}
.dialog-heading h2 {font-size:32px}
#search-input {width:100%;padding:14px 16px;min-height:52px;font-size:17px;border:1px solid var(--muted);background:var(--white);color:var(--ink)}
.search-help {font-size:12px;color:var(--muted);margin:10px 0 22px}
#search-results a {display:block;padding:15px 2px;border-top:1px solid var(--line)}
#search-results a:hover {color:var(--gold-ink)}
#search-results strong {display:block;font-family:var(--display);font-size:23px;font-weight:400}
#search-results a span {display:block;font-size:12px;color:var(--muted);margin-top:5px;line-height:1.6}
#search-results>p {font-size:14px;color:var(--muted);padding-block:20px}
.toast {position:fixed;bottom:24px;left:50%;transform:translateX(-50%);max-width:calc(100% - 40px);background:var(--navy);color:var(--white);padding:12px 22px;border:1px solid var(--gold-strong);z-index:100;font-size:13px}
.not-found {padding:12vh var(--gutter);min-height:100dvh}
.not-found h1 {max-width:800px;margin:20px 0}
.not-found p {margin-bottom:25px}
/* Responsive layout. No clipping to disguise content problems. */
@media(min-width:1600px) {
 .hero-grid {min-height:610px}.hero h1 {font-size:73px}.hero-lead {font-size:17px}.hero .compass {max-width:600px}.section {padding-block:70px}.solutions{padding-block:58px 52px}.featured{padding-block:52px}
}
@media(max-width:1250px) {
 .header-inner {gap:22px}.brand>span {font-size:11px;padding-left:15px}.brand{gap:15px}.brand img{width:69px}.main-nav{gap:18px}.main-nav>a{font-size:11px}.header-tools{gap:6px}.languages{padding-left:8px}
 .hero-grid {min-height:510px}.hero h1{font-size:4.65vw}.hero-lead{font-size:14px}.hero-actions .button{font-size:12px;padding:12px 17px;gap:18px}.compass-aside,.compass-quote{right:-1%;max-width:95px}.compass-quote{font-size:13px;bottom:0}.compass-aside{font-size:11px}
 .section-heading{gap:30px;grid-template-columns:1fr 1fr}.section-heading>.text-link{grid-column:2;justify-self:start;margin-top:-18px}.solution-card{padding-inline:18px}.solution-card h3{font-size:21px}.solution-card>p{font-size:13px}.solution-card .text-link{font-size:11px;gap:12px}
 .featured-grid{grid-template-columns:.78fr 1.1fr 1.1fr;gap:20px}.featured-heading h2{font-size:31px}.featured-project{grid-template-columns:38% 1fr;gap:15px}.featured-project+.featured-project{padding-left:15px}.featured-project h3{font-size:28px}.featured-project p:not(.project-role){font-size:11px}
 
 .cta-grid{gap:25px;grid-template-columns:1fr 1fr}.cta-actions{grid-column:2}.cta-grid h2{font-size:33px}.cta-grid>div:first-child{grid-row:span 2}.cta-grid>p{margin-bottom:-15px}
 .service-layout{grid-template-columns:260px 1fr;gap:55px}.publications article{grid-template-columns:140px 1fr;gap:20px}.publications h3{font-size:24px}.contact-layout{gap:55px}.footer-top nav{gap:18px}.footer-top>p{max-width:165px}
}
@media(max-width:1000px) {
 .header-inner{min-height:78px;flex-wrap:wrap;padding-block:10px;gap:12px}.main-nav{width:100%;order:3;margin:0;justify-content:space-between;border-top:1px solid var(--line-dark);padding-top:8px}.header-tools{margin-left:auto;gap:9px}.main-nav>a{font-size:12px}
 .js .menu-toggle:not([hidden]){display:flex;align-items:center;gap:12px}.js .main-nav{display:none}.js .site-header.menu-open .main-nav{display:flex}.menu-toggle{font-size:12px}.menu-lines{width:20px;height:12px;border-top:1px solid var(--white);border-bottom:1px solid var(--white)}.menu-open .menu-lines{height:1px;border-bottom:0}
 .hero-grid{grid-template-columns:1.04fr 1fr;gap:0;min-height:475px}.hero h1{font-size:4.9vw}.hero-actions{gap:10px}.hero .eyebrow{font-size:11px}.hero-actions .button{font-size:11px;padding:11px 14px;gap:13px;min-height:44px}.hero-lead{font-size:13px}.compass-node{font-size:11px;min-width:78px;padding:7px;gap:6px}.compass-node .icon{width:27px;height:27px}.compass-aside{display:none}.compass-quote{right:2%;bottom:-5%;max-width:125px;font-size:12px}
 .solution-grid{grid-template-columns:repeat(3,1fr);gap:28px 0}.solution-card:nth-child(4){padding-left:0;border-left:0}.solution-card h3{min-height:0;font-size:23px}.solution-card .icon{width:40px;height:40px}.solution-card>p{max-width:none;font-size:14px}.solution-card .text-link{font-size:12px}
 .featured-grid{grid-template-columns:1fr 1fr;gap:30px}.featured-heading{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;align-items:end}.featured-heading .eyebrow{grid-column:1/-1}.featured-heading h2{max-width:none}.featured-heading .text-link{justify-self:end}.featured-project{grid-template-columns:37% 1fr}.featured-project+.featured-project{padding-left:25px}.featured-project p:not(.project-role){font-size:13px}.featured-project h3{font-size:30px}
 .process-list{gap:16px}.process-list p{font-size:12px}.process-list h3{font-size:21px}.step-line{gap:8px}
 .footer-top{flex-wrap:wrap;gap:18px}.footer-top>p{display:none}.footer-top nav{margin-left:auto;margin-right:0}.company-grid{grid-template-columns:1fr 1fr;gap:20px}.service-layout{grid-template-columns:220px 1fr;gap:35px}.service-content h2{font-size:28px}.apps-grid{grid-template-columns:1fr 1fr}.about-layout{gap:40px}.founder-panel{padding-left:30px}.publications{gap:25px}.publications article{grid-template-columns:110px 1fr;gap:20px}.book-cover{padding:10px}.contact-layout{grid-template-columns:1fr 1.4fr;gap:35px}.form-fields{grid-template-columns:1fr;gap:0}.field{margin-bottom:22px}.direct-email{font-size:24px}
}
@media(max-width:700px) {
 :root{--gutter:23px}.section{padding-block:42px}h1{font-size:42px}h2{font-size:32px}.eyebrow{font-size:11px;gap:13px;letter-spacing:.105em;margin-bottom:14px}.eyebrow::before{width:24px}
 .header-inner{min-height:73px;padding-block:11px}.brand img{width:59px}.brand>span{font-size:11px;letter-spacing:.16em;padding-left:13px}.brand{gap:13px}.header-tools{gap:1px}.languages{padding-left:3px;border-left:0;gap:0}.languages a{min-width:31px;font-size:11px}.search-toggle{width:35px;padding:8px}.search-toggle svg{width:20px;height:20px}.menu-toggle{padding:6px;gap:7px!important}.menu-toggle>span:first-child{display:none}.menu-lines{width:19px}.main-nav{flex-wrap:wrap;gap:0}.main-nav>a{width:33.33%;min-height:44px;font-size:12px}
 .hero-grid{grid-template-columns:1fr;padding-top:32px;padding-bottom:28px;gap:12px;min-height:0}.hero h1{font-size:clamp(37px,7.8vw,51px);line-height:1.08;letter-spacing:-.046em}.hero-copy{max-width:555px}.hero .eyebrow{font-size:11px;margin-bottom:19px}.hero-lead{font-size:14px;line-height:1.7;max-width:48ch;margin-top:20px}.hero-actions{margin-top:23px;gap:12px}.hero-actions .button{font-size:11px;gap:14px;padding:12px 14px;min-height:46px}
 .hero-landscape{background-position:68% center;background-size:auto 100%;opacity:.75}.hero::after{background:linear-gradient(180deg,color-mix(in srgb,var(--navy) 60%,transparent),transparent 70%,var(--navy))}.compass{max-width:430px;width:100%;aspect-ratio:500/420;min-height:260px}.compass-node{font-size:11px;min-height:65px;min-width:85px}.compass-node .icon{width:28px;height:28px}.compass-lines{width:100%;height:100%}.compass-quote{display:none}.compass-center{width:21%}.node-ai{top:15%}.node-research{top:79%}.node-evaluation{top:79%}
 .section-heading{display:block;margin-bottom:27px}.section-heading>p{font-size:14px;padding:0;margin-top:20px;max-width:50ch}.section-heading>.text-link{margin-top:15px;font-size:12px}.section-heading h2{font-size:32px}
 .solution-grid{grid-template-columns:1fr 1fr;gap:29px 0}.solution-card{padding-inline:20px}.solution-card:nth-child(odd){padding-left:0;border-left:0}.solution-card:nth-child(even){padding-left:20px;border-left:1px solid var(--line)}.solution-card:last-child{grid-column:1/-1;display:grid;grid-template-columns:48px 1fr;gap:0 14px;border-top:1px solid var(--line);padding-top:24px;align-items:start}.solution-card:last-child .icon{grid-row:1/4}.solution-card:last-child h3{margin-top:0}.solution-card:last-child>p{margin-block:9px 0}.solution-card:last-child .text-link{margin-top:4px}.solution-card h3{font-size:23px;line-height:1.16;margin-top:12px}.solution-card>p{font-size:13px;line-height:1.65;margin-top:12px;margin-bottom:10px}.solution-card .text-link{font-size:11px;gap:12px}.solution-card .icon{width:39px;height:39px}
 .featured-grid{display:block}.featured-heading{display:block;margin-bottom:22px}.featured-heading h2{font-size:34px;max-width:400px}.featured-heading .text-link{margin-top:12px;font-size:12px}.featured-project{grid-template-columns:35% 1fr;gap:21px;padding-block:24px}.featured-project+.featured-project{border-left:0;padding-left:0;border-top:1px solid var(--line-dark)}.featured-project .project-role{font-size:11px}.featured-project h3{font-size:31px}.featured-project p:not(.project-role){font-size:13px;line-height:1.7}.featured-project .text-link{font-size:12px}
 .process-list{grid-template-columns:1fr;gap:0}.process-list li{display:grid;grid-template-columns:44px 1fr;gap:0 20px;position:relative;padding-bottom:25px}.step-line{grid-row:1/3;margin:0;align-items:start;position:relative}.step-line span{width:37px;height:37px;background:var(--paper);z-index:1}.step-line i{position:absolute;width:1px;left:18px;top:39px;height:calc(100% + 25px);margin:0}.step-line i::after{display:none}.process-list li:last-child{padding-bottom:0}.process-list h3{padding-top:5px;font-size:24px;margin-bottom:6px}.process-list p{font-size:13px;max-width:40ch}
 
 .cta-grid{display:block}.cta-grid h2{font-size:33px}.cta-grid>p{font-size:14px;margin-top:20px;margin-bottom:23px}.cta-actions{flex-wrap:wrap;gap:12px}.cta-actions .button{font-size:12px;padding:12px 18px;min-height:47px}
 .site-footer{padding-block:25px 18px}.footer-top{display:block;padding-bottom:15px}.footer-top .brand img{width:62px}.footer-top .brand>span{font-size:11px}.footer-top nav{justify-content:space-between;margin-top:17px;gap:12px}.footer-top nav a{font-size:11px}.footer-bottom{display:block;padding-top:16px}.footer-bottom p{font-size:11px;line-height:1.8}.footer-bottom>div{margin-top:12px;gap:23px}.footer-bottom .to-top{margin-left:auto}.company-grid{grid-template-columns:1fr;gap:18px}.company-grid p{font-size:12px;max-width:45ch}
 .inner-hero{padding-block:17px 40px}.breadcrumb{font-size:11px;margin-bottom:25px}.inner-hero h1{font-size:clamp(34px,7.7vw,44px);max-width:16ch;line-height:1.15}.inner-hero .inner-lead{font-size:15px;line-height:1.8;margin-top:21px;max-width:50ch}
 .service-layout{display:flex;flex-direction:column-reverse;gap:40px}.service-nav{position:static;width:100%;border-top:1px solid var(--line);padding-top:28px}.service-nav>a{padding-inline:0;font-size:13px}.service-content{width:100%}.service-content h2{font-size:29px;margin-bottom:20px}.deliverables{margin-bottom:38px}.deliverables li{font-size:14px;gap:16px;padding-block:15px}.example-list p{font-size:14px}.scope-note{padding:22px}.scope-note h3{font-size:24px}.scope-note p{font-size:13px}
 .filter-bar{display:block;padding-bottom:22px;margin-bottom:25px}.filter-bar button{font-size:12px;padding:10px 14px}.filter-count{margin-top:14px;font-size:11px}.project-detail{grid-template-columns:1fr;gap:25px;padding:0 0 35px;margin-bottom:35px}.project-emblem{aspect-ratio:1.8}.project-emblem img{width:50%;max-width:210px}.project-detail h2{font-size:34px}.project-detail p:not(.eyebrow){font-size:14px}.project-links{gap:13px 26px}.project-links .text-link{font-size:12px}
 .apps-grid{gap:17px;grid-template-columns:1fr}.app-card{padding:24px;display:grid;grid-template-columns:55px 1fr;gap:0 19px;align-items:start}.app-card img{grid-row:1/5;width:55px;margin:0}.app-card h2{font-size:26px}.app-card p{font-size:13px;margin-bottom:8px}.app-card .app-status{font-size:11px;margin-bottom:8px}.app-card .text-link{margin-top:0}
 .about-layout{display:block}.about-layout h2{font-size:32px}.about-layout p:not(.eyebrow){font-size:14px}.founder-panel{border-left:0;border-top:1px solid var(--line);padding:33px 0 0;margin-top:35px}.about-services .text-link{font-size:13px}
 .resources-top{display:block;padding-bottom:38px}.resources-top h2{font-size:29px}.resource-links{border-left:0;border-top:1px solid var(--line);padding:27px 0 0;margin-top:32px}.resources-top p:not(.eyebrow){font-size:14px}.publication-heading{padding-top:37px}.publication-heading h2{font-size:30px}.publications{grid-template-columns:1fr;gap:28px}.publications article{grid-template-columns:116px 1fr;gap:24px}.publications h3{font-size:25px}.publications .text-link{font-size:11px;gap:10px}.publications .eyebrow{font-size:11px;gap:10px}.publications .eyebrow::before{width:14px}
 .contact-layout{display:flex;flex-direction:column;gap:32px}.contact-aside{position:static}.direct-email{font-size:27px}.contact-steps{display:none}.privacy-note{margin-top:23px;max-width:55ch;font-size:12px}.contact-aside .text-link{margin-top:8px}.brief-app{width:100%;border-top:1px solid var(--line);padding-top:28px}.form-fields{grid-template-columns:1fr}.field{margin-bottom:23px}.field-bottom{gap:16px}.field-bottom p{font-size:11px}.char-count{font-size:11px}.field label{font-size:13px}#brief-text{font-size:14px;padding:17px}.brief-actions{gap:10px}.brief-actions .button{font-size:11px}#brief-preview h2{font-size:32px}.prose h2{font-size:27px}.prose p{font-size:14px}.search-dialog-inner{padding:21px}.dialog-heading h2{font-size:28px}
}
@media(max-width:370px) {
 :root{--gutter:18px}.brand img{width:52px}.brand>span{font-size:11px;padding-left:10px}.brand{gap:10px}.header-tools{gap:0}.search-toggle{width:30px}.languages a{min-width:27px}.menu-toggle{padding-left:5px;padding-right:0}.hero h1{font-size:8.4vw}.hero-actions{gap:9px}.hero-actions .button{font-size:11px;gap:9px;padding-inline:11px}.hero-lead{font-size:13px}.compass-node{min-width:75px;font-size:11px}.compass-node .icon{width:25px;height:25px}.solution-card{padding-inline:14px}.solution-card:nth-child(even){padding-left:14px}.solution-card h3{font-size:21px}.solution-card>p{font-size:12px}.featured-project{gap:16px}.featured-project p:not(.project-role){font-size:12px}.cta-actions .button{font-size:11px;gap:13px;padding-inline:14px}.filter-bar>div{gap:5px}.filter-bar button{font-size:11px;padding-inline:11px}
}
@media(prefers-reduced-motion:reduce) {
 html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}
}
@media(forced-colors:active) {
 .button,.compass-node,.icon-button,.filter-bar button{border:1px solid ButtonText}.compass-lines{stroke:CanvasText}.compass-lines .point{fill:CanvasText}.hero-landscape{display:none}.eyebrow{color:CanvasText}
}
@media print {
 .site-header,.site-footer,.hero-landscape,.compass,.search-dialog,.brief-actions,.menu-toggle,.search-toggle,.filter-bar{display:none!important}body,.dark{background:white!important;color:black!important}.dark p,p{color:black!important}.container{width:100%}.section{padding-block:24px}.hero-grid{display:block;min-height:0}.hero h1{font-size:40px}.hero h1>span{color:black!important}.hero-actions{display:none}.service-layout,.contact-layout{display:block}.service-nav{position:static}.project-detail,.app-card{break-inside:avoid}a{text-decoration:underline}textarea{border:1px solid black}
}
@media (max-width:700px) {
 .hero-actions .button {flex:1;min-width:0;gap:10px;padding-inline:12px}
 .hero-actions .button span {max-width:19ch}
}
/* A ratio-constrained compass must not impose a minimum grid width at 320px. */
.compass {min-width:0}
@media (max-width:700px) {
 .hero-grid {grid-template-columns:minmax(0,1fr)}
 .compass {min-height:0}
}
/* Readability pass. Keep real labels legible rather than shrinking them to fit. */
.compass-node {letter-spacing:.065em}
.eyebrow,.hero .eyebrow,.featured-heading .eyebrow,.cta-grid .eyebrow,.project-role,.featured-project .project-role,
.footer-top nav a,.footer-bottom p,.footer-bottom>div,.company-details summary,
.languages a,.app-card .app-status,.publications .eyebrow,.brand>span,.footer-top .brand>span {font-size:11px}
.hero-actions .button {font-size:12px}
@media(max-width:700px) {
 .compass-node {font-size:11px;letter-spacing:.02em;min-width:88px;line-height:1.35}
 .hero-actions .button {font-size:11px}
 .brand>span,.footer-top .brand>span {font-size:11px}
 
}
@media(max-width:430px) {
 .header-inner .brand>span {display:none}
 .header-inner .brand img {width:75px}
}

/* 2026-09-24 integration: visible company facts, in-development apps */
.company-heading {font-family:var(--body);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--light-text);padding-top:16px;margin:0}
.company-grid {grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));gap:20px 30px}
.company-grid p {overflow-wrap:anywhere}
.company-boundary {font-size:12px;color:var(--light-text);padding-bottom:18px;max-width:80ch}
.dev-apps {margin-top:64px;border-top:1px solid var(--line);padding-top:40px}
.dev-apps-heading {max-width:62ch;margin-bottom:28px}
.dev-apps-heading h2 {font-size:clamp(28px,3vw,40px);margin-bottom:12px}
.dev-apps-heading>p:last-child {color:var(--muted)}
.dev-app-list {list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));border-top:1px solid var(--line)}
.dev-app-list li {padding:22px 24px 24px 0;border-bottom:1px solid var(--line);min-width:0}
.dev-app-list h3 {font-size:23px;margin-bottom:8px}
.dev-app-list p {font-size:14px;color:var(--muted);margin-bottom:12px}
.dev-app-list .app-status {font-size:11px;color:var(--gold-ink);letter-spacing:.04em}

/* lead-rule: the gold hairline that used to sit under a kicker now opens the heading itself */
.hero-copy h1::before,.inner-hero h1::before,.section-heading h2::before,.featured-heading h2::before,
.ethos h2::before,.purpose-grid h2::before,.cta-grid h2::before,.dev-apps-heading h2::before,.publication-heading h2::before,
.about-layout>div>h2::before {content:"";display:block;width:48px;height:1px;background:var(--gold-strong);margin-bottom:24px}
.dark h1::before,.dark h2::before {background:var(--gold)}
.eyebrow.meta {margin:8px 0 16px}
.eyebrow.meta::before {display:none}

/* motion-2026-09-24 */
/* One language: gold hairlines draw, rings turn slowly, one light travels the orbit.
   Transform and opacity only; each ring is its own composited layer. */
:root {--ease-out:cubic-bezier(.23,1,.32,1);--orbit:24s}
.ring {position:absolute;inset:0;width:100%;height:100%;stroke:var(--gold);stroke-width:.65;opacity:.82;z-index:-1;pointer-events:none}
.ring .point {fill:var(--gold);stroke:none}
.ring-pulse {opacity:1}
.ring-pulse .pulse {stroke-width:1.6;stroke-dasharray:16 344;stroke-linecap:round}
.ring-pulse .pulse-glow {stroke-width:5;stroke-dasharray:22 338;stroke-dashoffset:3;stroke-linecap:round;opacity:.22}
.step-line span,.company-grid p,.filter-count,.char-count {font-variant-numeric:tabular-nums}
.filter-bar button {transition:transform .16s var(--ease-out),background .2s,border-color .2s}
.filter-bar button:active {transform:scale(.97)}
.supported-by {margin-inline:auto 0}
.supported-by a {text-decoration:underline;text-underline-offset:3px;min-height:auto;display:inline}
.supported-by span {opacity:.8}
.footer-bottom {flex-wrap:wrap}
@media(max-width:700px){.supported-by{margin-inline:0}}
@keyframes orbit-cw {to {transform:rotate(360deg)}}
@keyframes orbit-ccw {to {transform:rotate(-360deg)}}
@keyframes ring-in {from {opacity:0}}
@keyframes node-in {from {opacity:0}}
.motion .ring {will-change:transform}
.motion .ring-outer {animation:ring-in .9s var(--ease-out) both,orbit-cw 160s linear infinite}
.motion .ring-mid {animation:ring-in .9s var(--ease-out) .12s both,orbit-ccw 220s linear infinite}
.motion .ring-inner {animation:ring-in .9s var(--ease-out) .24s both,orbit-cw 120s linear infinite}
.motion .ring-pulse {animation:ring-in .6s var(--ease-out) .9s both,orbit-cw var(--orbit) linear infinite}
.motion .compass-node {animation:node-in .7s var(--ease-out) both}
.motion .node-ai {animation-delay:.35s}.motion .node-training {animation-delay:.45s}.motion .node-research {animation-delay:.55s}
.motion .node-evaluation {animation-delay:.65s}.motion .node-workflows {animation-delay:.75s}
/* The light reaches each node where it sits on the ring (clockwise from 3 o'clock). */
.compass-node:hover .icon,.compass-node:focus-visible .icon {opacity:1}
.compass.is-paused .ring,.compass.is-paused .icon {animation-play-state:paused}
/* Hairlines draw once when their heading enters; content itself never waits. */
.motion .rule::before {transform:scaleX(0);transform-origin:left center;transition:transform .9s var(--ease-out)}
.motion .rule.in-view::before {transform:none}
.motion .hero-landscape {will-change:transform}

/* orbit-nodes-2026-09-24 */
/* Nodes travel the orbit (JS sets transform on the upright node box; nothing inside it rotates
   except the icon's own gentle sway). The light's arrival is computed per frame from the
   pulse animation's clock, so it still meets each node wherever the node is. */
@keyframes icon-sway {from {transform:rotate(-9deg)} to {transform:rotate(9deg)}}
.motion .compass-node {will-change:transform}
.motion .compass-node .icon {opacity:.72;animation:icon-sway 6.5s ease-in-out infinite alternate}
.motion .node-training .icon {animation-delay:-1.3s}.motion .node-research .icon {animation-delay:-2.6s}
.motion .node-evaluation .icon {animation-delay:-3.9s}.motion .node-workflows .icon {animation-delay:-5.2s}
.motion .compass.is-held .compass-node .icon,.motion .compass.is-paused .compass-node .icon {animation-play-state:paused}

/* night-2026-09-24 */
/* One night from top to bottom: a fixed backdrop (the mountain photo at its native aspect,
   extended upward by a gradient of the same palette, never stretched), a navy veil whose
   density changes by section, gold hairlines between sections. Paper survives as ink. */
:root {
  --paper:#15303f; --ink:#eef2f1; --muted:#bccad0; --line:#34505f;
  --gold-ink:#d3b780; --focus:#d3b780; --error:#f2a99f; --success:#a3d8bf;
  --veil:color-mix(in srgb,var(--navy) 84%,transparent);
  --veil-deep:color-mix(in srgb,var(--navy) 72%,transparent);
  --glass:color-mix(in srgb,#1e3c4d 62%,transparent);
}
html {background:var(--navy-deep)}
body {background:transparent;color:var(--ink)}
body::before {content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;
  background:url('../img/mountains.webp') center bottom/100% auto no-repeat,
             linear-gradient(180deg,var(--navy-deep) 0%,var(--navy) 55%,#1a3342 100%)}
main>section,.site-footer {background:var(--veil)}
main>section.dark {background:var(--veil-deep)}
main>section.hero {background:transparent}
main>section+section,.site-footer {border-top:1px solid color-mix(in srgb,var(--gold) 26%,transparent)}
.site-header {background:color-mix(in srgb,var(--navy) 92%,transparent)}
.app-card,.search-dialog,.founder-panel,.scope-note,.project-emblem {background:var(--glass)}
.search-dialog {background:var(--paper)}
p,.footnote,.section-heading>p {color:var(--muted)}
h1,h2,h3,h4 {color:var(--ink)}
.dark p {color:var(--light-text)}
.button-outline {color:var(--ink);border-color:color-mix(in srgb,var(--ink) 55%,transparent)}
.button-outline:hover,.button-ink,.filter-bar button[aria-pressed="true"] {background:var(--ink);color:var(--navy);border-color:var(--ink)}
.button-ink:hover {background:var(--gold);border-color:var(--gold);color:var(--navy)}
.filter-bar button {color:var(--ink)}
.field input,.field select,.field textarea,#brief-text,#search-input {background:var(--navy-deep);color:var(--ink);border-color:var(--line)}
::placeholder {color:#9fb0b8;opacity:1}
.skip-link {background:var(--ink);color:var(--navy)}
@media print {body::before{display:none}html,main>section,.site-footer{background:white!important}}
@media(forced-colors:active){body::before{display:none}}
/* The side list crowds the orbit on narrower screens; its words live on in the philosophy section. */
@media(max-width:1250px){.compass-aside{display:none}}
/* At tablet width the quote was clipped by the hero edge and sat on the research node. */
/* 1001-1180px: the quote sits in the orbit's lower-right path and the tall 'Training and workshops' node cannot clear it, so it goes with the aside */
@media(max-width:1180px){.compass-quote{display:none}}

/* purpose: why OIV exists; replaces the project showcase on the home page */
.purpose {padding-block:64px}
.purpose-grid {display:grid;grid-template-columns:.85fr 1.6fr;gap:64px;align-items:start}
.purpose-grid h2 {font-size:38px;line-height:1.1;max-width:300px}
.purpose-text>p {font-size:15px;line-height:1.85;color:var(--light-text);max-width:66ch;margin:0}
.purpose-principles {list-style:none;margin:36px 0 0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:28px}
.purpose-principles li {border-top:1px solid var(--gold);padding-top:14px;font-family:var(--display);font-size:18px;line-height:1.4;color:#eef2f1}
@media(max-width:1000px){.purpose-grid{grid-template-columns:1fr;gap:26px}.purpose-grid h2{max-width:none}}
@media(max-width:700px){.purpose{padding-block:52px}.purpose-grid h2{font-size:32px}.purpose-text>p{font-size:14px}.purpose-principles{grid-template-columns:1fr;gap:18px;margin-top:28px}}

/* ethos band: title over its paragraph on the left; the four values share their first word,
   set once in gold italic, the rest as serif lines on hairlines */
.ethos {display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(40px,7vw,112px);align-items:center}
.ethos h2 {font-size:clamp(34px,3.2vw,46px);line-height:1.08}
.ethos-copy>p {margin:26px 0 0;font-size:15px;line-height:1.85;max-width:52ch;color:var(--light-text)}
.ethos-values {margin:0}
.ethos .ethos-lead {font-family:var(--display);font-style:italic;font-size:21px;line-height:1;color:var(--gold);margin:0 0 14px}
.ethos-values ul {list-style:none;margin:0;padding:0}
.ethos-values li {font-family:var(--display);font-size:clamp(21px,1.9vw,27px);line-height:1.25;color:#eef2f1;padding:13px 0;border-top:1px solid var(--line-dark)}
.ethos-values li:last-child {border-bottom:1px solid var(--line-dark)}
@media(max-width:1000px){.ethos{grid-template-columns:1fr;gap:40px}.ethos-values{max-width:560px}}
@media(max-width:700px){.ethos h2{font-size:32px}.ethos-copy>p{font-size:14px;margin-top:22px}.ethos-values li{font-size:21px;padding:11px 0}}

/* motion-cycle-2026-09-24 */
/* Two slow loops in the site's one motion idiom (a single gold light, hairlines that draw).
   Words never move; only aria-hidden layers do. Transform/opacity only. JS adds .is-paused
   offscreen and in hidden tabs; reduced motion and no-JS keep the static state below. */
/* Values: the 2x2 title is a cycle read clockwise from the lower left, People first. */
.ethos h2 .cycle {position:relative;display:inline-grid;grid-template-columns:auto auto;gap:.08em .4em;padding:.3em .5em .38em;margin-left:-.5em}
.cycle-w {position:relative;justify-self:start}
/* The track opens this heading, so the lead hairline steps aside (one frame, not two). */
.ethos h2:has(.cycle)::before {display:none}
.cycle-w::after {content:"";position:absolute;left:0;right:0;bottom:.04em;height:1px;background:var(--gold);transform:scaleX(0);transform-origin:left center}
.cycle-w:nth-child(3)::after {transform:none}
.cycle-track {position:absolute;inset:-12px;overflow:hidden;pointer-events:none}
.cycle-track::before {content:"";position:absolute;inset:12px;border:1px solid color-mix(in srgb,var(--gold) 34%,transparent)}
.cycle-light {position:absolute;inset:12px;transform:translate(0,100%)}
.cycle-light::before {content:"";position:absolute;left:-3.5px;top:-3.5px;width:7px;height:7px;border-radius:50%;background:var(--gold)}
@keyframes cycle-light {0%,10% {transform:translate(0,100%)} 25%,35% {transform:translate(0,0)} 50%,60% {transform:translate(100%,0)} 75%,85% {transform:translate(100%,100%)} 100% {transform:translate(0,100%)}}
@keyframes cycle-mark {0% {transform:scaleX(0)} 4%,11% {transform:scaleX(1)} 17%,100% {transform:scaleX(0)}}
.motion .cycle-light {animation:cycle-light 12s cubic-bezier(.65,0,.35,1) infinite}
.motion .cycle-w::after {animation:cycle-mark 12s var(--ease-out) infinite backwards}
.motion .cycle-w:nth-child(1)::after {animation-delay:3s}
.motion .cycle-w:nth-child(2)::after {animation-delay:6s}
.motion .cycle-w:nth-child(4)::after {animation-delay:9s}
@media(max-width:700px){.ethos h2 .cycle{font-size:min(32px,7.6vw);margin-left:-.35em;padding-inline:.35em}}
/* Process: a gold hairline draws 01 to 05, each ring answers as it arrives, then a rest. */
.step-line span {position:relative}
.step-line span::after {content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid var(--gold);opacity:0}
/* The connector's dimness moves from element opacity into its colour, so the light can be full gold. */
.step-line i {opacity:1;background:color-mix(in srgb,var(--gold-strong) 60%,transparent)}
.step-line i::after {border-color:color-mix(in srgb,var(--gold-strong) 60%,transparent)}
.step-line i b {position:absolute;inset:-1px 0;overflow:hidden}
.step-line i b::before {content:"";position:absolute;inset:1px 0;background:var(--gold);transform:scaleX(0);transform-origin:left center}
@keyframes step-ring {0% {opacity:0;transform:scale(.86)} 4%,10% {opacity:1;transform:none} 20%,100% {opacity:0;transform:none}}
@keyframes step-flow {0% {transform:scaleX(0);opacity:1} 13% {transform:scaleX(1);opacity:1} 19%,100% {transform:scaleX(1);opacity:0}}
@keyframes step-flow-y {0% {transform:scaleY(0);opacity:1} 13% {transform:scaleY(1);opacity:1} 19%,100% {transform:scaleY(1);opacity:0}}
.motion .step-line span::after {animation:step-ring 11s var(--ease-out) infinite backwards}
.motion .step-line i b::before {animation:step-flow 11s cubic-bezier(.65,0,.35,1) .35s infinite backwards}
.motion .process-list li:nth-child(2) span::after {animation-delay:1.8s}.motion .process-list li:nth-child(2) b::before {animation-delay:2.15s}
.motion .process-list li:nth-child(3) span::after {animation-delay:3.6s}.motion .process-list li:nth-child(3) b::before {animation-delay:3.95s}
.motion .process-list li:nth-child(4) span::after {animation-delay:5.4s}.motion .process-list li:nth-child(4) b::before {animation-delay:5.75s}
.motion .process-list li:nth-child(5) span::after {animation-delay:7.2s}
@media(max-width:700px){.step-line i b{inset:0 -1px}.step-line i b::before{inset:0 1px;transform:scaleY(0);transform-origin:center top}.motion .step-line i b::before{animation-name:step-flow-y}}
.motion [data-loop].is-paused .cycle-light,.motion [data-loop].is-paused .cycle-w::after,.motion [data-loop].is-paused .step-line span::after,.motion [data-loop].is-paused .step-line i b::before {animation-play-state:paused}
/* Services are parallel offers, not a sequence: no autonomous loop. The icon alone steps
   forward when the reader points at or focuses its card. */
.solution-card .icon {transition:transform .22s var(--ease-out);transform-origin:50% 100%}
.solution-card:focus-within .icon {transform:translateY(-3px) scale(1.06)}
@media(hover:hover) and (pointer:fine){.solution-card:hover .icon{transform:translateY(-3px) scale(1.06)}}
@media(forced-colors:active){.cycle-track,.step-line i b{display:none}}/* motion-a11y-2026-09-24: WCAG 2.2.2. Each loop stops after three full laps (counted by JS on
   running time only) and settles into its end state; the hero orbit is unchanged. */
.motion [data-loop].is-done .cycle-light,.motion [data-loop].is-done .cycle-w::after,
.motion [data-loop].is-done .step-line span::after,.motion [data-loop].is-done .step-line i b::before {animation:none}
.motion .process-list.is-done .step-line span::after {opacity:1;transform:none;transition:opacity .5s var(--ease-out)}
.motion .process-list.is-done .step-line i b::before {opacity:1;transform:none;transition:transform .6s var(--ease-out)}
.motion .process-list.is-done li:nth-child(2) span::after,.motion .process-list.is-done li:nth-child(1) b::before {transition-delay:.15s}
.motion .process-list.is-done li:nth-child(3) span::after,.motion .process-list.is-done li:nth-child(2) b::before {transition-delay:.3s}
.motion .process-list.is-done li:nth-child(4) span::after,.motion .process-list.is-done li:nth-child(3) b::before {transition-delay:.45s}
.motion .process-list.is-done li:nth-child(5) span::after,.motion .process-list.is-done li:nth-child(4) b::before {transition-delay:.6s}
.motion .cycle.is-done .cycle-w:nth-child(3)::after {transition:transform .5s var(--ease-out)}