/* NOMAD V1.2 — motion is a finite construction, never a background loop. */
/* The old clip-path on h1 cut the D's ink at the shortened tracking advance.
   Last-letter tracking is now zero. Only a separate opaque sheet moves. */
.home .cover-word h1{animation:none;clip-path:none;overflow:visible;transform:none;flex-shrink:0}
.wordmark-ink{display:inline-block;position:relative;isolation:isolate;overflow:visible}
.wordmark-last{letter-spacing:0}
.wordmark-ink::after{content:'';position:absolute;inset:0;background:var(--paper);z-index:1;transform-origin:top;animation:wordmark-sheet .75s var(--ease) .45s backwards;pointer-events:none;opacity:0}
.wordmark-ink::before{content:'';position:absolute;inset:auto 0 0;height:1px;background:var(--clay);transform-origin:left;animation:wordmark-rule 1.65s var(--ease) .15s backwards;opacity:0}
@keyframes wordmark-sheet{0%{opacity:1;transform:scaleY(1)}99.9%{opacity:1}100%{opacity:0;transform:scaleY(0)}}
@keyframes wordmark-rule{0%{opacity:0;transform:scaleX(0)}25%,60%{opacity:.8;transform:scaleX(1)}100%{opacity:0;transform:scaleX(1)}}
.home .draft-grid,.home .draft-ticks{animation:registration-in .2s ease-out backwards}
@keyframes registration-in{from{opacity:0}}
.construction-axis{stroke:var(--clay);stroke-width:1.4;opacity:.65}
.home .construction-axis{stroke-dasharray:1;animation:axis-in .5s var(--ease) .15s backwards}
@keyframes axis-in{from{stroke-dashoffset:1;opacity:0}to{stroke-dashoffset:0;opacity:.65}}
.home .draw-line{animation:draft-in .7s var(--ease) .35s backwards}
.home .n-plane{animation:plane-in .7s var(--ease) .35s backwards}
@keyframes plane-in{from{opacity:0;transform:translate(8px,-8px)}to{opacity:.95;transform:none}}
.home .cover-copy{animation:appear .65s var(--ease) .7s backwards}
.home .site-header nav{animation:appear .55s var(--ease) .95s backwards}
.home .cover-services{animation:appear .6s var(--ease) 1.1s backwards}
.home .cover-bottom{animation:appear .5s var(--ease) 1.25s backwards}
/* Shared workshop drawing. Its four states have different construction logic. */
.construction{--scene-paper:var(--paper)}
.construction svg{overflow:visible}
.drawing{transform-box:view-box;transform-origin:300px 210px;transition:opacity .22s ease,transform .4s var(--ease)}
.drawing:not(.drawing-base){transform:translateY(5px) scale(.98)}
.construction[data-mode] .drawing-base{transform:none}
.construction:not([data-mode=base]) .drawing-base{transform:scale(.97);opacity:0}
.scene-paper{fill:var(--scene-paper)}.scene-fill{fill:#e4e5dd}.scene-solid{fill:var(--blue)}
.traced{stroke-dasharray:1;stroke-dashoffset:0}
.construction[data-mode=web] .web-shell{animation:trace .55s var(--ease) both}
.construction[data-mode=web] .web-chrome{animation:module-in .4s var(--ease) .13s backwards}
.construction[data-mode=web] .web-block{animation:module-in .5s var(--ease) backwards}
.web-block-one{--dx:0px;--dy:12px;animation-delay:.2s!important}.web-block-two{--dx:18px;--dy:0px;animation-delay:.29s!important}.web-block-three{--dx:0px;--dy:10px;animation-delay:.38s!important}
@keyframes trace{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes module-in{from{opacity:0;transform:translate(var(--dx,0px),var(--dy,8px))}to{opacity:1;transform:none}}
.construction[data-mode=flow] .flow-connection{animation:trace .8s var(--ease) .12s backwards}
.construction[data-mode=flow] .flow-node{animation:module-in .6s var(--ease) backwards}
.flow-node-one{--dx:-24px;--dy:12px}.flow-node-two{--dx:0px;--dy:-30px;animation-delay:.12s!important}.flow-node-three{--dx:34px;--dy:-20px;animation-delay:.23s!important}.flow-node-four{--dx:15px;--dy:26px;animation-delay:.34s!important}
.construction[data-mode=systems] .system-frame{animation:trace .7s var(--ease) .12s backwards}
.construction[data-mode=systems] .system-module{animation:module-in .7s var(--ease) backwards}
.module-top{--dx:0px;--dy:-24px}.module-side{--dx:-35px;--dy:0px;animation-delay:.08s!important}.module-main{--dx:34px;--dy:-8px;animation-delay:.18s!important}.module-bottom{--dx:16px;--dy:30px;animation-delay:.28s!important}
.construction[data-mode=care] .care-adjust{animation:care-align .65s var(--ease) both}
@keyframes care-align{from{transform:translate(7px,-9px) rotate(2deg);transform-origin:235px 156px}to{transform:none}}
.care-scan{stroke:var(--clay);stroke-width:1;opacity:0}
.construction[data-mode=care] .care-scan{animation:care-inspect .75s var(--ease) .12s both}
@keyframes care-inspect{0%{opacity:0;transform:translateY(0)}20%,80%{opacity:.8}100%{opacity:0;transform:translateY(254px)}}
.construction[data-mode=care] .care-addition{animation:module-in .5s var(--ease) .5s backwards}
.care-lock{stroke:var(--clay);stroke-width:1}
.construction[data-mode=care] .care-lock{animation:trace .55s var(--ease) .42s backwards}
.scene-caption{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1.5rem;align-items:baseline;border-top:1px solid var(--line);padding-top:.8rem;margin:0 8%}
.scene-coordinate{font-size:.625rem;letter-spacing:.1em;color:var(--clay)}
.scene-caption .drawing-caption{text-align:right;font-size:.6875rem}
.scene-copy{grid-column:1/-1;font-size:.8125rem;color:var(--muted);line-height:1.55;min-height:2.6em}
.cover-object .scene-caption{border:0;padding:0;display:block;text-align:center}
.cover-object .scene-coordinate,.cover-object .scene-copy{display:none}
.cover-object .drawing-caption{text-align:center}
.service-entry{min-width:0;position:relative}
.service-entry>a{height:100%}
.service-entry>a:focus-visible{outline-offset:-4px;background:#e9e5dc}
.service-entry[data-selected=true]>a{background:#e9e5dc;text-decoration:none}
.service-number{transition:color .2s ease}.service-entry[data-selected=true] .service-number{color:var(--ink)}
.service-arrow{transition:transform .3s var(--ease)}
.scene-preview{position:absolute;right:0;top:50%;transform:translateY(-50%);width:44px;height:44px;border:0;border-left:1px solid var(--line);background:transparent;color:var(--blue);padding:12px;display:none}
.scene-preview svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.2}
.scene-preview[aria-pressed=true]{background:var(--blue);color:var(--paper)}
.scene-preview:focus-visible{outline-offset:-3px}
/* A converging editorial spread; text is always present, even before JS. */
.brothers{position:relative;overflow:visible}
.brothers .terrain,.brothers .building{transform:none}
.motion-ready .brothers:not(.has-converged) .terrain{transform:translateX(-2vw)}
.motion-ready .brothers:not(.has-converged) .building{transform:translateX(2vw)}
.brothers.has-converged .terrain,.brothers.has-converged .building{transition:transform 1.1s var(--ease)}
.motion-ready .brothers:not(.has-converged) .convergence path{stroke-dasharray:1;stroke-dashoffset:1}
.brothers.has-converged .convergence path{stroke-dasharray:1;animation:trace 1.2s var(--ease) both}
.brothers.has-converged .convergence circle{animation:registration-in .35s ease .6s backwards}
.between{position:relative;isolation:isolate;padding-top:1rem}
.between::before{content:'';display:block;width:1px;height:36px;background:var(--clay);margin:0 auto 1rem;transform-origin:top}
.brothers.has-converged .between::before{animation:product-join .65s var(--ease) .55s backwards}
.brothers.has-converged .between em{animation:product-read .65s var(--ease) .7s backwards}
@keyframes product-join{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes product-read{from{color:var(--muted);border-color:transparent}to{color:var(--blue);border-color:var(--clay)}}
/* Large typographic portal; same SVG grammar, different annotations. */
.services-index{align-items:start}
.services-object{margin-top:0;top:2rem}
.services-object svg{max-height:400px}
.large-services>.service-entry>a{position:relative;transition:background .2s ease}
.large-services>.service-entry>a::after{content:'';height:1px;background:var(--clay);position:absolute;inset:auto 0 0;transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease)}
.large-services>.service-entry[data-selected=true]>a::after,.large-services>.service-entry>a:focus-visible::after{transform:scaleX(1)}
/* Portfolio: the project name leads, its actual status never disappears. */
.project-meta{display:grid;grid-template-columns:1fr auto auto;gap:.75rem 2rem;align-items:baseline;padding:1.5rem 0}
.project-id{grid-column:1/-1;color:var(--muted)}
.project-meta h2{font-family:Manrope,sans-serif;font-size:clamp(2.4rem,4.5vw,4.6rem);letter-spacing:-.055em;grid-column:1;grid-row:2}
.project-discipline{grid-column:2;grid-row:2}.project-year{grid-column:3;grid-row:2}
.project-meta strong{grid-column:1/-1;margin-left:0;font-size:.6875rem;letter-spacing:.12em}
.project-note{font-family:Cardo,serif;font-size:clamp(2rem,3.2vw,3rem);line-height:1.15}
.project-image-link{perspective:1600px}
.project-image-link img{transform:translateY(0) rotateX(1.5deg);transform-origin:center bottom;transition:transform .65s var(--ease),box-shadow .65s var(--ease)}
.project-image-link:is(:hover,:focus-visible) img{transform:translateY(-6px) rotateX(0);box-shadow:0 18px 30px -24px #172f3b66}
.project-image-link::before,.project-image-link::after{content:'';position:absolute;width:24px;height:24px;border-color:var(--clay);border-style:solid;pointer-events:none;z-index:1;transition:transform .4s var(--ease)}
.project-image-link::before{left:1.5rem;top:1.5rem;border-width:1px 0 0 1px}
.project-image-link::after{right:1.5rem;bottom:1.5rem;border-width:0 1px 1px 0}
.project-image-link:is(:hover,:focus-visible)::before{transform:translate(5px,5px)}
.project-image-link:is(:hover,:focus-visible)::after{transform:translate(-5px,-5px)}
/* Signature: no clipping on the ink, zero trailing tracking on the D.
   A separate sheet reveals the word; the complete panel exits as one object. */
.signature-curtain{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;background:var(--blue);color:var(--paper);visibility:hidden;pointer-events:none;transform:none;overflow:hidden}
.signature-frame{position:relative;width:92vw;display:flex;justify-content:center;align-items:center;padding:3.5vh 0}
.signature-word{position:relative;display:inline-block;font-family:Manrope,Arial,sans-serif;font-weight:550;font-size:min(23vw,55vh);line-height:1.08;letter-spacing:-.08em;white-space:nowrap;overflow:visible;clip-path:none}
.signature-last{letter-spacing:0}
.signature-word::after{content:'';position:absolute;inset:-1px;background:var(--blue);opacity:0;transform-origin:top;pointer-events:none}
.signature-rule{position:absolute;left:0;width:100%;height:1px;background:var(--paper);opacity:.35;transform-origin:left}
.signature-rule-top{top:0}.signature-rule-bottom{bottom:0}
.signature-axis{position:absolute;top:-5vh;bottom:-5vh;left:50%;width:1px;background:var(--paper);opacity:.15;transform-origin:top}
.signature-label{position:absolute;bottom:4vh;left:4vw;font-size:clamp(.6rem,1vw,.8rem);letter-spacing:.12em}
.signature-leaving .signature-curtain{visibility:visible;pointer-events:auto;animation:signature-cover .16s var(--ease) both}
.signature-leaving .signature-word::after{animation:signature-ink .16s var(--ease) .12s both}
.signature-leaving .signature-rule{animation:signature-line .22s var(--ease) .06s both}
.signature-leaving .signature-axis{animation:signature-axis .22s var(--ease) .06s both}
.signature-arriving .signature-curtain{visibility:visible;pointer-events:auto}
.signature-release .signature-curtain{animation:signature-release .32s var(--ease) both}
@keyframes signature-cover{from{transform:translateY(100%)}to{transform:translateY(0)}}
@keyframes signature-ink{0%{opacity:1;transform:scaleY(1)}99%{opacity:1}100%{opacity:0;transform:scaleY(0)}}
@keyframes signature-line{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes signature-axis{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes signature-release{from{transform:translateY(0)}to{transform:translateY(-100%)}}
/* The direct-entry home sequence stays V1.2; an internal arrival plays only the signature. */
.signature-visit .home .cover-word *, .signature-visit .home .cover-word *::before,.signature-visit .home .cover-word *::after,
.signature-visit .home .cover-copy,.signature-visit .home .site-header nav,.signature-visit .home .cover-services,.signature-visit .home .cover-bottom,
.signature-visit .home .draft-grid,.signature-visit .home .draft-ticks,.signature-visit .home .construction-axis,.signature-visit .home .draw-line,.signature-visit .home .n-plane{animation:none}
html[data-motion=reduced] .signature-curtain{display:none!important}
@media(prefers-reduced-motion:reduce){.signature-curtain{display:none!important}}
@media(hover:none),(pointer:coarse){.scene-preview:not([hidden]){display:block}.service-entry>a{padding-right:52px!important}.service-entry .service-arrow{visibility:hidden}.service-entry .service-description{grid-column:2/-1}}
@media(max-width:650px){
 .scene-preview:not([hidden]){display:block}.service-entry>a{padding-right:50px!important}.service-entry .service-arrow{visibility:hidden}
 .cover-object .scene-caption,.care-layout .scene-caption{display:none}
 .cover-services>.service-entry>a{column-gap:.4rem}
 .services-index{display:flex;flex-direction:column;gap:1.5rem}
 .services-object{display:block;position:sticky;order:-1;width:100%;margin:0;top:0;z-index:3;background:var(--paper);padding:.5rem 0;border-bottom:1px solid var(--line)}
 .services-object svg{height:170px}
 .services-object .scene-copy{min-height:0;font-size:.75rem}
 .large-services{width:100%}
 .large-services>.service-entry>a,.large-services>.service-entry+.service-entry>a{padding-top:1.1rem;padding-bottom:1.1rem}
 .large-services .service-name{font-size:2.4rem}
 .scene-caption{margin:0;gap:.5rem}
 .motion-ready .brothers:not(.has-converged) .terrain{transform:translateX(-2vw)}
 .motion-ready .brothers:not(.has-converged) .building{transform:translateX(2vw)}
 .brothers .convergence{display:block;height:90px;margin:1.5rem 0 -1rem;overflow:hidden}
 .convergence svg{height:150px;width:100%}
 .brothers .building{margin-top:0;padding-top:1rem;border-top:0}
 .between::before{margin:0 0 1rem;height:24px}
 .project-meta{grid-template-columns:1fr auto;gap:.6rem 1rem}
 .project-meta h2{grid-column:1/-1;font-size:2.6rem}
 .project-discipline{grid-column:1;grid-row:3}.project-year{grid-column:2;grid-row:3}
 .project-meta strong{grid-row:4}
 .project-note{font-size:1.75rem;margin-bottom:1rem}
 .project-image-link::before{top:.5rem;left:.5rem}.project-image-link::after{bottom:3.5rem;right:.5rem}
}
/* Immediate readable final state, including when preference changes at runtime. */
html[data-motion=reduced] .wordmark-ink::before,html[data-motion=reduced] .wordmark-ink::after{display:none}
html[data-motion=reduced] .brothers article,html[data-motion=reduced] .drawing,html[data-motion=reduced] .project-image-link img{transform:none!important}
html[data-motion=reduced] .convergence path{stroke-dashoffset:0!important}
@media(prefers-reduced-motion:reduce){.wordmark-ink::before,.wordmark-ink::after{display:none}.brothers article,.drawing,.project-image-link img{transform:none!important}.convergence path{stroke-dashoffset:0!important}}
