@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap";:root{--font-heading: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-body: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "IBM Plex Mono", "SF Mono", "Fira Code", monospace;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 2rem;--spacing-xl: 4rem;--color-bg: #121110;--color-surface: #1c1b19;--color-border: #2e2c28;--color-text: #f0ede8;--color-text-muted: #8a857d;--color-accent: #b5afa5}[data-theme=dark]{--color-bg: #121110;--color-surface: #1c1b19;--color-border: #2e2c28;--color-text: #f0ede8;--color-text-muted: #8a857d;--color-accent: #b5afa5}[data-theme=light]{--color-bg: #f9f7f2;--color-surface: #f1efe8;--color-border: #e2dfd6;--color-text: #2c2416;--color-text-muted: #7d7568;--color-accent: #5c503e}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-body);font-size:1rem;line-height:1.5;color:var(--color-text);background-color:var(--color-bg);min-height:100vh;transition:background-color .2s ease,color .2s ease}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);font-weight:500;line-height:1.2}p{line-height:1.7}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--color-text-muted);outline-offset:2px}::selection{background-color:var(--color-text);color:var(--color-bg)}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}img{max-width:100%;height:auto;display:block}button{font-family:inherit;font-size:inherit;background:none;border:none;cursor:pointer}ul,ol{list-style:none}.page-loader{display:flex;align-items:center;justify-content:center;min-height:50vh;width:100%}.page-loader__spinner{width:32px;height:32px;border:2px solid var(--color-border);border-top-color:var(--color-text-muted);border-radius:50%;animation:page-loader-spin .8s linear infinite}@keyframes page-loader-spin{to{transform:rotate(360deg)}}.theme-toggle{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;color:var(--color-text-muted);background:transparent;border:none;cursor:pointer;transition:color .2s ease}.theme-toggle:hover{color:var(--color-text)}.theme-toggle__icon{display:block}.status-indicator{position:relative;display:inline-flex;align-items:center;gap:.5rem;cursor:pointer}.status-indicator__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-indicator__dot--pulse{animation:statusPulse 2s ease-in-out infinite}.status-indicator--small .status-indicator__dot{width:6px;height:6px}@keyframes statusPulse{0%,to{opacity:1}50%{opacity:.5}}.status-indicator__label{font-family:var(--font-body);font-size:.875rem;color:var(--color-text-muted)}.status-indicator--small .status-indicator__label{font-size:.75rem}.status-indicator__tooltip{position:absolute;left:0;top:calc(100% + 8px);padding:.375rem .625rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:4px;font-family:var(--font-body);font-size:.75rem;color:var(--color-text);white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .15s ease,visibility .15s ease;pointer-events:none;z-index:10}.status-indicator__tooltip:after{content:"";position:absolute;bottom:100%;left:12px;border:5px solid transparent;border-bottom-color:var(--color-border)}.status-indicator:hover .status-indicator__tooltip,.status-indicator--active .status-indicator__tooltip{opacity:1;visibility:visible}.status-indicator:has(.status-indicator__label) .status-indicator__tooltip{display:none}.header{display:flex;justify-content:space-between;align-items:center;padding:2rem 0;width:100%}.header__left{display:flex;align-items:center;gap:.75rem}.header__logo{font-family:var(--font-heading);font-size:1.5rem;font-weight:600;color:var(--color-text);text-decoration:none;letter-spacing:-.02em;display:flex;align-items:center}.header__logo:hover{color:var(--color-accent)}.header__logo-img{height:2rem;width:auto;transition:opacity .2s ease}.header__logo:hover .header__logo-img{opacity:.8}.header__right{display:flex;align-items:center;gap:1.5rem}.header__nav{display:flex;gap:2rem}.nav-link{font-family:var(--font-body);font-size:.875rem;font-weight:400;color:var(--color-text-muted);text-decoration:none;transition:color .2s ease;text-transform:lowercase}.nav-link:hover,.nav-link.active{color:var(--color-text)}@media(max-width:640px){.header{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;gap:1rem;padding:1.5rem 0}.header__left{grid-column:1;grid-row:1}.header__right{display:contents}.header__nav{grid-column:1 / -1;grid-row:2;gap:1.5rem}.nav-link{font-size:.8125rem}}.dot-clock{display:flex;align-items:center;gap:2px}.dot-clock__char{display:flex;flex-direction:column;gap:1px}.dot-clock__char--colon{margin:0 1px}.dot-clock__period{display:flex;gap:2px;margin-left:4px}.dot-clock__row{display:flex;gap:1px}.dot-clock__dot{width:3px;height:3px;border-radius:.5px;background-color:var(--color-border);transition:background-color .15s ease}.dot-clock__dot--active{background-color:var(--color-text-muted)}.dot-clock:hover .dot-clock__dot--active{background-color:var(--color-text)}.dot-clock--large{gap:6px}.dot-clock--large .dot-clock__char{gap:3px}.dot-clock--large .dot-clock__char--colon{margin:0 3px}.dot-clock--large .dot-clock__period{gap:6px;margin-left:12px}.dot-clock--large .dot-clock__row{gap:3px}.dot-clock--large .dot-clock__dot{width:10px;height:10px;border-radius:2px}.dot-clock--large .dot-clock__dot--active{background-color:var(--color-accent, #6366f1);box-shadow:0 0 8px var(--color-accent, #6366f1)}@media(max-width:640px){.dot-clock--large{gap:4px}.dot-clock--large .dot-clock__char{gap:2px}.dot-clock--large .dot-clock__char--colon{margin:0 2px}.dot-clock--large .dot-clock__period{gap:4px;margin-left:8px}.dot-clock--large .dot-clock__row{gap:2px}.dot-clock--large .dot-clock__dot{width:6px;height:6px;border-radius:1px}.dot-clock--large .dot-clock__dot--active{box-shadow:0 0 4px var(--color-accent, #6366f1)}}@media(max-width:400px){.dot-clock--large{gap:3px}.dot-clock--large .dot-clock__char{gap:1.5px}.dot-clock--large .dot-clock__char--colon{margin:0 1px}.dot-clock--large .dot-clock__period{gap:3px;margin-left:6px}.dot-clock--large .dot-clock__row{gap:1.5px}.dot-clock--large .dot-clock__dot{width:5px;height:5px}}.footer{display:flex;justify-content:space-between;align-items:center;padding:2rem 0;margin-top:auto;width:100%;border-top:1px solid var(--color-border)}.footer__links{display:flex;gap:1.5rem}.footer__link{font-family:var(--font-body);font-size:.8125rem;font-weight:400;color:var(--color-text-muted);text-decoration:none;text-transform:lowercase;transition:color .2s ease}.footer__link:hover{color:var(--color-text)}.footer__copyright{font-family:var(--font-body);font-size:.8125rem;color:var(--color-text-muted);margin:0}.footer__clock-link{text-decoration:none;transition:transform .2s ease,opacity .2s ease}.footer__clock-link:hover{transform:scale(1.05)}@media(max-width:640px){.footer{flex-direction:column-reverse;gap:1rem;padding:1.5rem 0}.footer__links{gap:1rem}}.layout{min-height:100vh;width:100%}.layout__container{display:flex;flex-direction:column;min-height:100vh;max-width:720px;margin:0 auto;padding:0 2rem}.layout__main{flex:1;display:flex;flex-direction:column;padding:2rem 0}@media(max-width:640px){.layout__container{padding:0 1.5rem}.layout__main{padding:1.5rem 0}}.gallery{display:grid;gap:.5rem;margin-top:.75rem;border-radius:8px;overflow:hidden}.gallery--single{grid-template-columns:1fr}.gallery--duo{grid-template-columns:repeat(2,1fr)}.gallery--trio{grid-template-columns:1.2fr 1fr;grid-template-rows:1fr 1fr;height:400px}.gallery--trio .gallery__item:first-child{grid-row:span 2}.gallery--quad{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr)}.gallery--multi{grid-template-columns:repeat(3,1fr);grid-template-rows:1fr 1fr;height:500px}.gallery--multi .gallery__item:first-child{grid-column:span 2;grid-row:span 2}.gallery--multi .gallery__item:not(:first-child){aspect-ratio:auto;height:100%}.gallery__item{position:relative;padding:0;border:none;background:var(--color-surface);cursor:pointer;overflow:hidden;aspect-ratio:16 / 10;animation:galleryFadeIn .4s ease backwards;animation-delay:var(--delay, 0s)}.gallery--trio .gallery__item:first-child,.gallery--multi .gallery__item:first-child{aspect-ratio:auto}.gallery--trio .gallery__item:not(:first-child){aspect-ratio:auto;height:100%}@keyframes galleryFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.gallery__image{width:100%;height:100%;object-fit:cover;transition:transform .4s cubic-bezier(.16,1,.3,1)}.gallery__item:hover .gallery__image{transform:scale(1.05)}.gallery__overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0000;transition:background .3s ease}.gallery__item:hover .gallery__overlay{background:#0000004d}.gallery__icon{color:#fff;opacity:0;transform:scale(.8);transition:opacity .3s ease,transform .3s ease}.gallery__item:hover .gallery__icon{opacity:1;transform:scale(1)}.lightbox{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;animation:lightboxFadeIn .3s ease}@keyframes lightboxFadeIn{0%{opacity:0}to{opacity:1}}.lightbox__backdrop{position:absolute;inset:0;background:#000000eb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.lightbox__content{position:relative;max-width:90vw;max-height:85vh;animation:lightboxZoomIn .3s cubic-bezier(.16,1,.3,1)}@keyframes lightboxZoomIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.lightbox__image{max-width:90vw;max-height:85vh;object-fit:contain;border-radius:4px;box-shadow:0 25px 50px -12px #00000080}.lightbox__close{position:absolute;top:1.5rem;right:1.5rem;z-index:10;display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;color:#fff;background:#ffffff1a;border:none;border-radius:50%;cursor:pointer;transition:background .2s ease,transform .2s ease}.lightbox__close:hover{background:#fff3;transform:scale(1.05)}.lightbox__nav{position:absolute;top:50%;z-index:10;display:flex;align-items:center;justify-content:center;width:48px;height:48px;padding:0;color:#fff;background:#ffffff1a;border:none;border-radius:50%;cursor:pointer;transform:translateY(-50%);transition:background .2s ease,transform .2s ease}.lightbox__nav:hover{background:#fff3}.lightbox__nav--prev{left:1.5rem}.lightbox__nav--prev:hover{transform:translateY(-50%) translate(-2px)}.lightbox__nav--next{right:1.5rem}.lightbox__nav--next:hover{transform:translateY(-50%) translate(2px)}.lightbox__counter{position:absolute;bottom:1.5rem;left:50%;transform:translate(-50%);padding:.5rem 1rem;font-family:var(--font-mono);font-size:.8125rem;color:#ffffffb3;background:#00000080;border-radius:20px}@media(max-width:640px){.gallery--trio{grid-template-columns:1fr;grid-template-rows:auto;height:auto}.gallery--trio .gallery__item:first-child{grid-row:span 1}.gallery--trio .gallery__item:not(:first-child){aspect-ratio:16 / 9;height:auto}.gallery--multi{grid-template-columns:repeat(2,1fr);grid-template-rows:auto;height:auto}.gallery--multi .gallery__item:first-child{grid-column:span 2;grid-row:span 1}.gallery--multi .gallery__item:not(:first-child){aspect-ratio:16 / 9;height:auto}.gallery__item{aspect-ratio:16 / 9}.lightbox__nav{width:40px;height:40px}.lightbox__nav--prev{left:.75rem}.lightbox__nav--next{right:.75rem}.lightbox__close{top:1rem;right:1rem;width:40px;height:40px}}.page-transition{display:contents}.page-transition__item{animation:pageReveal .6s cubic-bezier(.16,1,.3,1) backwards;animation-delay:var(--stagger-delay, 0s)}@keyframes pageReveal{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.page-transition__item{animation:pageFadeOnly .3s ease backwards;animation-delay:var(--stagger-delay, 0s)}@keyframes pageFadeOnly{0%{opacity:0}to{opacity:1}}}.firework-container{position:fixed;pointer-events:none;z-index:9999}.firework-rocket{position:absolute;width:6px;height:6px;border-radius:50%;background:#fff;box-shadow:0 0 10px #fff,0 0 20px var(--rocket-color),0 0 40px var(--rocket-color);animation:rocket-launch .7s ease-out forwards;transform:translate(-50%,-50%)}.firework-rocket:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:3px;height:50px;background:linear-gradient(to bottom,var(--rocket-color),orange,transparent);opacity:.9;filter:blur(1px)}@keyframes rocket-launch{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}80%{opacity:1}to{opacity:0;transform:translate(-50%,calc(-50% - var(--launch-height))) scale(.3)}}.firework-burst{position:absolute;transform:translate(-50%,calc(-50% - var(--launch-height)));opacity:0;animation:burst-appear .05s ease-out .65s forwards}@keyframes burst-appear{to{opacity:1}}.firework-flash{position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 0 30px 20px #fff,0 0 60px 40px var(--color),0 0 100px 60px var(--color);opacity:0;animation:flash-bang .3s ease-out forwards;animation-delay:.65s;transform:translate(-50%,-50%)}@keyframes flash-bang{0%{opacity:1;transform:translate(-50%,-50%) scale(0)}30%{opacity:1;transform:translate(-50%,-50%) scale(1.5)}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}.firework-particle{position:absolute;width:var(--size, 8px);height:var(--size, 8px);border-radius:50%;background:var(--color);box-shadow:0 0 8px var(--color),0 0 16px var(--color),0 0 30px var(--color);opacity:0;animation:particle-explode 2.4s ease-out forwards;animation-delay:calc(.7s + var(--delay));transform:translate(-50%,-50%)}@keyframes particle-explode{0%{opacity:1;transform:translate(-50%,-50%) scale(0)}8%{opacity:1;transform:translate(calc(-50% + var(--tx) * .4),calc(-50% + var(--ty) * .4)) scale(2)}25%{opacity:1;transform:translate(calc(-50% + var(--tx) * .85),calc(-50% + var(--ty) * .85)) scale(1.2)}50%{opacity:.9;transform:translate(calc(-50% + var(--tx)),calc(-50% + var(--ty) + 30px)) scale(1)}75%{opacity:.5}to{opacity:0;transform:translate(calc(-50% + var(--tx) * 1.05),calc(-50% + var(--ty) + 150px)) scale(.3)}}.firework-comet{position:absolute;width:6px;height:6px;border-radius:50%;background:var(--color);box-shadow:0 0 6px var(--color),0 0 12px var(--color);opacity:0;animation:comet-streak 1.8s ease-out forwards;animation-delay:calc(.7s + var(--delay));transform:translate(-50%,-50%)}.firework-comet:after{content:"";position:absolute;width:4px;height:20px;background:linear-gradient(to bottom,var(--color),transparent);border-radius:2px;transform-origin:top center;transform:rotate(var(--angle)) translateY(-100%);opacity:.7}@keyframes comet-streak{0%{opacity:1;transform:translate(-50%,-50%) scale(0)}15%{opacity:1;transform:translate(calc(-50% + var(--tx) * .6),calc(-50% + var(--ty) * .6)) scale(1.3)}60%{opacity:.6}to{opacity:0;transform:translate(calc(-50% + var(--tx) * 1.3),calc(-50% + var(--ty) * 1.3 + 100px)) scale(.2)}}.firework-sparkle{position:absolute;width:4px;height:4px;border-radius:50%;background:#fff;box-shadow:0 0 6px #fff,0 0 12px #fff,0 0 20px #fff;opacity:0;animation:sparkle-burst 2s ease-out forwards;animation-delay:calc(.75s + var(--delay));transform:translate(-50%,-50%)}@keyframes sparkle-burst{0%{opacity:1;transform:translate(-50%,-50%) scale(0)}10%{opacity:1;transform:translate(calc(-50% + var(--tx) * .4),calc(-50% + var(--ty) * .4)) scale(1.5)}30%{opacity:1;transform:translate(calc(-50% + var(--tx) * .7),calc(-50% + var(--ty) * .7)) scale(1)}60%{opacity:.5}to{opacity:0;transform:translate(calc(-50% + var(--tx)),calc(-50% + var(--ty) + 100px)) scale(0)}}.firework-glitter{position:absolute;width:3px;height:3px;border-radius:50%;background:var(--color);box-shadow:0 0 4px var(--color),0 0 8px var(--color);opacity:0;animation:glitter-fall 2.8s ease-out forwards;animation-delay:calc(.9s + var(--delay));transform:translate(-50%,-50%)}@keyframes glitter-fall{0%{opacity:0;transform:translate(calc(-50% + var(--tx) * .5),calc(-50% + var(--ty) * .5))}10%{opacity:1}30%{opacity:1}to{opacity:0;transform:translate(calc(-50% + var(--tx) * .7 + var(--drift)),calc(-50% + var(--ty) * .7 + 250px))}}.firework-ring{position:absolute;width:10px;height:10px;border-radius:50%;border:3px solid var(--color);box-shadow:0 0 15px var(--color),inset 0 0 15px var(--color);opacity:0;animation:ring-expand 1.2s ease-out forwards;animation-delay:var(--ring-delay, .7s);transform:translate(-50%,-50%)}@keyframes ring-expand{0%{opacity:.9;transform:translate(-50%,-50%) scale(0)}40%{opacity:.5}to{opacity:0;transform:translate(-50%,-50%) scale(var(--ring-scale, 12))}}.firework-crackle{position:absolute;opacity:0;animation:crackle-appear .05s ease-out forwards;animation-delay:var(--crackle-delay)}@keyframes crackle-appear{to{opacity:1}}.firework-crackle-particle{position:absolute;width:5px;height:5px;border-radius:50%;background:#fff;box-shadow:0 0 8px #fff,0 0 15px var(--color);animation:crackle-burst .8s ease-out forwards;transform:translate(-50%,-50%)}@keyframes crackle-burst{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(calc(-50% + var(--tx)),calc(-50% + var(--ty) + 30px)) scale(0)}}.firework-star{position:absolute;width:0;height:0;opacity:0;animation:star-burst 2.2s ease-out forwards;animation-delay:calc(.72s + var(--delay));filter:drop-shadow(0 0 6px var(--color)) drop-shadow(0 0 12px var(--color))}.firework-star:before{content:"★";font-size:var(--star-size, 12px);color:var(--color)}@keyframes star-burst{0%{opacity:1;transform:translate(-50%,-50%) scale(0) rotate(0)}15%{opacity:1;transform:translate(calc(-50% + var(--tx) * .5),calc(-50% + var(--ty) * .5)) scale(1.5) rotate(180deg)}40%{opacity:1;transform:translate(calc(-50% + var(--tx) * .9),calc(-50% + var(--ty) * .9)) scale(1) rotate(360deg)}to{opacity:0;transform:translate(calc(-50% + var(--tx)),calc(-50% + var(--ty) + 120px)) scale(.3) rotate(720deg)}}.typewriter{display:inline-flex;align-items:center;min-height:1.2em}.typewriter__text{min-width:1ch}.typewriter__text:empty:before{content:" ";visibility:hidden}.typewriter__cursor{display:inline-block;margin-left:2px;font-weight:300;color:var(--accent);animation:blink 1s step-end infinite}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}
