*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{min-height:100vh;background:#080808;color:#ffffffc7;font-family:Inter,system-ui,sans-serif;font-size:.9375rem;font-weight:400;line-height:1.65;-webkit-font-smoothing:antialiased}.mono{font-family:IBM Plex Mono,Courier New,monospace;font-size:.75rem;letter-spacing:.04em;text-transform:lowercase}a{color:inherit;text-decoration:none;transition:color .15s ease}a:hover{color:#fffffff2}.site-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:1.5rem;padding:1.25rem 1.75rem;background:#080808e0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid rgba(255,255,255,.06)}.site-logo{color:#ffffffeb;font-family:IBM Plex Mono,monospace;font-size:.8125rem;letter-spacing:.02em}.site-nav{display:flex;flex-wrap:wrap;gap:1.25rem}.magnetic-link{display:inline-block;transition:transform .2s ease}.site-nav a{position:relative;color:#ffffff7a}.site-nav a:after{content:"";position:absolute;left:0;bottom:-2px;width:100%;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .3s ease}.site-nav a:hover{color:#ffffffeb}.site-nav a:hover:after{transform:scaleX(1)}.site-header,main{position:relative;z-index:1}.layout{width:min(100%,42rem);margin:0 auto;padding:0 1.75rem}section{padding:5rem 0;border-bottom:1px solid rgba(255,255,255,.06)}section:last-of-type{border-bottom:none}.section-label{display:block;margin-bottom:1.75rem;color:#ffffff61}.site-footer{padding:2.5rem 0 4rem}.site-footer p{color:#ffffff52;font-family:IBM Plex Mono,monospace;font-size:.75rem}@media(min-width:640px){.site-header{padding:1.25rem 3rem}.layout{padding:0 3rem}}.hero{padding-top:6rem;padding-bottom:5.5rem}.hero__title{margin-bottom:1.5rem;color:#fffffff2;font-family:IBM Plex Mono,monospace;font-size:clamp(1.5rem,4vw,2rem);font-weight:400;letter-spacing:-.02em;line-height:1.2}.hero__lead{max-width:28rem;color:#ffffff94;font-size:1.0625rem;line-height:1.7}.section-heading{margin-bottom:1.25rem;color:#ffffffeb;font-family:IBM Plex Mono,monospace;font-size:1rem;font-weight:400}.prose{max-width:34rem;color:#ffffff9e}.prose+.prose{margin-top:1rem}.service-list{list-style:none;display:grid;gap:.85rem}.service-list li{display:flex;align-items:baseline;gap:1rem;color:#ffffffb8}.service-list__index{flex-shrink:0;width:1.5rem;color:#ffffff47;font-family:IBM Plex Mono,monospace;font-size:.75rem}.contact-block{display:grid;gap:1.5rem}.contact-block--spaced{margin-top:2rem}.contact-email{display:inline-block;padding:0;border:0;background:none;color:#ffffffeb;font-family:IBM Plex Mono,monospace;font-size:.9375rem;text-align:left;text-decoration:underline;text-decoration-color:#ffffff38;text-underline-offset:4px;cursor:pointer}.contact-email:hover{text-decoration-color:#fff9}.contact-note{max-width:30rem;color:#ffffff7a;font-size:.875rem}.page-hero{padding-top:4.5rem;padding-bottom:3rem}.page-hero__title{margin-bottom:1rem;color:#fffffff2;font-family:IBM Plex Mono,monospace;font-size:clamp(1.25rem,3vw,1.5rem);font-weight:400}.page-hero__lead{max-width:30rem;color:#ffffff8f}.enquiry-list{list-style:none;display:grid;gap:.65rem;margin-top:2rem;padding-top:2rem;border-top:1px solid rgba(255,255,255,.06)}.enquiry-list li{color:#ffffff7a;font-size:.875rem}.enquiry-list li:before{content:"-";margin-right:.75rem;color:#ffffff38}.back-link{display:inline-block;margin-top:3rem;color:#ffffff6b;font-family:IBM Plex Mono,monospace;font-size:.8125rem}.back-link:hover{color:#ffffffd9}.project-section__intro{margin-bottom:1.25rem}.project-grid{display:grid;gap:.5rem}.project-card{display:flex;align-items:center;gap:.85rem;width:100%;padding:.75rem .9rem;border:1px solid rgba(255,255,255,.08);background:#ffffff05;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:transform .3s cubic-bezier(.22,1,.36,1),border-color .3s ease,background .3s ease}.project-card:hover{transform:translate(3px);border-color:#ffffff29;background:#ffffff09}.project-card:focus-visible{outline:1px solid rgba(255,255,255,.35);outline-offset:3px}.project-card__accent{flex-shrink:0;width:.45rem;height:.45rem;border-radius:50%;background:var(--project-accent);box-shadow:0 0 10px color-mix(in srgb,var(--project-accent) 40%,transparent)}.project-card__title{flex:1;min-width:0;color:#ffffffe0;font-family:IBM Plex Mono,monospace;font-size:.8125rem;font-weight:400}.project-card__link,.project-card__status,.project-card__hint{flex-shrink:0;color:#ffffff47;font-size:.625rem;transition:color .25s ease}.project-card:hover .project-card__hint{color:#ffffff9e}.toast{position:fixed;left:50%;bottom:2rem;z-index:10000;padding:.65rem .9rem;border:1px solid rgba(255,255,255,.1);background:#0c0c0ceb;color:#ffffffb8;font-size:.75rem;transform:translate(-50%,12px);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease}.toast--visible{opacity:1;transform:translate(-50%)}@media(min-width:640px){.hero{padding-top:7rem}}body.custom-cursor,body.custom-cursor a,body.custom-cursor button{cursor:none}.ambient{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;z-index:0}.ambient__glow{position:absolute;border-radius:50%;filter:blur(80px);opacity:.35;will-change:transform}.ambient__glow--one{top:-12%;left:-8%;width:min(55vw,28rem);height:min(55vw,28rem);background:radial-gradient(circle,rgba(255,255,255,.045) 0%,transparent 70%);animation:driftOne 28s ease-in-out infinite alternate}.ambient__glow--two{right:-10%;bottom:-15%;width:min(60vw,32rem);height:min(60vw,32rem);background:radial-gradient(circle,rgba(255,255,255,.035) 0%,transparent 72%);animation:driftTwo 34s ease-in-out infinite alternate}.ambient__grid{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.035;background-image:linear-gradient(rgba(255,255,255,.5) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.5) 1px,transparent 1px);background-size:72px 72px}.cursor{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:9999;opacity:0;transition:opacity .25s ease}.cursor--visible{opacity:1}.cursor__dot,.cursor__ring{position:fixed;top:0;left:0;margin:-3px 0 0 -3px;border-radius:50%;will-change:transform}.cursor__dot{width:6px;height:6px;background:#ffffffeb}.cursor__ring{width:32px;height:32px;margin:-16px 0 0 -16px;border:1px solid rgba(255,255,255,.28);transition:width .25s ease,height .25s ease,margin .25s ease,border-color .25s ease,opacity .25s ease}.cursor--hover .cursor__ring{width:44px;height:44px;margin:-22px 0 0 -22px;border-color:#ffffff80}.scroll-progress{position:fixed;top:0;left:0;z-index:20;width:2px;height:100vh;background:#ffffff0d;pointer-events:none}.scroll-progress__fill{width:100%;height:0%;background:#ffffff6b;transform-origin:top;transition:height .12s linear}.reveal{opacity:0;transform:translateY(18px);transition:opacity .9s ease,transform .9s cubic-bezier(.22,1,.36,1)}.reveal--visible{opacity:1;transform:translateY(0)}.hero__title,.hero__lead{opacity:0;transform:translateY(14px);animation:heroIn 1s cubic-bezier(.22,1,.36,1) forwards}.hero__lead{animation-delay:.12s}body.page-enter>:not(.ambient):not(.cursor):not(.toast):not(.project-panel):not(.easter-egg):not(.scroll-progress){animation:pageEnter .42s cubic-bezier(.22,1,.36,1) both}body.page-exit>:not(.ambient):not(.cursor):not(.toast):not(.project-panel):not(.easter-egg):not(.scroll-progress){opacity:0;transform:translateY(10px);transition:opacity .32s ease,transform .32s ease}@keyframes pageEnter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes driftOne{0%{transform:translate(0) scale(1)}to{transform:translate(8vw,6vh) scale(1.08)}}@keyframes driftTwo{0%{transform:translate(0) scale(1)}to{transform:translate(-6vw,-5vh) scale(1.06)}}@keyframes heroIn{to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.ambient,.cursor,.reveal,.hero__title,.hero__lead,.scroll-progress,.project-card{animation:none!important;transition:none!important;opacity:1!important;transform:none!important}.magnetic-link{transform:none!important}}body.panel-open{overflow:hidden}.project-panel{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;pointer-events:none}.project-panel--open{pointer-events:auto}.project-panel__backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000073;opacity:0;transition:opacity .3s ease}.project-panel--open .project-panel__backdrop{opacity:1}.project-panel__drawer{position:absolute;top:0;right:0;display:flex;flex-direction:column;width:min(22rem,100%);height:100%;padding:1.25rem 1.25rem 1.5rem;border-left:1px solid rgba(255,255,255,.08);background:#0a0a0af5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transform:translate(100%);transition:transform .35s cubic-bezier(.22,1,.36,1)}.project-panel--open .project-panel__drawer{transform:translate(0)}.project-panel__header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.project-panel__label{color:#ffffff57;font-size:.6875rem}.project-panel__close{padding:0;border:0;background:none;color:#ffffff6b;font-family:IBM Plex Mono,monospace;font-size:.6875rem;cursor:pointer;transition:color .2s ease}.project-panel__close:hover{color:#ffffffd9}.project-panel__content{display:grid;gap:1rem;overflow-y:auto}.project-panel__preview{position:relative;overflow:hidden;aspect-ratio:16 / 10;border:1px solid rgba(255,255,255,.06);background:radial-gradient(circle at 20% 20%,rgba(255,255,255,.08),transparent 45%),linear-gradient(145deg,var(--project-accent),#080808)}.project-panel__initial{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#ffffff2e;font-family:IBM Plex Mono,monospace;font-size:2.5rem}.project-panel__title{color:#fffffff2;font-family:IBM Plex Mono,monospace;font-size:1rem;font-weight:400}.project-panel__status{margin-top:-.35rem;color:#ffffff61;font-size:.6875rem}.project-panel__description{color:#ffffff9e;font-size:.875rem;line-height:1.65}.project-panel__stack{display:flex;flex-wrap:wrap;gap:.5rem;color:#ffffff57;font-size:.6875rem}.project-panel__stack span{padding:.2rem .45rem;border:1px solid rgba(255,255,255,.08)}.project-panel__link{display:inline-block;margin-top:.25rem;color:#ffffffb8;font-family:IBM Plex Mono,monospace;font-size:.75rem;text-decoration:underline;text-decoration-color:#fff3;text-underline-offset:3px}.project-panel__link:hover{color:#fffffff2;text-decoration-color:#ffffff80}@media(prefers-reduced-motion:reduce){.project-panel__backdrop,.project-panel__drawer{transition:none}.project-panel--open .project-panel__drawer{transform:translate(0)}}.easter-egg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;pointer-events:none}.easter-egg--open{pointer-events:auto}.easter-egg__backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;opacity:0;transition:opacity .3s ease}.easter-egg--open .easter-egg__backdrop{opacity:1}.easter-egg__card{position:absolute;left:50%;top:50%;width:min(20rem,calc(100% - 2rem));padding:1.25rem;border:1px solid rgba(255,255,255,.1);background:#0a0a0af5;transform:translate(-50%,calc(-50% + 12px));opacity:0;transition:opacity .35s ease,transform .35s cubic-bezier(.22,1,.36,1)}.easter-egg--open .easter-egg__card{opacity:1;transform:translate(-50%,-50%)}.easter-egg__close{position:absolute;top:1rem;right:1rem;padding:0;border:0;background:none;color:#ffffff6b;font-family:IBM Plex Mono,monospace;font-size:.6875rem;cursor:pointer}.easter-egg__close:hover{color:#ffffffd9}.easter-egg__label{display:block;margin-bottom:.85rem;color:#ffffff57;font-size:.6875rem}.easter-egg__title{margin-bottom:.75rem;color:#fffffff2;font-family:IBM Plex Mono,monospace;font-size:1rem;font-weight:400}.easter-egg__note{margin-bottom:1.25rem;color:#ffffff9e;font-size:.875rem;line-height:1.65}.easter-egg__link{color:#ffffffb8;font-size:.75rem;text-decoration:underline;text-decoration-color:#fff3;text-underline-offset:3px}.easter-egg__link:hover{color:#fffffff2}body.easter-egg-open{overflow:hidden}@media(prefers-reduced-motion:reduce){.easter-egg__backdrop,.easter-egg__card{transition:none}.easter-egg--open .easter-egg__card{opacity:1;transform:translate(-50%,-50%)}}
