/* ==========================================================================
   Yestar_ — Jang Hyundo personal site
   ========================================================================== */

@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap');
@import url('https://cdn.jsdelivr.net/npm/pretendard@1.3.9/dist/web/static/pretendard.css');

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

:root{
  --bg:#EFF8FC;
  --bg-elev:#FFFFFF;
  --bg-elev-2:#DFF2FA;
  --ink:#0F212C;
  --ink-dim:#4C707F;
  --accent:#22C9EC;
  --accent-ink:#052229;
  --accent-2:#5B7FE8;
  --line:rgba(15,45,60,0.13);
  --line-strong:rgba(15,45,60,0.25);
  --shadow:rgba(10,50,70,0.13);
  --radius:16px;

  --hero-bg-1:#BFEFFA; --hero-bg-2:#F5FCFE;
  --hero-ink:#0F212C; --hero-ink-dim:#48697A; --hero-ink-faint:#6C93A2;
  --hero-line:rgba(15,45,60,0.16); --hero-line-soft:rgba(15,45,60,0.10);
  --hero-star-rgb:20,70,95;
  --hero-btn-bg:#0F212C; --hero-btn-ink:#F5FCFE;
  --hero-ghost-bg:rgba(15,45,60,0.05);
}
@media (prefers-color-scheme: dark){
  :root{
    --bg:#0A0C16; --bg-elev:#12162A; --bg-elev-2:#1A2040;
    --ink:#EDEBFB; --ink-dim:#8B90B3; --accent:#F7C873; --accent-ink:#2A1B00;
    --accent-2:#8FD3FF; --line:rgba(237,235,251,0.10); --line-strong:rgba(237,235,251,0.20);
    --shadow:rgba(0,0,0,0.45);

    --hero-bg-1:#1B2050; --hero-bg-2:#0A0C16;
    --hero-ink:#F3EEFF; --hero-ink-dim:#C9CBEA; --hero-ink-faint:#9BA0C6;
    --hero-line:rgba(243,238,255,0.18); --hero-line-soft:rgba(243,238,255,0.14);
    --hero-star-rgb:237,235,251;
    --hero-btn-bg:#F3EEFF; --hero-btn-ink:#0B0E1A;
    --hero-ghost-bg:rgba(255,255,255,0.04);
  }
}
:root[data-theme="dark"]{
  --bg:#0A0C16; --bg-elev:#12162A; --bg-elev-2:#1A2040;
  --ink:#EDEBFB; --ink-dim:#8B90B3; --accent:#F7C873; --accent-ink:#2A1B00;
  --accent-2:#8FD3FF; --line:rgba(237,235,251,0.10); --line-strong:rgba(237,235,251,0.20);
  --shadow:rgba(0,0,0,0.45);

  --hero-bg-1:#1B2050; --hero-bg-2:#0A0C16;
  --hero-ink:#F3EEFF; --hero-ink-dim:#C9CBEA; --hero-ink-faint:#9BA0C6;
  --hero-line:rgba(243,238,255,0.18); --hero-line-soft:rgba(243,238,255,0.14);
  --hero-star-rgb:237,235,251;
  --hero-btn-bg:#F3EEFF; --hero-btn-ink:#0B0E1A;
  --hero-ghost-bg:rgba(255,255,255,0.04);
}
:root[data-theme="light"]{
  --bg:#EFF8FC; --bg-elev:#FFFFFF; --bg-elev-2:#DFF2FA;
  --ink:#0F212C; --ink-dim:#4C707F; --accent:#22C9EC; --accent-ink:#052229;
  --accent-2:#5B7FE8; --line:rgba(15,45,60,0.13); --line-strong:rgba(15,45,60,0.25);
  --shadow:rgba(10,50,70,0.13);

  --hero-bg-1:#BFEFFA; --hero-bg-2:#F5FCFE;
  --hero-ink:#0F212C; --hero-ink-dim:#48697A; --hero-ink-faint:#6C93A2;
  --hero-line:rgba(15,45,60,0.16); --hero-line-soft:rgba(15,45,60,0.10);
  --hero-star-rgb:20,70,95;
  --hero-btn-bg:#0F212C; --hero-btn-ink:#F5FCFE;
  --hero-ghost-bg:rgba(15,45,60,0.05);
}

body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:'Pretendard',-apple-system,BlinkMacSystemFont,"Segoe UI","Malgun Gothic",sans-serif;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
  transition:background-color .45s ease,color .45s ease;
}

/* page load / navigation fade */
body{opacity:0;}
body.loaded{opacity:1;transition:opacity .5s ease, background-color .45s ease, color .45s ease;}
body.leaving{opacity:0;transition:opacity .22s ease;}
@media (prefers-reduced-motion: reduce){
  body{opacity:1;}
  body.loaded, body.leaving{transition:none;opacity:1;}
}

a{color:inherit;text-decoration:none;}
*:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px;}
.mono{font-family:'JetBrains Mono',monospace;font-variant-numeric:tabular-nums;}
.shell{max-width:1120px;margin-inline:auto;padding-inline:clamp(1.25rem,4vw,2.5rem);}
.shell-wide{max-width:1680px;margin-inline:auto;padding-inline:clamp(1.25rem,5vw,4rem);}
img,svg{display:block;max-width:100%;}

/* ---------------------------------- nav ---------------------------------- */
.nav{position:fixed;top:0;left:0;right:0;z-index:50;padding-block:1.1rem;transition:background-color .35s ease,border-color .35s ease,padding .35s ease,backdrop-filter .35s ease;border-bottom:1px solid transparent;}
.nav .shell-wide{display:flex;align-items:center;gap:1.5rem;}
.nav.solid{background:color-mix(in srgb, var(--bg) 82%, transparent);backdrop-filter:blur(14px);border-bottom-color:var(--line);padding-block:.75rem;}
.brand{display:flex;align-items:center;gap:.6em;font-weight:700;font-size:1.02rem;color:var(--hero-ink);letter-spacing:-.01em;transition:color .35s ease;}
.nav.solid .brand{color:var(--ink);}
.brand-mark{width:30px;height:30px;flex:none;}
.navlinks{position:relative;display:flex;gap:.3rem;list-style:none;margin:0 0 0 auto;padding:0;}
.navlinks a{position:relative;z-index:1;padding:.5em .9em;font-weight:600;font-size:.88rem;color:var(--hero-ink-dim);border-radius:20px;transition:color .2s ease;}
.nav.solid .navlinks a{color:var(--ink-dim);}
.navlinks a.active{color:#0B0E1A;}
.nav.solid .navlinks a.active{color:var(--accent-ink);}
.nav-pill{position:absolute;z-index:0;top:2px;bottom:2px;left:0;width:0;background:var(--accent);border-radius:20px;transition:left .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1);}
.nav-actions{display:flex;align-items:center;gap:.6rem;}
.icon-btn{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;border:1px solid var(--hero-line);background:var(--hero-ghost-bg);color:var(--hero-ink);cursor:pointer;transition:border-color .2s ease,transform .2s ease,background-color .2s ease,color .35s ease;}
.nav.solid .icon-btn{border-color:var(--line-strong);color:var(--ink);background:var(--bg-elev);}
.icon-btn:hover{border-color:var(--accent);transform:translateY(-1px);}
.icon-btn svg{width:17px;height:17px;}
.icon-moon{display:none;}
:root[data-theme="light"] .icon-sun{display:none;}
:root[data-theme="light"] .icon-moon{display:block;}
.brand-mark-sun{display:none;}
:root[data-theme="light"] .brand-mark-moon{display:none;}
:root[data-theme="light"] .brand-mark-sun{display:block;}

.menu-btn{display:none;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;border:1px solid var(--hero-line);background:var(--hero-ghost-bg);color:var(--hero-ink);cursor:pointer;transition:border-color .2s ease,transform .2s ease,background-color .2s ease,color .35s ease;flex:none;}
.nav.solid .menu-btn{border-color:var(--line-strong);color:var(--ink);background:var(--bg-elev);}
.menu-btn:hover{border-color:var(--accent);}
.menu-btn svg{width:18px;height:18px;}
.menu-btn .icon-close{display:none;}
.menu-btn.open .icon-menu{display:none;}
.menu-btn.open .icon-close{display:block;}

.mobile-menu{position:fixed;inset:0;z-index:55;background:var(--bg);opacity:0;visibility:hidden;transform:translateY(-10px);transition:opacity .25s ease,visibility .25s ease,transform .25s ease;padding:6.5rem 1.75rem 2rem;display:flex;flex-direction:column;gap:.2rem;}
.mobile-menu.open{opacity:1;visibility:visible;transform:translateY(0);}
.mobile-menu a{font-family:'Pretendard',-apple-system,BlinkMacSystemFont,"Segoe UI","Malgun Gothic",sans-serif;font-size:1.5rem;font-weight:700;padding:.7em 0;border-bottom:1px solid var(--line);color:var(--ink);}
.mobile-menu a.active{color:var(--accent);}
@media (prefers-reduced-motion: reduce){ .mobile-menu{transition:none;} }
@media (min-width:901px){ .mobile-menu{display:none;} }

@media (max-width:900px){
  .navlinks{display:none;}
  .nav-actions{margin-left:auto;}
  .menu-btn{display:flex;}
}

/* ---------------------------------- hero (home, full) ---------------------------------- */
.hero{position:relative;min-height:100svh;display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--hero-ink);padding:7.5rem 0 4rem;isolation:isolate;}
.hero::before,.hero::after{content:"";position:absolute;inset:0;z-index:-1;transition:opacity .5s ease;}
.hero::before{background:radial-gradient(ellipse 90% 70% at 78% 15%, #1B2050 0%, #0A0C16 60%);opacity:1;}
.hero::after{background:radial-gradient(ellipse 90% 70% at 78% 15%, #BFEFFA 0%, #F5FCFE 60%);opacity:0;}
:root[data-theme="light"] .hero::before{opacity:0;}
:root[data-theme="light"] .hero::after{opacity:1;}
@media (prefers-color-scheme: dark){ .hero::before{opacity:1;} .hero::after{opacity:0;} }
:root[data-theme="dark"] .hero::before{opacity:1;}
:root[data-theme="dark"] .hero::after{opacity:0;}
#stars{position:absolute;inset:0;z-index:0;}
.hero-grid{position:relative;z-index:2;display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(2rem,5vw,5rem);align-items:center;width:100%;}
.hero-text{max-width:640px;}
.eyebrow-pill{display:inline-flex;align-items:center;gap:.5em;font-family:'JetBrains Mono',monospace;font-size:.72rem;letter-spacing:.1em;color:var(--hero-ink-dim);border:1px solid var(--hero-line);padding:.4em .9em;border-radius:20px;margin-bottom:1.5rem;background:var(--hero-ghost-bg);transition:color .35s ease,border-color .35s ease,background-color .35s ease;}
.eyebrow-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px 1px var(--accent);}
.hero-name{font-weight:800;font-size:clamp(3rem,6vw,5.2rem);line-height:1.02;letter-spacing:-.02em;margin:0;color:var(--hero-ink);text-wrap:balance;transition:color .35s ease;}
.hero-role{margin:.7rem 0 0;font-family:'JetBrains Mono',monospace;font-size:clamp(1.05rem,2vw,1.3rem);color:var(--accent);min-height:1.6em;}
.hero-role .caret{display:inline-block;width:.5em;margin-left:.05em;color:var(--accent);animation:caret-blink 1s step-end infinite;}
@keyframes caret-blink{50%{opacity:0;}}
.hero-bio{margin:1.6rem 0 0;font-size:1.08rem;line-height:1.9;color:var(--hero-ink-dim);max-width:34em;transition:color .35s ease;}
.hero-cta{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:2.3rem;}
.btn{display:inline-flex;align-items:center;gap:.55em;font-weight:600;font-size:.92rem;padding:.8em 1.4em;border-radius:12px;border:1px solid transparent;transition:transform .18s ease,box-shadow .18s ease,background-color .18s ease,border-color .18s ease,color .18s ease;cursor:pointer;}
.btn svg{width:16px;height:16px;}
.btn-primary{background:var(--hero-btn-bg);color:var(--hero-btn-ink);}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 26px -12px rgba(0,0,0,0.35);}
.btn-ghost{background:var(--hero-ghost-bg);color:var(--hero-ink);border-color:var(--hero-line);}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px);}

.hero-stats{display:flex;flex-wrap:wrap;row-gap:1.2rem;column-gap:clamp(1.6rem,3vw,2.8rem);margin-top:3rem;padding-top:2rem;border-top:1px solid var(--hero-line-soft);}
.hstat b{display:block;font-family:'JetBrains Mono',monospace;font-weight:700;font-size:clamp(1.5rem,2.4vw,1.9rem);color:var(--accent);}
.hstat span{font-size:.8rem;color:var(--hero-ink-faint);}

/* photo frame */
.hero-photo{position:relative;display:flex;align-items:center;justify-content:center;}
.photo-frame{position:relative;width:100%;max-width:380px;aspect-ratio:4/5;}
.photo-frame .photo{width:100%;height:100%;object-fit:contain;position:relative;z-index:2;box-sizing:border-box;filter:drop-shadow(0 18px 30px rgba(0,0,0,0.4));}
.photo-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.7em;color:var(--hero-ink-faint);z-index:1;padding:1.5rem;text-align:center;}
.photo-placeholder svg{width:44px;height:44px;opacity:.6;}
.photo-placeholder b{font-family:'JetBrains Mono',monospace;font-size:.82rem;color:var(--hero-ink-dim);font-weight:600;}
.photo-placeholder span{font-size:.78rem;line-height:1.6;}

.scrollcue{position:relative;z-index:2;margin-top:clamp(2.5rem,6vw,4.5rem);display:flex;align-items:center;gap:.7em;color:var(--hero-ink-faint);font-family:'JetBrains Mono',monospace;font-size:.7rem;letter-spacing:.12em;}
.mouse{width:22px;height:34px;border:1.5px solid var(--hero-line);border-radius:12px;position:relative;flex:none;}
.mouse::after{content:"";position:absolute;top:6px;left:50%;width:3px;height:6px;background:var(--accent);border-radius:2px;transform:translateX(-50%);animation:scroll-dot 1.8s ease-in-out infinite;}
@keyframes scroll-dot{0%{opacity:1;top:6px;}70%{opacity:0;top:18px;}100%{opacity:0;top:6px;}}
@media (prefers-reduced-motion: reduce){ .mouse::after{animation:none;} .hero-role .caret{animation:none;} }

@media (max-width:940px){
  .hero-grid{grid-template-columns:1fr;text-align:left;}
  .hero-photo{order:-1;max-width:280px;margin-inline:0;}
  .hero-text{max-width:none;}
}

/* ---------------------------------- page banner (subpages) ---------------------------------- */
.page-hero{position:relative;overflow:hidden;color:var(--hero-ink);padding:9.5rem 0 3.5rem;isolation:isolate;}
.page-hero::before,.page-hero::after{content:"";position:absolute;inset:0;z-index:-1;transition:opacity .5s ease;}
.page-hero::before{background:radial-gradient(ellipse 80% 100% at 15% 0%, #1B2050 0%, #0A0C16 60%);opacity:1;}
.page-hero::after{background:radial-gradient(ellipse 80% 100% at 15% 0%, #BFEFFA 0%, #F5FCFE 60%);opacity:0;}
:root[data-theme="light"] .page-hero::before{opacity:0;}
:root[data-theme="light"] .page-hero::after{opacity:1;}
@media (prefers-color-scheme: dark){ .page-hero::before{opacity:1;} .page-hero::after{opacity:0;} }
:root[data-theme="dark"] .page-hero::before{opacity:1;}
:root[data-theme="dark"] .page-hero::after{opacity:0;}
.page-hero #stars{position:absolute;inset:0;z-index:0;}
.page-hero .shell-wide{position:relative;z-index:2;}
.crumb{display:inline-flex;align-items:center;gap:.5em;font-family:'JetBrains Mono',monospace;font-size:.76rem;color:var(--hero-ink-faint);background:var(--hero-ghost-bg);border:1px solid var(--hero-line);padding:.4em .8em;border-radius:20px;margin-bottom:1.4rem;}
.crumb b{color:var(--accent);font-weight:600;}
.page-title{font-weight:800;font-size:clamp(2.4rem,5vw,3.6rem);margin:0;letter-spacing:-.02em;color:var(--hero-ink);}
.page-sub{margin:.9rem 0 0;font-size:1.05rem;color:var(--hero-ink-dim);max-width:38em;line-height:1.8;}

/* ---------------------------------- sections ---------------------------------- */
main{background:var(--bg);}
.section{padding-block:clamp(3.5rem,8vw,6rem);}
.eyebrow{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:.72rem;letter-spacing:.14em;color:var(--accent);margin-bottom:.9em;}
.section-title{font-weight:800;font-size:clamp(1.8rem,3vw,2.3rem);margin:0 0 .5em;letter-spacing:-.01em;text-wrap:balance;}
.section-sub{color:var(--ink-dim);font-size:1.02rem;margin:0;line-height:1.75;max-width:30em;}

.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.3,1),transform .7s cubic-bezier(.2,.7,.3,1);transition-delay:var(--d,0s);}
.reveal.in-view{opacity:1;transform:translateY(0);}
@media (prefers-reduced-motion: reduce){ .reveal{transition:none;opacity:1;transform:none;} }

/* ---------------------------------- explore cards (home) ---------------------------------- */
.explore-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.1rem;}
.explore-card{display:flex;flex-direction:column;gap:.9em;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:1.8rem;transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease,background-color .35s ease;}
.explore-card:hover{transform:translateY(-5px);box-shadow:0 20px 34px -22px var(--shadow);border-color:var(--line-strong);}
.explore-icon{width:42px;height:42px;border-radius:12px;background:var(--bg-elev-2);display:flex;align-items:center;justify-content:center;color:var(--accent);}
.explore-icon svg{width:20px;height:20px;}
.explore-title{font-weight:700;font-size:1.1rem;display:flex;align-items:center;justify-content:space-between;}
.explore-title svg{width:14px;height:14px;color:var(--ink-dim);transition:transform .2s ease;}
.explore-card:hover .explore-title svg{transform:translate(3px,-3px);color:var(--accent);}
.explore-desc{margin:0;color:var(--ink-dim);font-size:.92rem;line-height:1.7;}
@media (max-width:760px){ .explore-grid{grid-template-columns:1fr;} }

/* ---------------------------------- stack ---------------------------------- */
.split{display:grid;grid-template-columns:.62fr 1.38fr;gap:clamp(2rem,5vw,4rem);align-items:start;}
.split .section-head{position:sticky;top:110px;text-align:left;margin:0;}
.stack-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.1rem;}
.stack-card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:1.6rem;transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease,background-color .35s ease;}
.stack-card:hover{transform:translateY(-4px);box-shadow:0 20px 34px -22px var(--shadow);border-color:var(--line-strong);}
.stack-card.wide{grid-column:span 2;}
.stack-card-head{display:flex;align-items:center;gap:.7em;margin-bottom:1.1em;}
.stack-icon{width:34px;height:34px;border-radius:9px;background:var(--bg-elev-2);display:flex;align-items:center;justify-content:center;flex:none;}
.stack-icon svg{width:17px;height:17px;color:var(--accent);}
.stack-card-title{font-weight:700;font-size:1rem;}
.stack-card-count{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:.72rem;color:var(--ink-dim);background:var(--bg-elev-2);border-radius:20px;padding:.2em .6em;}
.tag-row{display:flex;flex-wrap:wrap;gap:.5em;}
.tag{font-family:'JetBrains Mono',monospace;font-size:.78rem;background:var(--bg-elev-2);border:1px solid var(--line);border-radius:7px;padding:.35em .65em;line-height:1;transition:border-color .15s ease,color .15s ease;}
.tag:hover{border-color:var(--accent);color:var(--accent);}
@media (max-width:1080px){
  .split{grid-template-columns:1fr;}
  .split .section-head{position:static;}
  .stack-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));}
  .stack-card.wide{grid-column:auto;}
}

/* ---------------------------------- projects (full-width alternating rows) ---------------------------------- */
.group-head{margin-bottom:1.6rem;}
.group-head .eyebrow{margin-bottom:0;}
.award-label{font-size:1rem;font-weight:700;letter-spacing:.04em;}
.project-row{display:grid;grid-template-columns:1fr;gap:clamp(2rem,5vw,4.5rem);align-items:center;padding-block:clamp(2.4rem,5vw,3.6rem);border-top:1px solid var(--line);}
.project-top{display:flex;align-items:center;gap:.8em;margin-bottom:.9em;flex-wrap:wrap;}
.project-status{font-family:'JetBrains Mono',monospace;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;padding:.3em .6em;border-radius:20px;display:inline-flex;align-items:center;gap:.5em;}
.project-status.done{color:#2E9E6D;background:rgba(46,158,109,0.14);}
.project-status.active{color:var(--accent);background:color-mix(in srgb, var(--accent) 16%, transparent);}
.project-status.award{color:#C69A1B;background:rgba(198,154,27,0.14);}
.project-status.award svg{width:12px;height:12px;}
.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor;}
.status-dot.pulse{animation:pulse 1.8s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.3;}}
.project-year{font-family:'JetBrains Mono',monospace;font-size:.78rem;color:var(--ink-dim);}
.project-title{font-weight:800;font-size:clamp(1.5rem,2.6vw,2rem);margin:0 0 .5em;letter-spacing:-.01em;}
.project-desc{margin:0;color:var(--ink-dim);line-height:1.85;font-size:.98rem;max-width:34em;}
.project-link{display:inline-flex;align-items:center;gap:.5em;margin-top:1.1em;font-weight:600;font-size:.9rem;color:var(--accent);}
.project-link svg{width:15px;height:15px;transition:transform .2s ease;}
.project-link:hover svg{transform:translate(3px,-3px);}
@media (prefers-reduced-motion: reduce){ .status-dot.pulse{animation:none;} }

/* ---------------------------------- contact (full-width spread) ---------------------------------- */
.contact-row{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;}
.contact-card{display:flex;flex-direction:column;gap:.9em;background:var(--bg-elev);padding:clamp(1.6rem,3vw,2.3rem);transition:background-color .2s ease;position:relative;}
.contact-card:hover{background:var(--bg-elev-2);}
.contact-icon{width:40px;height:40px;border-radius:11px;background:var(--bg-elev-2);display:flex;align-items:center;justify-content:center;color:var(--accent);}
.contact-card:hover .contact-icon{background:var(--bg-elev);}
.contact-icon svg{width:19px;height:19px;}
.contact-title{font-weight:700;font-size:1.05rem;display:flex;align-items:center;justify-content:space-between;}
.contact-title svg{width:14px;height:14px;color:var(--ink-dim);transition:transform .2s ease;}
.contact-card:hover .contact-title svg{transform:translate(3px,-3px);color:var(--accent);}
.contact-desc{color:var(--ink-dim);font-size:.9rem;line-height:1.7;margin:0;}
.contact-val{font-family:'JetBrains Mono',monospace;font-size:.85rem;color:var(--ink-dim);word-break:break-all;}
.copy-btn{align-self:flex-start;font-family:'JetBrains Mono',monospace;font-size:.76rem;font-weight:600;border:1px solid var(--line-strong);border-radius:7px;padding:.4em .8em;background:transparent;color:var(--ink);cursor:pointer;transition:border-color .15s ease,color .15s ease;}
.copy-btn:hover{border-color:var(--accent);color:var(--accent);}
.toast{position:absolute;top:1rem;right:1rem;font-family:'JetBrains Mono',monospace;font-size:.68rem;font-weight:600;background:var(--accent);color:var(--accent-ink);padding:.3em .6em;border-radius:6px;opacity:0;transform:translateY(-4px);transition:opacity .2s ease,transform .2s ease;pointer-events:none;}
.toast.show{opacity:1;transform:translateY(0);}
@media (max-width:760px){ .contact-row{grid-template-columns:1fr;} }

/* ---------------------------------- footer ---------------------------------- */
footer{border-top:1px solid var(--line);padding-block:2rem;}
footer .shell-wide{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.8em;align-items:center;}
.foot-note{font-size:.85rem;color:var(--ink-dim);}
.foot-note a{color:var(--accent);border-bottom:1px solid var(--line-strong);}
.foot-meta{font-family:'JetBrains Mono',monospace;font-size:.74rem;color:var(--ink-dim);display:flex;gap:1.1em;}
