@font-face{font-family:'IBM Plex Sans';src:url('./assets/plex-sans-regular.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'IBM Plex Sans';src:url('./assets/plex-sans-medium.woff2') format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:'IBM Plex Sans';src:url('./assets/plex-sans-semibold.woff2') format('woff2');font-weight:600 800;font-display:swap}
:root{--canvas:#111d3c;--ink:#152342;--deep:#0b142a;--paper:#f0f3fa;--text:#f5f7ff;--muted:#bcc9e4;--accent:#a9c5ff;--action-text:#111d3c;--line:#657698;--paper-line:#b3bed3;--paper-muted:#4c5b76;--paper-hover:#dfe7f5;--ease:cubic-bezier(.16,1,.3,1);color-scheme:dark;scroll-behavior:smooth;scroll-padding-top:2rem}
:root[data-theme="ivory"]{--canvas:#f5f0e7;--ink:#2b251d;--deep:#e9e1d3;--paper:#fffaf2;--text:#2b251d;--muted:#655847;--accent:#8b411e;--action-text:#fff7ef;--line:#aa9680;--paper-line:#c7b9a6;--paper-muted:#655847;--paper-hover:#eee2d0;color-scheme:light}
:root[data-theme="violet"]{--canvas:#241b36;--ink:#33223f;--deep:#1b1329;--paper:#f4effb;--text:#f7f2ff;--muted:#d2c2e3;--accent:#d6b7ff;--action-text:#241b36;--line:#8b729f;--paper-line:#cbbbd8;--paper-muted:#66506f;--paper-hover:#e7daf3}
:root[data-theme="graphite"]{--canvas:#202225;--ink:#252628;--deep:#16181b;--paper:#f0f0ef;--text:#f6f5f2;--muted:#c2c2bf;--accent:#ecc28a;--action-text:#202225;--line:#797b7b;--paper-line:#bcbeba;--paper-muted:#565955;--paper-hover:#e1e2de}

*{box-sizing:border-box}body{margin:0;background:var(--canvas);color:var(--text);font-family:'IBM Plex Sans',sans-serif;font-size:1rem;line-height:1.65;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit}button,a,summary{-webkit-tap-highlight-color:transparent}button{cursor:pointer}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-weight:400;line-height:1.1;text-wrap:balance}em{font-style:normal;font-weight:500}svg{width:1.25rem;height:1.25rem;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}::selection{background:var(--accent);color:var(--action-text)}:focus-visible{outline:2px solid currentColor;outline-offset:6px}body{scrollbar-color:var(--accent) var(--canvas)}.wrap{max-width:1440px;margin-inline:auto;padding-inline:clamp(1.4rem,5.3vw,5rem)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;top:-7rem;left:1rem;padding:.75rem 1rem;background:var(--accent);color:var(--action-text);z-index:30}.skip-link:focus{top:1rem}.site-header{display:flex;align-items:center;justify-content:space-between;min-height:116px;gap:2rem;position:relative;z-index:10}.wordmark{font-size:1.13rem;font-weight:600;letter-spacing:-.025em;white-space:nowrap}.brand-period{color:var(--accent);font-size:1.5rem}.site-header nav{display:flex;gap:1.8rem;margin-left:auto;align-items:center;font-size:.875rem}.site-header nav a{padding-block:.6rem;transition:none}.site-header nav a:hover{color:var(--accent)}.nav-contact{display:flex;align-items:center;gap:1rem;margin-left:1rem;border-bottom:1px solid var(--line)}.menu-toggle{display:none;color:inherit;background:none;border:1px solid var(--line);padding:.5rem .8rem;align-items:center;gap:.6rem}.menu-toggle[hidden]{display:none}.hero{position:relative;min-height:680px;display:flex;align-items:flex-start;padding-top:92px;padding-bottom:108px;isolation:isolate}.hero-copy{width:65%;position:relative;z-index:2;pointer-events:none}.hero-copy a{pointer-events:auto}h1{font-weight:500;font-size:clamp(3.2rem,5.5vw,5.4rem);letter-spacing:-.03em;line-height:1.08;white-space:nowrap}h1 em{color:var(--accent);font-size:1em;letter-spacing:-.03em}.hero-intro{font-size:1.04rem;color:var(--muted);line-height:1.85;max-width:420px;margin-top:2rem}.button{margin-top:2rem;display:inline-flex;align-items:center;gap:2rem;background:var(--accent);color:var(--action-text);border:1px solid var(--accent);border-radius:3px;padding:.95rem 1.25rem;font-size:.9rem;font-weight:600;transition:transform .25s var(--ease)}.button:hover{background:var(--text);color:var(--canvas);border-color:var(--text);transform:translateY(-2px)}.button svg{width:1.5rem}.hero-art{position:absolute;right:0;top:35px;width:59%;height:540px;z-index:0;display:flex;align-items:center;justify-content:center;overflow:hidden}.art-motion{width:100%;transform:translate3d(var(--art-x,0px),var(--art-y,0px),0) rotate(var(--art-r,0deg));transition:transform 1.6s var(--ease);will-change:transform}.sculpture{width:100%;height:auto;max-height:550px;display:block;object-fit:contain;mask-image:radial-gradient(ellipse closest-side,#000 62%,transparent 100%);animation:float 12s ease-in-out infinite}.hero-art figcaption{position:absolute;bottom:0;right:10%;font-size:.75rem;color:var(--muted);letter-spacing:.01em}.hero-bottom{position:absolute;bottom:0;left:clamp(1.4rem,5.3vw,5rem);right:clamp(1.4rem,5.3vw,5rem);border-top:1px solid var(--line);padding:1.35rem 0 1.8rem;display:flex;justify-content:space-between;gap:1rem;align-items:center}.hero-bottom p{font-size:.78rem;color:var(--muted);display:flex;gap:1rem;flex-wrap:wrap}.hero-bottom p span{color:var(--muted)}.motion-toggle{display:flex;gap:.5rem;align-items:center;padding:.35rem .2rem;border:0;background:none;color:var(--muted);font-size:.75rem;white-space:nowrap}.motion-toggle[hidden]{display:none}.motion-toggle svg{width:.85rem;height:.85rem}.motion-toggle:hover{color:var(--accent)}.light-section{color:var(--ink);background:var(--paper);color-scheme:light}.practice{padding-block:110px 88px}.practice-layout{display:grid;grid-template-columns:1.05fr 1fr;gap:6rem}h2{font-size:clamp(2.6rem,3.35vw,3.4rem);letter-spacing:-.035em;line-height:1.12}h2 em{font-size:1em}.section-intro p{max-width:375px;margin-top:1.5rem;color:var(--paper-muted);font-size:1rem;line-height:1.85}.practice-list{border-top:1px solid var(--paper-line)}details{border-bottom:1px solid var(--paper-line)}summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.65rem 0}summary::-webkit-details-marker{display:none}summary h3{font-size:1.3rem;font-weight:600;letter-spacing:-.025em}.detail-sign{position:relative;width:1rem;height:1rem;flex-shrink:0}.detail-sign:before,.detail-sign:after{content:'';position:absolute;background:var(--ink);left:0;top:50%;height:1px;width:100%;transition:transform .3s var(--ease)}.detail-sign:after{transform:rotate(90deg)}details[open] .detail-sign:after{transform:rotate(0)}.detail-body{padding:0 2rem 1.7rem 0}.detail-body p{color:var(--paper-muted);font-size:.95rem;line-height:1.8}.practice-topics{display:block;margin-top:1.2rem;font-size:.78rem;color:var(--paper-muted)}.work{padding-block:30px 100px}.section-heading{display:flex;justify-content:space-between;gap:2rem;align-items:end;margin-bottom:2.8rem}.section-heading p{color:var(--paper-muted);font-size:.9rem}.work-list{border-top:1px solid var(--ink)}.work-row{display:grid;grid-template-columns:1fr 1.25fr .8fr 40px;gap:2rem;align-items:center;border-bottom:1px solid var(--paper-line);padding:2rem 0;transition:none}.work-row:hover{background:var(--paper-hover)}.work-name{font-size:1.6rem;letter-spacing:-.035em}.work-description{font-size:.9rem;color:var(--paper-muted);max-width:280px}.work-category{font-size:.75rem;color:var(--paper-muted);justify-self:end;border:1px solid var(--paper-line);border-radius:100px;padding:.3rem .65rem;white-space:nowrap}.work-arrow{display:grid;place-items:center;width:38px;height:38px;border-radius:100px;border:1px solid var(--paper-line);transition:transform .3s var(--ease)}.work-row:hover .work-arrow{background:var(--ink);color:var(--paper);transform:rotate(45deg)}.text-link{display:inline-flex;align-items:center;gap:1rem;font-size:.9rem;border-bottom:1px solid var(--paper-line);padding-block:.45rem}.text-link:hover{border-color:var(--ink)}.all-work{margin-top:2.2rem}.about{background:var(--deep);padding-block:110px}.about-layout{display:grid;grid-template-columns:1.15fr 1fr;gap:6rem}.about-title h2{max-width:600px}.about-title em{color:var(--accent)}.signature{display:block;margin-top:2.7rem;font-weight:500;font-size:1.2rem;letter-spacing:-.02em;color:var(--muted)}.about-copy p{color:var(--muted);font-size:1rem;line-height:1.85}.about-copy p+p{margin-top:1.5rem}.about-copy .about-belief{color:var(--text);font-size:1.15rem;margin-top:2rem}.contact{padding-block:100px 110px;display:flex;justify-content:space-between;align-items:end;gap:3rem}.contact h2{font-size:clamp(3.5rem,5.7vw,5.4rem)}.contact h2 em{color:var(--accent)}.contact p{font-size:.9rem;color:var(--muted);margin-top:1.7rem}.contact-link{display:flex;align-items:center;gap:2rem;padding-bottom:1rem;border-bottom:1px solid var(--muted);margin-bottom:3px;font-size:1.15rem;transition:none}.contact-link:hover{color:var(--accent);border-color:var(--accent)}.contact-link svg{width:1.8rem;height:1.8rem}.site-footer{display:flex;align-items:center;justify-content:space-between;gap:2rem;position:relative;padding-block:1.8rem;font-size:.75rem;color:var(--muted)}.site-footer:before{content:'';position:absolute;top:0;left:clamp(1.4rem,5.3vw,5rem);right:clamp(1.4rem,5.3vw,5rem);height:1px;background:var(--line)}.site-footer a{display:flex;align-items:center;gap:.6rem}.site-footer svg{width:1rem;height:1rem}@keyframes float{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-15px) rotate(2deg)}}@keyframes arrive{from{clip-path:inset(0 0 14% 0);transform:translateY(12px)}to{clip-path:inset(0);transform:translateY(0)}}.hero h1{animation:arrive 1.4s var(--ease) both}.motion-paused *, .motion-paused *:before,.motion-paused *:after{animation-play-state:paused!important;scroll-behavior:auto!important}.motion-paused .art-motion{transform:none;transition:none}
@media(min-width:1500px){.hero-art{right:20px}.hero{min-height:740px;padding-top:120px}.hero-art{top:65px}}
@media(max-width:1100px){.site-header nav{gap:1.5rem}.hero{min-height:640px;padding-top:72px}.hero-art{top:50px;width:59%;height:460px}.hero-intro{max-width:360px}.practice-layout,.about-layout{gap:3rem}.work-row{gap:1.2rem;grid-template-columns:1.1fr 1.2fr .85fr 36px}.work-name{font-size:1.35rem}.contact-link{font-size:1rem;gap:1rem}}
@media(max-width:760px){.site-header{min-height:90px;gap:1rem}.wordmark{font-size:1rem}.menu-toggle:not([hidden]){display:flex;font-size:.85rem}.site-header nav{flex-wrap:wrap;gap:.5rem 1.2rem;font-size:.8rem;justify-content:flex-end}.js .site-header nav{display:none;position:absolute;top:79px;left:1.4rem;right:1.4rem;background:var(--paper);color:var(--ink);padding:1.2rem;box-shadow:0 12px 24px #00000025;border-radius:4px}.js .site-header nav.is-open{display:flex;flex-direction:column;align-items:stretch;gap:.3rem}.site-header nav a{padding:.65rem .5rem}.site-header .nav-contact{margin:0;justify-content:space-between}.site-header nav a:hover{color:var(--ink)}.hero{display:block;min-height:0;padding-top:45px;padding-bottom:0}.hero-copy{width:100%}h1{font-size:clamp(2.65rem,8.1vw,4rem);line-height:1.12}.hero-intro{max-width:430px;font-size:1rem;margin-top:1.6rem;line-height:1.8}.button{margin-top:1.6rem}.hero-art{position:relative;right:auto;top:auto;width:calc(100% + 2.8rem);margin-inline:-1.4rem;margin-top:0;height:350px}.art-motion{max-width:640px}.hero-art figcaption{right:1.4rem;bottom:12px;font-size:.7rem}.hero-bottom{position:relative;left:auto;right:auto;padding-block:1.2rem;align-items:flex-start;gap:1rem}.hero-bottom p{font-size:.7rem;max-width:230px;gap:.25rem .7rem}.motion-toggle{font-size:.7rem}.practice{padding-block:70px 50px}.practice-layout{grid-template-columns:1fr;gap:2.6rem}h2{font-size:2.65rem}.section-intro p{max-width:470px}.work{padding-block:25px 65px}.section-heading{display:block;margin-bottom:2rem}.section-heading p{margin-top:1rem}.work-row{grid-template-columns:1fr auto;gap:.55rem 1rem;position:relative;padding-block:1.5rem}.work-name{font-size:1.45rem}.work-description{grid-column:1;grid-row:2;max-width:100%;font-size:.85rem}.work-category{grid-column:1;grid-row:3;justify-self:start;border:0;padding:0;margin-top:.45rem;font-size:.7rem}.work-arrow{grid-column:2;grid-row:1 / 4}.about{padding-block:70px}.about-layout{grid-template-columns:1fr;gap:2.5rem}.signature{margin-top:1.6rem}.contact{padding-block:65px 75px;display:block}.contact h2{font-size:clamp(3.3rem,9vw,4.4rem)}.contact-link{margin-top:2.2rem;display:inline-flex;gap:2rem;font-size:1.1rem}.site-footer{flex-wrap:wrap;gap:.8rem 1rem;justify-content:space-between}.site-footer>span:nth-child(2){width:100%;order:3;font-size:.7rem}.site-footer a{margin-left:auto}}
@media(max-width:380px){h1{font-size:10vw}.hero-art{height:300px}.hero-bottom p{max-width:195px;gap:.2rem .4rem}.hero-intro{font-size:.95rem}.site-header{gap:.5rem}.wordmark{font-size:.9rem}h2{font-size:2.35rem}.contact h2{font-size:3.05rem}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.art-motion{transform:none!important}}

/* Appearance stays available beside navigation, including on small screens. */
.header-controls{display:flex;align-items:center;gap:.65rem}
.style-picker{position:relative;border:0}
.style-picker[hidden]{display:none}
.style-picker>summary{padding:.55rem .8rem;border:1px solid var(--line);gap:.55rem;font-size:.875rem;min-height:44px}
.style-picker>summary svg{width:1rem;height:1rem}
.style-picker[open]>summary{background:var(--text);color:var(--canvas)}
.style-panel{position:absolute;top:calc(100% + 12px);right:0;width:340px;padding:20px;background:var(--paper);color:var(--ink);box-shadow:0 12px 30px #00000030}
.style-panel h2{font-size:1.2rem;font-weight:500;letter-spacing:-.015em;margin-bottom:16px}
.theme-options{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.theme-option{padding:10px;text-align:left;background:transparent;color:var(--ink);border:1px solid var(--paper-line);border-radius:4px;line-height:1.35}
.theme-option[aria-pressed="true"]{outline:2px solid var(--ink);outline-offset:1px}
.theme-option:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
.theme-option:hover{background:var(--paper-hover)}
.theme-sample{height:64px;padding:10px;display:flex;align-items:end;justify-content:space-between;font-size:1.7rem;font-weight:500;margin-bottom:10px;background:var(--sample-bg);color:var(--sample-text)}
.theme-sample i{width:28px;height:8px;background:currentColor}
.theme-option[data-theme="cobalt"]{--sample-bg:#111d3c;--sample-text:#a9c5ff}
.theme-option[data-theme="ivory"]{--sample-bg:#f5f0e7;--sample-text:#8b411e}
.theme-option[data-theme="violet"]{--sample-bg:#241b36;--sample-text:#d6b7ff}
.theme-option[data-theme="graphite"]{--sample-bg:#202225;--sample-text:#ecc28a}
.theme-name{display:flex;align-items:center;justify-content:space-between;font-weight:500;font-size:.9rem}
.theme-name svg{width:.85rem;height:.85rem;visibility:hidden}
.theme-option[aria-pressed="true"] .theme-name svg{visibility:visible}
.theme-description{display:block;font-size:.75rem;color:var(--paper-muted);margin-top:4px}
.style-note{font-size:.78rem;color:var(--paper-muted);margin-top:16px;line-height:1.5}
.sculpture{filter:grayscale(1)}
@media(max-width:1100px){.site-header{gap:1rem}.site-header nav{gap:1rem}.nav-contact{margin-left:0}}
@media(max-width:760px){.header-controls{margin-left:auto}.style-panel{position:fixed;top:82px;right:1.4rem;width:min(340px,calc(100vw - 2.8rem))}.style-picker>summary{padding:.5rem .65rem;font-size:.8rem}.menu-toggle:not([hidden]){min-height:44px}.site-header nav{margin-left:0}.sculpture{max-height:430px}}
@media(max-width:380px){.wordmark{font-size:.85rem}.wordmark>span:not(.brand-period){display:block}.brand-period{display:none}.header-controls{gap:.4rem}.style-panel{right:1.2rem;width:calc(100vw - 2.4rem)}.theme-description{font-size:.72rem}}

:root[data-theme="ivory"] .sculpture{filter:grayscale(1) invert(1)}
:root[data-theme="ivory"] .hero-art{mix-blend-mode:multiply}

/* A compact logic puzzle replaces the decorative hero image. */
.hero-copy{width:54%}
h1{font-size:clamp(3.2rem,5.2vw,5rem)}
.hero-puzzle{position:absolute;top:36px;right:clamp(1.4rem,5.3vw,5rem);width:40%;max-width:490px}
.hero-puzzle h2{font-size:1.15rem;font-weight:500;letter-spacing:-.015em;line-height:1.35}
.puzzle-intro{font-size:.85rem;line-height:1.6;color:var(--muted);margin-top:.65rem;max-width:330px}
.puzzle-unavailable{color:var(--muted);font-size:.9rem;margin-top:2rem}
.puzzle-interactive[hidden]{display:none}
.puzzle-board{position:relative;width:100%;aspect-ratio:400 / 360;margin-block:16px 8px}
.puzzle-lines{position:absolute;inset:0;width:100%;height:100%;stroke:var(--muted);stroke-width:1.6;pointer-events:none}
.puzzle-lines line{vector-effect:non-scaling-stroke}
.puzzle-lines .is-crossed{stroke:var(--accent);stroke-dasharray:5 5}
.puzzle-point{position:absolute;transform:translate(-50%,-50%);width:46px;height:46px;border:1px solid var(--muted);border-radius:50%;background:var(--canvas);color:var(--text);font-size:1rem;font-weight:500;padding:0;display:grid;place-items:center}
.puzzle-point:hover{border-color:var(--accent);background:var(--deep)}
.puzzle-point[aria-pressed="true"]{background:var(--accent);color:var(--action-text);border:3px double var(--action-text);outline:2px solid var(--accent);outline-offset:3px}
.puzzle-point:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
.puzzle-point[aria-disabled="true"]{cursor:default}
.is-solved .puzzle-lines{stroke:var(--accent);stroke-width:2}
.puzzle-status{min-height:3.2em;font-size:.85rem;line-height:1.5;color:var(--muted)}
.is-solved .puzzle-status{color:var(--accent)}
.puzzle-controls{display:flex;align-items:center;gap:1rem;border-top:1px solid var(--line);padding-top:6px}
.puzzle-controls button{min-height:44px;background:none;color:var(--text);border:0;font-size:.8rem;padding:.5rem .1rem}
.puzzle-controls button:hover{color:var(--accent);text-decoration:underline;text-underline-offset:4px}
.puzzle-controls button:disabled{color:var(--muted);opacity:.55;cursor:default;text-decoration:none}
.puzzle-controls .puzzle-next{margin-left:auto;display:flex;align-items:center;gap:.75rem}
.puzzle-next svg{width:1rem;height:1rem}
@media(min-width:1500px){.hero-puzzle{top:54px}}
@media(max-width:1100px) and (min-width:761px){.hero{min-height:660px}.hero-puzzle{top:48px;width:39%}.puzzle-board{margin-top:26px}}
@media(max-width:760px){.hero-copy{width:100%}h1{font-size:clamp(2.65rem,8.1vw,4rem)}.hero-puzzle{position:relative;top:auto;right:auto;width:100%;max-width:480px;margin:3.5rem auto 2rem}.puzzle-board{max-width:390px;margin:20px auto 8px}.puzzle-intro{max-width:350px}.puzzle-status{min-height:3em}}
@media(max-width:380px){h1{font-size:10vw}.hero-puzzle{margin-top:3rem}.puzzle-point{width:44px;height:44px}.puzzle-controls{gap:1.1rem}}

.puzzle-lines .is-crossed{animation:signal 4s linear infinite}
@keyframes signal{to{stroke-dashoffset:-40}}
/* Let the full puzzle determine hero height so its controls never overlap the footer. */
.hero{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:center;gap:clamp(2rem,4vw,5rem);min-height:0;padding-top:46px;padding-bottom:140px}
.hero-copy{width:100%}
.hero-puzzle{position:relative;top:auto;right:auto;width:100%;max-width:460px;justify-self:end}
@media(max-width:900px){.hero{display:block;padding-top:45px;padding-bottom:0}.hero-copy{width:100%}.hero-puzzle{max-width:480px;margin:3.5rem auto 2rem}.puzzle-board{max-width:390px;margin:20px auto 8px}.hero-bottom{position:relative;left:auto;right:auto;padding-block:1.2rem}.hero-intro{max-width:430px}}
