@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');

:root{color-scheme:dark;--ink:#e9f0e8;--muted:#a6b6ae;--faint:#70847b;--bg:#0a1714;--panel:#11241e;--panel-2:#162e25;--line:rgba(206,232,211,.15);--accent:#bee6b6;--accent-ink:#0b2018;--shell:1200px;--ease:cubic-bezier(.2,.75,.25,1)}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:110px;overflow-x:clip}
body{margin:0;min-width:320px;background:var(--bg);color:var(--ink);font:400 1rem/1.65 'DM Sans',system-ui,sans-serif;overflow-x:clip}
body::before{content:"";position:absolute;inset:0 0 auto;height:850px;pointer-events:none;background:radial-gradient(ellipse 63% 65% at 78% 28%,rgba(78,142,91,.14),transparent 70%),radial-gradient(ellipse 50% 55% at 5% 12%,rgba(57,130,82,.10),transparent 76%);z-index:-1}
a{color:inherit;text-decoration:none}button,select{font:inherit}::selection{background:#9cdbab;color:#0a1714}
.shell{width:min(calc(100% - 80px),var(--shell));margin-inline:auto}.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;clip-path:inset(50%)}.skip-link{position:absolute;z-index:20;top:8px;left:8px;padding:10px 14px;background:var(--accent);color:var(--accent-ink);transform:translateY(-160%)}.skip-link:focus{transform:none}
:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.site-header{position:sticky;top:0;z-index:10;background:rgba(10,23,20,.86);border-bottom:1px solid var(--line);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}.header-inner{min-height:82px;display:flex;align-items:center;justify-content:space-between;gap:30px}.brand{display:inline-flex;align-items:center;gap:12px;font-family:Manrope,sans-serif;font-size:1.06rem;font-weight:800;letter-spacing:-.06em;white-space:nowrap}.main-nav{display:flex;align-items:center;gap:27px;margin-inline-start:auto}.main-nav a,.language-select{font-size:.88rem;color:var(--muted);transition:color .25s}.main-nav a:hover,.main-nav a:focus-visible{color:var(--ink)}.language-select{width:146px;max-width:100%;border:1px solid var(--line);border-radius:9px;background:#13251f;padding:9px 28px 9px 12px;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Cpath d='m3 5 4 4 4-4' fill='none' stroke='%23b9cdbf' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center}.language-select:hover{border-color:rgba(190,230,182,.48);color:var(--ink)}
.hero{position:relative;min-height:min(820px,calc(100svh - 82px));display:grid;grid-template-columns:minmax(0,1.4fr) minmax(300px,.6fr);gap:clamp(35px,7vw,110px);align-items:center;padding-block:104px 105px}.hero-copy{max-width:730px}.eyebrow,.section-index,.project-topline,.note-index,.note-flow,.note-signature,.hero-bottom,.summary-foot,.stack-number,.about-details span,.contact-mail>span:first-child{font:500 .75rem/1.5 'DM Mono',monospace;letter-spacing:.12em}.eyebrow{display:flex;align-items:center;gap:11px;color:var(--accent);margin:0 0 32px}.signal{width:7px;height:7px;flex:none;border-radius:50%;background:#9bdbab;box-shadow:0 0 15px #9bdbab}.hero h1{margin:0;font:500 clamp(3.9rem,8.5vw,8rem)/.98 Manrope,system-ui,sans-serif;letter-spacing:-.085em}.hero h1>span:first-child{font-size:.43em;font-weight:500;letter-spacing:-.06em;color:var(--muted);line-height:1.7}.hero-name{display:inline-block;max-width:11ch;text-wrap:balance}.period{color:var(--accent)}.hero-lead{font:400 clamp(1.2rem,1.75vw,1.55rem)/1.55 'DM Sans',sans-serif;letter-spacing:-.02em;max-width:630px;color:#c5d2c7;margin:37px 0 35px}.hero-links{display:flex;align-items:center;gap:29px;flex-wrap:wrap}.button{display:inline-flex;align-items:center;gap:25px;justify-content:space-between;padding:13px 19px;border-radius:9px;font-size:.95rem;font-weight:700;transition:transform .3s var(--ease),background .3s,color .3s}.button-primary{background:var(--accent);color:var(--accent-ink)}.button-primary:hover{transform:translateY(-3px);background:#d5f4cb}.button span,.text-link span{margin-inline-start:10px}.text-link{font-size:.94rem;font-weight:600;border-bottom:1px solid rgba(234,240,232,.34);padding-bottom:4px;transition:color .3s,border-color .3s}.text-link:hover{color:var(--accent);border-color:var(--accent)}
.hero-note{position:relative;align-self:center;margin-top:40px;border:1px solid rgba(190,230,182,.2);border-radius:16px;padding:26px 28px 24px;background:linear-gradient(155deg,rgba(28,58,45,.92),rgba(12,33,26,.92));box-shadow:0 26px 90px rgba(0,0,0,.18);transform:rotate(2deg)}.hero-note::after{content:"";position:absolute;top:14px;right:-12px;bottom:-14px;left:12px;border:1px solid rgba(181,224,172,.10);border-radius:17px;z-index:-1}.note-top{display:flex;justify-content:space-between;align-items:center;color:var(--faint)}.note-star{color:var(--accent);font-size:1.4rem}.note-quote{font:500 clamp(1.5rem,2.25vw,2.12rem)/1.35 Manrope,sans-serif;letter-spacing:-.045em;margin:40px 0 52px}.note-flow{display:flex;align-items:center;gap:7px;letter-spacing:0;font-size:.61rem;color:#b8c9bc;white-space:nowrap}.note-flow i{width:10px;height:1px;background:#668475;flex:none}.note-signature{margin:30px 0 0;color:var(--accent);letter-spacing:0}.hero-bottom{position:absolute;bottom:38px;left:0;right:0;display:flex;align-items:center;gap:16px;color:var(--faint);font-size:.67rem}.hero-rule{height:1px;background:var(--line);flex:1}
.section{padding-block:126px}.section-heading{max-width:760px;margin-bottom:58px}.section-index{margin:0 0 22px;color:var(--accent)}h2{font:500 clamp(2.5rem,4.7vw,4.8rem)/1.1 Manrope,sans-serif;letter-spacing:-.065em;margin:0}.section-heading>p:last-child{color:var(--muted);font-size:1.1rem;max-width:630px;margin:21px 0 0}.work-section{background:#0d1e19;border-block:1px solid var(--line)}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}.project-card{border:1px solid var(--line);border-radius:16px;background:#10251e;overflow:hidden;transition:border-color .35s,transform .4s var(--ease),box-shadow .4s var(--ease)}.project-card:hover{transform:translateY(-7px);border-color:rgba(190,230,182,.35);box-shadow:0 22px 45px rgba(0,0,0,.15)}.project-art{height:290px;position:relative;overflow:hidden;padding:25px;background:#274337}.project-art::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 76% 20%,rgba(202,242,187,.19),transparent 50%);pointer-events:none}.project-art-bobby{background:linear-gradient(145deg,#345346,#1b322b 75%)}.project-art-verify{background:linear-gradient(150deg,#253d40,#14292c 75%)}.art-label{font:800 clamp(4.8rem,9vw,8rem)/1 Manrope,sans-serif;letter-spacing:-.09em;color:rgba(237,247,231,.11);position:absolute;bottom:13px;left:19px}.art-detail{position:absolute;top:24px;right:24px;color:#c8dacb;font:500 .67rem 'DM Mono',monospace;letter-spacing:.12em}.art-window{position:absolute;top:62px;left:50%;width:min(66%,300px);height:190px;background:#dce9d8;border-radius:9px;transform:translateX(-50%) rotate(-5deg);box-shadow:15px 20px 35px #07170e70;padding:16px}.window-top{display:flex;gap:5px;margin-bottom:30px}.window-top b{display:block;width:7px;height:7px;border-radius:50%;background:#728d78}.ticket-row{height:12px;border-radius:3px;background:#b1c8b4;width:78%;margin:0 0 12px}.ticket-row.short{width:48%}.ticket-stamp{position:absolute;right:22px;bottom:15px;width:49px;height:49px;border-radius:9px;background:#6e9d79;display:grid;place-items:center;color:#eaffdf;font:800 1.7rem Manrope}.verify-symbol{position:absolute;top:67px;left:50%;transform:translateX(-50%) rotate(8deg);width:150px;height:150px;border:1px solid rgba(189,229,201,.47);border-radius:30px;display:grid;place-items:center;box-shadow:0 25px 40px rgba(4,18,18,.32),inset 0 0 55px rgba(144,224,190,.1)}.verify-symbol span{font-size:5.5rem;font-weight:600;color:#bbebc7;line-height:1}.verify-line{position:absolute;left:15%;bottom:29px;height:1px;width:70%;background:#7ea69b77}.verify-line.small{left:33%;bottom:21px;width:35%}.project-body{padding:29px 31px 30px}.project-topline{display:flex;justify-content:space-between;color:var(--accent);font-size:.65rem}.project-body h3{margin:14px 0 8px;font:600 1.65rem Manrope,sans-serif;letter-spacing:-.05em}.project-body p{margin:0;min-height:80px;color:var(--muted);font-size:.98rem}.project-bottom{display:flex;justify-content:space-between;align-items:flex-end;gap:15px;margin-top:29px}.tag-list{display:flex;flex-wrap:wrap;gap:7px}.tag-list span{border:1px solid var(--line);border-radius:5px;padding:5px 9px;color:#b9c9bf;font:500 .73rem/1.3 'DM Mono',monospace;white-space:nowrap}.icon-link{display:grid;place-items:center;flex:none;width:38px;height:38px;border:1px solid rgba(190,230,182,.34);border-radius:50%;font-size:1.2rem;transition:background .25s,color .25s,transform .25s}.icon-link:hover{background:var(--accent);color:var(--accent-ink);transform:rotate(45deg)}.all-work{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-top:28px;border-bottom:1px solid var(--line);padding:16px 3px 20px;color:var(--accent);font-weight:600;transition:padding .3s,border-color .3s}.all-work:hover{padding-inline:10px;border-color:var(--accent)}
.recent-repos{margin-top:84px;padding-top:39px;border-top:1px solid var(--line)}.repos-heading{display:flex;align-items:start;justify-content:space-between;gap:30px;margin-bottom:26px}.repos-heading .section-index{margin-bottom:9px;font-size:.65rem}.repos-heading h3{margin:0;font:600 clamp(1.75rem,2.7vw,2.7rem)/1.15 Manrope,sans-serif;letter-spacing:-.055em}.repos-heading p:last-child{margin:9px 0 0;color:var(--muted);font-size:.91rem}.repo-live{color:var(--accent);white-space:nowrap;font:500 .63rem 'DM Mono',monospace;letter-spacing:.1em;padding-top:8px}.repo-live::before{content:"";display:inline-block;width:6px;height:6px;background:var(--accent);border-radius:50%;margin-inline-end:8px;vertical-align:2px}.repo-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.repo-card{position:relative;display:grid;grid-template-columns:1fr auto;grid-template-rows:30px auto auto;gap:8px;padding:22px;border:1px solid var(--line);border-radius:10px;background:#10251e;min-height:148px;transition:background .25s,border-color .25s,transform .25s}.repo-card:hover{background:#183329;border-color:rgba(190,230,182,.45);transform:translateY(-3px)}.repo-symbol{color:var(--accent);font-size:1.18rem}.repo-card strong{grid-column:1/-1;overflow-wrap:anywhere;font:600 1.13rem Manrope,sans-serif;letter-spacing:-.035em}.repo-card>span:nth-last-child(2){grid-column:1/-1;color:var(--muted);font-size:.78rem}.repo-card-arrow{position:absolute;right:22px;top:20px;font-size:1.1rem;color:var(--accent)}.repo-status{min-height:1em;color:var(--faint);font-size:.77rem;margin:12px 0 0}html[dir="rtl"] .repo-card-arrow{left:22px;right:auto}
.practice-section{background:var(--bg)}.practice-layout{display:grid;grid-template-columns:minmax(260px,.72fr) minmax(0,1.28fr);gap:clamp(40px,7vw,100px);align-items:start}.practice-summary{position:sticky;top:120px;min-height:390px;border:1px solid var(--line);border-radius:16px;padding:30px;display:flex;flex-direction:column;justify-content:space-between;background:radial-gradient(circle at 85% 0%,rgba(169,223,164,.18),transparent 53%),#14281f}.summary-glyph{font:400 3.2rem Manrope,sans-serif;color:var(--accent);letter-spacing:-.15em}.practice-summary p{font:500 clamp(1.5rem,2.1vw,2.1rem)/1.36 Manrope,sans-serif;letter-spacing:-.045em;margin:25px 0}.summary-foot{color:#97b09e;font-size:.64rem}.stack-row{padding:23px 0 28px;border-top:1px solid var(--line)}.stack-row:last-child{border-bottom:1px solid var(--line)}.stack-row>div:first-child{display:flex;align-items:baseline;gap:23px}.stack-number{color:var(--accent);font-size:.67rem}.stack-row h3{font:600 1.34rem Manrope,sans-serif;letter-spacing:-.035em;margin:0}.stack-row p{margin:9px 0 16px 43px;color:var(--muted);font-size:.9rem}.stack-row .tag-list{margin-left:43px}.exploring{display:grid;grid-template-columns:240px 1fr;gap:15px 40px;margin-top:80px;padding:26px 29px;border:1px dashed rgba(190,230,182,.3);border-radius:14px;background:rgba(21,44,33,.47)}.exploring>div:first-child{display:flex;align-items:center;gap:13px}.exploring h3{margin:0;font:600 1.25rem Manrope,sans-serif;letter-spacing:-.04em}.exploring-mark{color:var(--accent);font-size:1.5rem}.exploring p{margin:0;color:var(--muted);font-size:.93rem}.exploring .tag-list{grid-column:2}
.about-section{background:#e9efe7;color:#15241b}.about-layout{display:grid;grid-template-columns:minmax(260px,.9fr) minmax(0,1.1fr);gap:clamp(50px,10vw,150px)}.about-section .section-index{color:#4d7756}.about-title h2{max-width:560px}.about-line{height:1px;width:70%;background:#a6bca7;margin-top:45px}.about-copy{padding-top:45px;color:#425448}.about-large{font:500 clamp(1.4rem,2vw,1.95rem)/1.47 Manrope,sans-serif;letter-spacing:-.035em;color:#1b3526;margin:0 0 30px}.about-copy>p:nth-child(2){font-size:1.04rem;line-height:1.8;margin:0}.about-details{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin-top:44px;padding-top:25px;border-top:1px solid #c3d1c3}.about-details div{display:grid;gap:8px}.about-details span{color:#65816b;font-size:.65rem}.about-details strong{font-size:.91rem;font-weight:600;color:#263a2c}
.contact-section{padding-block:124px;background:radial-gradient(ellipse 60% 115% at 100% 0,rgba(85,149,99,.17),transparent 70%),#10271e}.contact-layout{display:flex;justify-content:space-between;align-items:end;gap:45px}.contact-layout>div{max-width:620px}.contact-layout h2{font-size:clamp(2.7rem,5vw,5rem)}.contact-layout p:last-child{font-size:1.07rem;color:var(--muted);max-width:540px;margin:21px 0 0}.contact-mail{position:relative;display:grid;gap:6px;min-width:min(100%,365px);border-bottom:1px solid var(--accent);padding:0 50px 18px 0;transition:padding .3s}.contact-mail:hover{padding-left:8px}.contact-mail>span:first-child{font-size:.64rem;color:var(--accent)}.contact-mail strong{font:600 clamp(1rem,2vw,1.5rem) Manrope,sans-serif;letter-spacing:-.04em;overflow-wrap:anywhere}.mail-arrow{position:absolute;right:0;bottom:21px;font-size:1.4rem;color:var(--accent)}.site-footer{background:#081510;border-top:1px solid var(--line);padding:25px 0;color:var(--faint);font-size:.82rem}.footer-inner,.footer-inner>div{display:flex;align-items:center;justify-content:space-between;gap:30px}.footer-inner a:hover{color:var(--accent)}
html.is-loading main,html.is-loading .site-header,html.is-loading .site-footer{opacity:0}main,.site-header,.site-footer{transition:opacity .45s ease}.has-js .reveal{opacity:0;transform:translateY(28px);transition:opacity .75s var(--ease),transform .75s var(--ease)}.has-js .reveal.is-visible{opacity:1;transform:translateY(0)}.project-grid .reveal:nth-child(2){transition-delay:.1s}.hero-copy{animation:hero-enter .85s var(--ease) both}.hero-note{animation:note-enter 1s .17s var(--ease) both}.is-loading .hero-copy,.is-loading .hero-note{animation-play-state:paused}@keyframes hero-enter{from{opacity:0;transform:translateY(25px)}to{opacity:1;transform:translateY(0)}}@keyframes note-enter{from{opacity:0;transform:translateY(25px) rotate(0)}to{opacity:1;transform:translateY(0) rotate(2deg)}}
html[dir="rtl"] .language-select{background-position:left 9px center;padding:9px 12px 9px 28px}html[dir="rtl"] .project-art .art-detail{left:24px;right:auto}html[dir="rtl"] .project-art .art-label{right:19px;left:auto}html[dir="rtl"] .stack-row p,html[dir="rtl"] .stack-row .tag-list{margin-left:0;margin-right:43px}html[dir="rtl"] .contact-mail{padding:0 0 18px 50px}html[dir="rtl"] .mail-arrow{right:auto;left:0}html[dir="rtl"] .note-flow{direction:ltr;justify-content:flex-end}html[dir="rtl"] .hero-note{transform:rotate(-2deg)}html[dir="rtl"] .hero-note::after{right:12px;left:-12px}html[dir="rtl"] .hero-note{animation-name:note-enter-rtl}@keyframes note-enter-rtl{from{opacity:0;transform:translateY(25px) rotate(0)}to{opacity:1;transform:translateY(0) rotate(-2deg)}}
@media(max-width:1000px){.hero{grid-template-columns:1fr;min-height:auto;padding-top:90px;gap:30px}.hero-note{width:min(100%,530px);margin:20px 0 30px 5%;justify-self:end}.hero-bottom{bottom:20px}.practice-layout{gap:35px}.main-nav{gap:15px}.header-inner{gap:15px}}
@media(max-width:700px){.shell{width:min(calc(100% - 36px),var(--shell))}.header-inner{min-height:0;display:grid;grid-template-columns:1fr auto;row-gap:0;padding-top:12px}.brand{grid-column:1}.header-actions{grid-column:2;grid-row:1}.language-select{width:135px;font-size:.77rem}.main-nav{grid-column:1/-1;grid-row:2;justify-content:space-between;margin:10px 0 0;gap:14px;overflow:auto;white-space:nowrap;padding-bottom:12px}.main-nav a{font-size:.82rem}.hero{padding-block:80px 95px}.hero h1{font-size:clamp(3.4rem,13vw,5.7rem)}.hero h1>span:first-child{font-size:.48em}.hero-lead{font-size:1.16rem}.hero-note{justify-self:stretch;margin:12px 4px 20px 0}.section{padding-block:85px}.section-heading{margin-bottom:35px}.project-grid,.practice-layout,.about-layout{grid-template-columns:1fr}.project-art{height:250px}.project-body p{min-height:0}.repo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.recent-repos{margin-top:55px}.practice-summary{position:static;min-height:260px}.exploring{grid-template-columns:1fr;margin-top:45px}.exploring .tag-list{grid-column:1}.about-copy{padding-top:0}.about-line{margin-top:25px}.contact-section{padding-block:85px}.contact-layout{display:grid;gap:48px}.contact-mail{min-width:0;width:100%}.footer-inner{align-items:flex-start;flex-direction:column;gap:15px}}
@media(max-width:420px){.hero{padding-top:65px}.hero h1{font-size:clamp(3rem,12.2vw,3.7rem)}.eyebrow{font-size:.6rem;letter-spacing:.06em}.note-quote{margin:28px 0 34px}.note-flow{font-size:.5rem}.note-flow i{width:5px}.section-heading>p:last-child{font-size:1rem}.project-body{padding:23px}.repo-grid{grid-template-columns:1fr}.repos-heading{display:block}.repo-live{display:inline-block;margin-top:15px}.stack-row>div:first-child{gap:13px}.stack-row p,.stack-row .tag-list{margin-left:30px}.about-details{grid-template-columns:1fr}.footer-inner>div{gap:18px;flex-wrap:wrap}html[dir="rtl"] .stack-row p,html[dir="rtl"] .stack-row .tag-list{margin-right:30px}}
/* Motion is prepared before the first paint, so sections never flash in unstyled. */
.contact-links { display: grid; gap: 28px; flex: 0 1 365px; min-width: 0; }
.contact-links .contact-mail { width: 100%; min-width: 0; }
.contact-mail .mail-arrow { transition: transform .3s var(--ease); }
.contact-mail:hover .mail-arrow,
.contact-mail:focus-visible .mail-arrow { transform: translate(3px, -3px); }
html[dir="rtl"] .contact-mail:hover { padding-right: 8px; }
html[dir="rtl"] .contact-mail:hover .mail-arrow,
html[dir="rtl"] .contact-mail:focus-visible .mail-arrow { transform: translate(-3px, -3px); }
@media (max-width: 700px) {
  .contact-links { width: 100%; }
}
.site-header { isolation: isolate; }
.brand { gap: 9px; transition: color .28s ease; }
.brand img { display: block; width: 26px; height: 26px; flex: none; transition: transform .4s var(--ease); }
.brand:hover img { transform: scale(1.08) rotate(-5deg); }
.brand:hover { color: var(--accent); }
.main-nav a { position: relative; padding-block: 8px; }
.main-nav a::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  bottom: 1px;
  height: 1px;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: center;
  transition: transform .35s var(--ease);
}
.main-nav a:hover::after,
.main-nav a:focus-visible::after,
.main-nav a[aria-current="location"]::after { transform: scaleX(1); }
.main-nav a[aria-current="location"] { color: var(--ink); }
.scroll-progress {
  position: absolute;
  inset-inline: 0;
  bottom: -1px;
  height: 2px;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: left center;
  pointer-events: none;
}
html[dir="rtl"] .scroll-progress { transform-origin: right center; }

.hero::before {
  content: "";
  position: absolute;
  inset: 5% -8% 3%;
  background: radial-gradient(ellipse 50% 40% at 78% 45%, rgba(127, 186, 126, .10), transparent 77%);
  pointer-events: none;
  animation: ambient-drift 13s ease-in-out infinite alternate;
}
.hero-copy,
.hero-note,
.hero-bottom { z-index: 1; }
.signal { animation: signal-breathe 3.4s ease-in-out infinite; }
.hero-copy { animation: none; }
.hero-intro { animation: gentle-rise .7s .05s var(--ease) both; }
.hero h1 > span:first-child { display: inline-block; animation: gentle-rise .8s .13s var(--ease) both; }
.hero-name { animation: gentle-rise .95s .23s var(--ease) both; }
.hero-lead { animation: gentle-rise .85s .38s var(--ease) both; }
.hero-links { animation: gentle-rise .85s .52s var(--ease) both; }
.hero-bottom { animation: gentle-rise .7s .78s var(--ease) both; }
.hero-note { animation-delay: .38s; transition: border-color .5s ease, box-shadow .5s ease; }
.hero-note:hover { border-color: rgba(190, 230, 182, .38); box-shadow: 0 34px 95px rgba(0, 0, 0, .22); }
.note-star { display: inline-block; animation: star-turn 15s linear infinite; }
.is-loading .hero-intro,
.is-loading .hero h1 > span:first-child,
.is-loading .hero-name,
.is-loading .hero-lead,
.is-loading .hero-links,
.is-loading .hero-bottom,
.is-loading .hero-note { animation-play-state: paused; }

.has-js .reveal {
  opacity: 0;
  filter: blur(7px);
  transform: translateY(38px) scale(.985);
  transition: opacity .9s var(--ease), transform 1s var(--ease), filter .9s var(--ease);
}
.has-js .reveal:not(.is-visible) { will-change: opacity, transform, filter; }
.has-js .reveal.is-visible { opacity: 1; filter: blur(0); transform: translateY(0) scale(1); }
.has-js .project-grid .reveal:nth-child(2) { transition-delay: .12s; }
.has-js .stack-row:nth-child(2) { transition-delay: .07s; }
.has-js .stack-row:nth-child(3) { transition-delay: .14s; }
.has-js .stack-row:nth-child(4) { transition-delay: .21s; }
.has-js .about-copy.reveal { transition-delay: .1s; }

main { transition: opacity .4s ease, transform .4s var(--ease); }
.language-transition main { opacity: 0; transform: translateY(6px); }
.repo-card.is-fresh { animation: repo-appear .7s var(--ease) var(--card-delay, 0ms) backwards; }

@media (hover: hover) {
  .has-js .project-card.reveal.is-visible:hover { transform: translateY(-8px) scale(1.005); }
  .project-card:hover .art-window { transform: translateX(-50%) translateY(-6px) rotate(-3deg); }
  .project-card:hover .verify-symbol { transform: translateX(-50%) translateY(-5px) rotate(4deg); }
  .project-card:hover .art-label { transform: translateX(5px); color: rgba(237, 247, 231, .17); }
  .repo-card:hover .repo-card-arrow { transform: translate(3px, -3px); }
}
.art-window,
.verify-symbol,
.art-label,
.repo-card-arrow { transition: transform .55s var(--ease), color .55s var(--ease); }

@keyframes gentle-rise { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: translateY(0); } }
@keyframes ambient-drift { from { transform: translate3d(-2%, 1%, 0) scale(.98); opacity: .65; } to { transform: translate3d(3%, -2%, 0) scale(1.1); opacity: 1; } }
@keyframes signal-breathe { 50% { box-shadow: 0 0 22px #9bdbab, 0 0 0 6px rgba(155, 219, 171, .08); } }
@keyframes star-turn { to { transform: rotate(360deg); } }
@keyframes repo-appear { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } }

@media (max-width: 700px) {
  .has-js .reveal { filter: blur(3px); transform: translateY(26px); }
  .has-js .reveal.is-visible { filter: blur(0); transform: translateY(0); }
}

.no-script-languages {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  width: min(calc(100% - 80px), var(--shell));
  margin: 20px auto 0;
  color: var(--accent);
  font-size: .82rem;
}
.no-script-languages a:hover,
.no-script-languages a:focus-visible { text-decoration: underline; }
@media (max-width: 700px) {
  .no-script-languages { width: min(calc(100% - 36px), var(--shell)); }
}
