:root{--bg-0:#312450;--bg-1:#221639;--ink-0:hsla(0,0%,100%,.96);--ink-1:hsla(0,0%,100%,.72);--ink-soft:hsla(0,0%,100%,.5);--line:hsla(0,0%,100%,.16);--accent:#5e42a6;--accent-soft:#b74e91;--card:hsla(0,0%,100%,.045);--shadow:0 16px 40px rgba(16,8,33,.5)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:radial-gradient(circle at 15% 20%,rgba(183,78,145,.22),transparent 28%),radial-gradient(circle at 80% 10%,rgba(94,66,166,.22),transparent 30%),linear-gradient(135deg,var(--bg-0),var(--bg-1));color:var(--ink-0);font-family:Space Grotesk,Avenir Next,Segoe UI,sans-serif;margin:0}a{color:var(--accent)}a:hover{color:var(--accent-soft)}.site-shell{display:grid;grid-template-columns:280px 1fr;min-height:100vh}.sidebar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#2c1c48d1;border-right:1px solid var(--line);height:100vh;position:sticky;top:0}.sidebar-inner{align-content:center;display:grid;gap:2rem;height:100%;padding:2.5rem 2rem}.brand{color:var(--ink-0);font-family:Fraunces,Iowan Old Style,serif;font-size:1.6rem;font-weight:600;text-decoration:none}.sidebar ul{display:grid;gap:.85rem;list-style:none;margin:0;padding:0}.sidebar a{color:var(--ink-1);position:relative;text-decoration:none;transition:color .2s ease}.sidebar a:hover{color:var(--accent)}.sidebar a.active{color:var(--ink-0)}.sidebar a.active:before{background:linear-gradient(120deg,var(--accent),var(--accent-soft));border-radius:999px;content:"";height:.42rem;left:-.9rem;position:absolute;top:50%;transform:translateY(-50%);width:.42rem}.content{overflow:hidden}.panel{border-bottom:1px solid var(--line);padding:5rem clamp(1.25rem,4vw,4.5rem)}.reveal{opacity:0;transform:translateY(22px);transition:opacity .52s ease,transform .56s ease}.reveal.visible{opacity:1;transform:translateY(0)}.panel-intro{background:linear-gradient(135deg,#5e42a670,#312450b8)}.panel-work{background:linear-gradient(135deg,#5052b552,#312450a8)}.panel-showcase{background:linear-gradient(135deg,#b74e914d,#312450a6)}.panel-skills{background:linear-gradient(135deg,#5e42a647,#482e7aa3)}.panel-contact{background:linear-gradient(135deg,#5052b547,#312450bf)}.panel-inner{width:min(980px,100%)}.panel-intro{align-items:center;display:grid;min-height:100vh}.eyebrow{color:var(--ink-soft);font-size:.75rem;letter-spacing:.16em;margin:0;text-transform:uppercase}h1,h2,h3{color:var(--ink-0);font-family:Fraunces,Iowan Old Style,serif;line-height:1.15;margin-top:0}h1{font-size:clamp(2rem,4.5vw,4.4rem);margin-bottom:1.5rem;max-width:15ch}h2{font-size:clamp(1.8rem,3vw,2.8rem);margin-bottom:1rem}p{color:var(--ink-1);line-height:1.7;margin-top:0}.section-intro{max-width:70ch}.button{background:transparent;border:1px solid var(--line);border-radius:999px;color:var(--ink-0);display:inline-block;font-weight:700;letter-spacing:.08em;margin-top:.65rem;padding:.8rem 1.2rem;text-decoration:none;text-transform:uppercase;transition:background-color .2s ease,border-color .2s ease}.button:hover{background:linear-gradient(120deg,#5e42a666,#b74e9159);border-color:#ffffff47}.showcase-grid,.skills-grid,.spotlights{display:grid;gap:1rem}.spotlights{margin-top:1.5rem}.showcase-card,.skill-card,.spotlight{background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:1.35rem}.meta,.tag{color:var(--ink-soft);font-size:.78rem;letter-spacing:.08em;margin:0 0 .5rem;text-transform:uppercase}.showcase-grid,.skills-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:1.5rem}.contact-list{display:grid;gap:.65rem;list-style:none;margin:1.1rem 0 0;padding:0}@media(max-width:920px){.site-shell{grid-template-columns:1fr}.sidebar{border-bottom:1px solid var(--line);border-right:0;height:auto;position:sticky;z-index:40}.sidebar-inner{gap:.8rem;height:auto;padding:1rem 1.2rem}.sidebar ul{font-size:.78rem;gap:.5rem;grid-template-columns:repeat(5,minmax(0,1fr))}.panel{padding-bottom:3rem;padding-top:3rem}.panel-intro{min-height:auto;padding-top:4rem}}@media(max-width:700px){.showcase-grid,.skills-grid{grid-template-columns:1fr}.sidebar ul{grid-template-columns:repeat(2,minmax(0,1fr))}}
