*{margin:0;padding:0;box-sizing:border-box}
:root{
  --bg:#f7f6f2;--surface:#fff;--border:#e2e0d8;
  --text:#181816;--muted:#72716b;
  --accent:#0ea5a0;--accent-light:#e0f7f6;--accent-mid:#14b8b2;
  --overlay:rgba(20,20,18,0.55);
  --modal-bg:#fff;--modal-border:#e2e0d8;
  --sidebar-w:260px;
}
body.dark {
  --bg:#111110;--surface:#1a1a18;--border:#2a2a27;
  --text:#f0ede6;--muted:#8a8880;
  --accent:#2dd4cc;--accent-light:#0d2e2d;--accent-mid:#2dd4cc;
  --overlay:rgba(0,0,0,0.75);
  --modal-bg:#1a1a18;--modal-border:#2a2a27;
}
body {
    background:var(--bg);
    color:var(--text);
    font-family:'Inter',system-ui,sans-serif;
    line-height:1.7;font-size:16px;
    transition:background .25s,color .25s
}
a {
    color:var(--accent);text-decoration:none
}

/* ── NAV ── */
nav {
    position:sticky;
    top:0;
    background:var(--bg);
    border-bottom:0.5px solid var(--border);
    z-index:100;
    padding:0 1.5rem;
    transition:background .25s,border-color .25s
}
.nav-inner {
    max-width:800px;
    margin:0 auto;
    display:flex;
    align-items:center;
    justify-content:space-between;
    height:54px
}
.nav-logo {
    font-weight:500;
    font-size:17px;
    letter-spacing:-0.02em;
    color:var(--text)
}

/* desktop controls */
.nav-links {
    display:flex;
    align-items:center;
    gap:1.25rem
}
.nav-links a {
    font-size:13px;
    color:var(--muted);
    transition:color .2s
}
.nav-links a:hover {
    color:var(--text);
    text-decoration:none
}
.nav-controls {
    display:flex;
    align-items:center;
    gap:1rem
}
.toggle-wrap {
    display:flex;
    align-items:center;
    gap:6px;
    font-size:12px;
    color:var(--muted);
    cursor:pointer;
    user-select:none
}
.toggle-wrap input {
    display:none
}
.track {
    width:32px;
    height:18px;
    background:var(--border);
    border-radius:9px;
    position:relative;
    transition:background .2s;
    cursor:pointer;
    flex-shrink:0
}
.track::after {
    content:'';
    position:absolute;
    width:12px;
    height:12px;
    background:#fff;
    border-radius:50%;
    top:3px;
    left:3px;
    transition:transform .2s;
    box-shadow:0 1px 2px rgba(0,0,0,.2)
}
input:checked + .track {
    background:var(--accent)
}
input:checked + .track::after {
    transform:translateX(14px)
}

/* hamburger button — hidden on desktop */
.nav-burger {
    display:none;
    flex-direction:column;
    justify-content:center;
    gap:5px;
    width:36px;
    height:36px;
    background:none;
    border:none;
    cursor:pointer;
    padding:4px;
    border-radius:6px;
    transition:background .2s
}
.nav-burger:hover {
    background:var(--accent-light)
}
.nav-burger span {
    display:block;
    height:2px;
    background:var(--text);
    border-radius:2px;
    transition:transform .25s,opacity .25s,width .25s
}
.nav-burger span:nth-child(2) {
    width:70%
}
.nav-burger.open span:nth-child(1) {
    transform:translateY(6.5px) rotate(45deg)
}
.nav-burger.open span:nth-child(2) {
    opacity:0;
    width:0
}
.nav-burger.open span:nth-child(3) {
    transform:translateY(-6.5px) rotate(-45deg)
}

/* ── SIDEBAR ── */
.sidebar-backdrop {
    display:none;
    position:fixed;
    inset:0;
    background:var(--overlay);
    z-index:200;
    opacity:0;
    transition:opacity .25s
}
.sidebar-backdrop.open {
    display:block
}
.sidebar-backdrop.visible {
    opacity:1
}
.sidebar {
    position:fixed;
    top:0;
    left:0;
    height:100%;
    width:var(--sidebar-w);
    background:var(--surface);
    border-right:0.5px solid var(--border);
    z-index:201;
    transform:translateX(-100%);
    transition:transform .28s cubic-bezier(.4,0,.2,1);
    display:flex;
    flex-direction:column;
    padding:0
}
.sidebar.open {
    transform:translateX(0)
}
.sidebar-header {
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:1rem 1.25rem;
    border-bottom:0.5px solid var(--border)
}
.sidebar-logo {
    font-weight:500;
    font-size:16px;
    letter-spacing:-0.02em;
    color:var(--text)
}
.sidebar-close {
    width:30px;
    height:30px;
    border-radius:50%;
    background:var(--border);
    border:none;
    cursor:pointer;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:14px;
    color:var(--muted);
    transition:background .2s
}
.sidebar-close:hover {
    background:var(--accent);
    color:#fff
}
.sidebar-nav {
    display:flex;
    flex-direction:column;
    padding:1.25rem 0;
    flex:1
}
.sidebar-nav a {
    font-size:15px;
    color:var(--muted);
    padding:.75rem 1.25rem;
    transition:color .15s,background .15s;
    border-radius:0
}
.sidebar-nav a:hover {
    color:var(--text);
    background:var(--accent-light);
    text-decoration:none
}
.sidebar-divider {
    height:0.5px;
    background:var(--border);
    margin:.5rem 1.25rem
}
.sidebar-toggles {
    padding:1rem 1.25rem;
    display:flex;
    flex-direction:column;
    gap:1rem;
    border-top:0.5px solid var(--border)
}
.sidebar-toggle-row {
    display:flex;
    align-items:center;
    justify-content:space-between;
    font-size:14px;color:var(--muted)
}
/* sidebar track mirrors desktop */
.sidebar-toggle-row .track {
    background:var(--border)
}

@media(max-width:640px){
  .nav-links,.nav-controls{display:none}
  .nav-burger{display:flex}
}

/* ── PAGE ── */
section {
    max-width:800px;
    margin:0 auto;
    padding:5rem 1.5rem
}
section+section {
    padding-top:0
}
.hero {
    padding-top:8rem;
    padding-bottom:6rem
}
.hero-eyebrow {
    font-size:12px;
    font-weight:500;
    letter-spacing:.1em;
    text-transform:uppercase;
    color:var(--accent);
    margin-bottom:1.25rem
}
.hero h1 {
    font-size:clamp(3rem,7vw,5rem);
    font-weight:500;
    letter-spacing:-0.04em;
    line-height:1;
    margin-bottom:1.5rem
}
.hero p {
    font-size:1.05rem;
    color:var(--muted);
    max-width:480px;
    line-height:1.75
}
.hero-cta {
    display:inline-flex;
    align-items:center;
    gap:6px;
    margin-top:2rem;
    padding:9px 18px;
    border:1px solid var(--accent);
    color:var(--accent);
    border-radius:6px;
    font-size:13px;
    font-weight:500;
    transition:background .2s,color .2s
}
.hero-cta:hover {
    background:var(--accent);
    color:#fff;
    text-decoration:none
}
.sh {
    margin-bottom:3rem
}
.sh-label{ font-size:11px;
    font-weight:500;
    letter-spacing:.1em;
    text-transform:uppercase;
    color:var(--accent);
    margin-bottom:.5rem
}
.sh h2 {
    font-size:1.5rem;
    font-weight:500;
    letter-spacing:-0.02em
}
.sh p {
    color:var(--muted);
    font-size:14px;
    margin-top:.35rem
}
.about-body {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:3rem;
    align-items:start
}
@media(max-width:540px) {
    .about-body {
        grid-template-columns:1fr;
        gap:2rem
    }
}
.about-prose p {
    font-size:15px;
    color:var(--muted);
    line-height:1.8
}
.about-prose p+p {
    margin-top:1rem
}
.stack-item {
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:0.75rem 0;
    border-bottom:0.5px solid var(--border);
    font-size:14px
}
.stack-item:first-child {
    border-top:0.5px solid var(--border)
}
.stack-label {
    color:var(--muted);
    font-size:12px;
    text-transform:uppercase;
    letter-spacing:0.06em
}
.stack-val {
    color:var(--text);
    font-weight:500
}
.made-group {
    margin-bottom:3.5rem
}
.made-group-title {
    font-size:11px;
    font-weight:500;
    letter-spacing:0.08em;
    text-transform:uppercase;
    color:var(--muted);
    margin-bottom:1.25rem
}
.project-row {
    display:flex;
    align-items:baseline;
    justify-content:space-between;
    padding:.9rem 0;
    border-bottom:0.5px solid var(--border);
    gap:1rem;cursor:pointer
}
.project-row:first-of-type {
    border-top:0.5px solid var(--border)
}
.project-row:hover .pr-name {
    color:var(--accent)
}
.pr-left {
    flex:1
}
.pr-name {
    font-size:15px;
    font-weight:500;
    color:var(--text);
    transition:color 0.2s
}
.pr-desc {
    font-size:13px;
    color:var(--muted);
    margin-top:2px
}
.pr-tag {
    font-size:11px;
    font-weight:500;
    background:var(--accent-light);
    color:var(--accent);
    padding:2px 8px;
    border-radius:20px;
    white-space:nowrap;
    flex-shrink:0
}
.pr-arrow {
    font-size:14px;
    color:var(--muted);
    flex-shrink:0;
    margin-left:.5rem;
    transition:transform 0.2s,color 0.2s
}
.project-row:hover .pr-arrow {
    transform:translateX(3px);
    color:var(--accent)
}
.contact-body {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:3rem;
    align-items:start;
    margin-top:2.5rem
}
@media(max-width:540px) {
    .contact-body {
        grid-template-columns:1fr
    }
}
.contact-prose p {
    font-size:15px;
    color:var(--muted);
    line-height:1.8
}
.contact-item {
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:.75rem 0;
    border-bottom:0.5px solid var(--border);
    font-size:14px
}
.contact-item:first-child {
    border-top:0.5px solid var(--border)
}
.ci-label {
    color:var(--muted);
    font-size:12px;
    text-transform:uppercase;
    letter-spacing:0.06em;
    flex-shrink:0;
    width:80px
}
.ci-val {
    color:var(--text);
    font-weight:500;
    text-align:right
}
footer {
    border-top:0.5px solid var(--border);
    padding:2rem;
    text-align:center;
    font-size:12px;
    color:var(--muted)
}

/* ── MODAL ── */
.modal-backdrop {
    display:none;
    position:fixed;
    inset:0;
    background:var(--overlay);
    z-index:300;
    align-items:flex-start;
    justify-content:center;
    padding:2rem 1rem;
    overflow-y:auto
}
.modal-backdrop.open {
    display:flex
}
.modal {
    background:var(--modal-bg);
    border:0.5px solid var(--modal-border);
    border-radius:14px;width:100%;
    max-width:720px;
    margin:auto;
    overflow:hidden;
    position:relative
}
.modal-close {
    position:absolute;
    top:1rem;
    right:1rem;
    width:32px;
    height:32px;
    border-radius:50%;
    background:var(--border);
    border:none;
    cursor:pointer;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:16px;
    color:var(--muted);
    z-index:10;
    transition:background 0.2s
}
.modal-close:hover {
    background:var(--accent);
    color:#fff
}
.gallery {
    padding:1.5rem 1.5rem 0;
    display:grid;
    gap:6px;
    grid-template-columns:repeat(3,1fr)
}
.gallery-item {
    overflow:hidden;
    border-radius:8px;
    cursor:pointer;
    background:var(--accent-light);
    aspect-ratio:1;
    position:relative
}
.gallery-item img {
    width:100%;
    height:100%;
    object-fit:cover;
    display:block;
    transition:transform 0.3s
}
.gallery-item:hover img {
    transform:scale(1.04)
}
.gallery-item.tall {
    grid-row:span 2;
    aspect-ratio:auto
}
.gallery-placeholder {
    width:100%;
    height:100%;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:22px;
    color:var(--accent-mid);
    background:var(--accent-light)
}
.modal-body {
    padding:1.75rem 1.5rem 2rem
}
.modal-tag {
    font-size:11px;
    font-weight:500;
    letter-spacing:0.08em;
    text-transform:uppercase;
    color:var(--accent);
    margin-bottom:.5rem
}
.modal-title {
    font-size:1.4rem;
    font-weight:500;
    letter-spacing:-0.02em;
    margin-bottom:.75rem
}
.modal-divider {
    height:0.5px;
    background:var(--border);
    margin:.75rem 0 1.25rem
}
.modal-desc {
    font-size:14px;
    color:var(--muted);
    line-height:1.8
}
.modal-desc p+p {
    margin-top:.75rem
}
.modal-meta {
    display:flex;
    flex-wrap:wrap;
    gap:0.5rem;
    margin-top:1.25rem
}
.modal-chip {
    font-size:11px;
    font-weight:500;
    background:var(--accent-light);
    color:var(--accent);
    padding:3px 10px;
    border-radius:20px
}

/* ── LIGHTBOX ── */
.lightbox {
    display:none;
    position:fixed;
    inset:0;
    background:rgba(0,0,0,0.92);
    z-index:400;
    align-items:center;
    justify-content:center
}
.lightbox.open {
    display:flex
}
.lb-img-wrap {
    max-width:90vw;
    max-height:85vh;
    display:flex;
    align-items:center;
    justify-content:center
}
.lb-img-wrap img {
    max-width:90vw;
    max-height:85vh;
    object-fit:contain;
    border-radius:8px;
    display:block
}
.lb-close {
    position:fixed;
    top:1.25rem;
    right:1.25rem;
    width:36px;
    height:36px;
    border-radius:50%;
    background:rgba(255,255,255,.12);
    border:none;
    cursor:pointer;
    color:#fff;
    font-size:18px;
    display:flex;
    align-items:center;
    justify-content:center;
    transition:background 0.2s
}
.lb-close:hover {
    background:rgba(255,255,255,.25)
}
.lb-btn {
    position:fixed;
    top:50%;
    transform:translateY(-50%);
    width:44px;
    height:44px;
    border-radius:50%;
    background:rgba(255,255,255,.12);
    border:none;
    cursor:pointer;
    color:#fff;
    font-size:22px;
    display:flex;
    align-items:center;
    justify-content:center;
    transition:background 0.2s
}
.lb-btn:hover {
    background:rgba(255,255,255,.25)
}
#lb-prev {
    left:1.25rem
}
#lb-next {
    right:1.25rem
}
.lb-counter {
    position:fixed;
    bottom:1.5rem;
    left:50%;
    transform:translateX(-50%);
    font-size:12px;
    color:rgba(255,255,255,.5);
    letter-spacing:0.05em
}