:root{--yellow-cream:#fff8e7;--yellow-light:#ffe4a1;--yellow-main:#ffd074;--yellow-deep:#fb3;--yellow-accent:#ff9500;--ink-dark:#2b2b2b;--ink-medium:#4a4a4a;--ink-light:#666;--space-xs:.5rem;--space-sm:1rem;--space-md:2rem;--space-lg:3rem;--space-xl:4rem;--font-mono:"Courier New",Courier,monospace;--font-base:16px;--line-height:1.6;--container-max:72ch;--grid-gap:2ch}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:var(--font-base);scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body{font-family:var(--font-mono);line-height:var(--line-height);color:var(--ink-dark);background:linear-gradient(135deg,var(--yellow-cream)0%,var(--yellow-light)100%);min-height:100vh;position:relative;overflow-x:hidden}.paper-texture{pointer-events:none;z-index:1;opacity:.6;width:100%;height:100%;animation:20s ease-in-out infinite paperShift;position:fixed;top:0;left:0}@keyframes paperShift{0%,to{transform:translate(0)}50%{transform:translate(.5px,.5px)}}.container{width:100%;max-width:var(--container-max);padding:0 var(--space-md);z-index:2;margin:0 auto;position:relative}.skip-link{background:var(--yellow-main);color:var(--ink-dark);padding:var(--space-sm);z-index:100;border:2px solid var(--ink-dark);text-decoration:none;position:absolute;top:-100px;left:0}.skip-link:focus{top:0}pre{font-family:var(--font-mono);white-space:pre;line-height:1.2}.header{background:var(--yellow-cream);border-bottom:2px solid var(--ink-dark);z-index:10;padding:var(--space-sm)0;position:sticky;top:0}.header__inner{justify-content:space-between;align-items:center;display:flex}.logo pre{color:var(--ink-dark);font-size:.75rem;font-weight:700}.nav{gap:var(--space-sm);display:flex}.nav__link{color:var(--ink-dark);padding:var(--space-xs)var(--space-sm);border-radius:2px;align-items:center;min-width:44px;min-height:44px;text-decoration:none;transition:transform .2s,background-color .2s;display:flex}.nav__link:hover{background:var(--yellow-main);transform:translateY(-2px)}.nav__link:focus{outline:3px solid var(--ink-dark);outline-offset:2px}.hero{padding:var(--space-xl)0;text-align:center}.hero__art{margin-bottom:var(--space-md)}.ascii-scene{color:var(--ink-medium);font-size:clamp(.875rem,2vw,1.125rem);animation:4s ease-in-out infinite shimmer;display:inline-block}@keyframes shimmer{0%,to{opacity:1}50%{opacity:.95}}.hero__title{margin-bottom:var(--space-sm);color:var(--ink-dark);font-size:clamp(1.5rem,4vw,2.5rem)}.blink{animation:1.2s step-end infinite blink}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}.hero__tagline{color:var(--ink-medium);margin-bottom:var(--space-md);max-width:50ch;margin-left:auto;margin-right:auto;font-size:clamp(1rem,2vw,1.25rem)}.cta-primary{padding:var(--space-sm)var(--space-md);background:var(--yellow-main);color:var(--ink-dark);border:2px solid var(--ink-dark);min-height:44px;font-weight:700;text-decoration:none;transition:transform .2s,box-shadow .2s;display:inline-block}.cta-primary:hover{background:var(--yellow-deep);transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.cta-primary:focus{outline:3px solid var(--ink-dark);outline-offset:3px}.section-title{margin-bottom:var(--space-lg);text-align:center}.title-ascii{color:var(--ink-medium);font-size:clamp(.875rem,1.5vw,1rem)}.projects{padding:var(--space-xl)0;background:#ffffff4d}.projects__grid{gap:var(--space-lg);margin-bottom:var(--space-lg);display:grid}@media (min-width:768px){.projects__grid{grid-template-columns:repeat(2,1fr)}}.project-card{background:var(--yellow-cream);position:relative}.project-card__frame{flex-direction:column;display:flex}.project-card__border{color:var(--ink-medium);margin:0;font-size:.875rem}.project-card__content{padding:0 var(--space-md)}.project-card__title{margin-bottom:var(--space-sm)}.project-card__title a{color:var(--ink-dark);border-bottom:2px solid var(--yellow-main);text-decoration:none;transition:border-color .2s}.project-card__title a:hover{border-color:var(--yellow-deep)}.project-card__title a:focus{outline:3px solid var(--ink-dark);outline-offset:2px}.project-card__desc{margin-bottom:var(--space-sm);color:var(--ink-medium)}.project-card__highlights{margin-bottom:var(--space-sm)}.project-card__highlights pre{color:var(--ink-dark);font-size:.875rem;position:relative}.project-card:hover .project-card__highlights pre:before{content:"*";animation:1s ease-in-out sparkle;position:absolute;left:-1ch}@keyframes sparkle{0%{opacity:0;transform:translateY(0)}50%{opacity:1}to{opacity:0;transform:translateY(-10px)}}.project-card__tech{margin-bottom:var(--space-sm);color:var(--ink-medium);font-size:.875rem}.tech-label{color:var(--ink-dark);font-weight:700}.project-card__actions{gap:var(--space-sm);margin-bottom:var(--space-sm);flex-wrap:wrap;display:flex}.btn{padding:var(--space-xs)var(--space-sm);background:var(--yellow-main);color:var(--ink-dark);border:1px solid var(--ink-dark);cursor:pointer;font-family:var(--font-mono);align-items:center;min-height:44px;font-size:.875rem;text-decoration:none;transition:all .2s;display:inline-flex}.btn:hover{background:var(--yellow-deep);transform:translateY(-1px)}.btn:focus{outline:3px solid var(--ink-dark);outline-offset:2px}.btn--secondary{background:0 0}.btn--secondary:hover{background:var(--yellow-light)}.experience{padding:var(--space-xl)0}.timeline{gap:var(--space-md);max-width:60ch;margin:0 auto;display:flex;position:relative}.timeline__track{flex-shrink:0;height:fit-content;position:sticky;top:100px}.timeline__track pre{color:var(--ink-medium);font-size:1rem;line-height:1.8}.timeline__items{flex:1;padding-top:.25rem}.timeline__item{margin-bottom:var(--space-lg);padding-bottom:var(--space-md)}.timeline__item:last-child{margin-bottom:0}.timeline__item h3{color:var(--ink-dark);margin-bottom:var(--space-xs);font-size:1.125rem}.timeline__item--current h3{color:var(--yellow-accent)}.timeline__date{color:var(--ink-medium);margin-bottom:var(--space-sm);font-size:.875rem}.timeline__details{padding-left:0;list-style:none}.timeline__details li{margin-bottom:var(--space-xs);color:var(--ink-medium);padding-left:2ch;position:relative}.timeline__details li:before{content:"▸";color:var(--yellow-deep);position:absolute;left:0}.about{padding:var(--space-xl)0;background:#ffffff4d}.about__content{gap:var(--space-lg);align-items:center;max-width:60ch;margin:0 auto;display:grid}@media (min-width:768px){.about__content{grid-template-columns:auto 1fr}}.about__portrait{text-align:center}.about__portrait pre{color:var(--ink-medium);display:inline-block}.about__text p{color:var(--ink-dark);line-height:1.8}.contact{padding:var(--space-xl)0}.contact__box{text-align:center;max-width:40ch;margin:0 auto}.contact__ascii{color:var(--ink-medium);margin-bottom:var(--space-md);display:inline-block}.contact__links{gap:var(--space-sm);flex-direction:column;align-items:center;display:flex}.contact__link{color:var(--ink-dark);padding:var(--space-xs);border-bottom:2px solid var(--yellow-main);align-items:center;min-height:44px;font-size:1.125rem;text-decoration:none;transition:border-color .2s;display:flex}.contact__link:hover{border-color:var(--yellow-deep)}.contact__link:focus{outline:3px solid var(--ink-dark);outline-offset:2px}.btn--copy{margin-top:var(--space-xs)}.footer{padding:var(--space-md)0;text-align:center}.footer__border{color:var(--ink-medium);margin-bottom:var(--space-sm);font-size:.75rem}.footer__text{color:var(--ink-medium);font-size:.875rem}@media (max-width:768px){.timeline{flex-direction:column;gap:0}.timeline__track{display:none}.timeline__items{padding-left:0}.timeline__item{border-left:2px solid var(--ink-medium);padding-left:var(--space-md);position:relative}.timeline__item:before{content:"○";background:var(--yellow-cream);color:var(--ink-medium);font-size:1rem;position:absolute;top:0;left:-.5rem}.timeline__item--current:before{content:"◉";color:var(--yellow-deep)}}@media (max-width:480px){:root{--font-base:14px}.header{padding:var(--space-xs)0}.logo pre{font-size:.625rem}.nav{gap:var(--space-xs)}.nav__link{padding:var(--space-xs);font-size:.875rem}.project-card__actions{flex-direction:column}.ascii-scene{font-size:.75rem}}@media print{.paper-texture,.skip-link,.btn,.contact__ascii{display:none}body{color:#000;background:#fff}}
