.photos-items{grid-auto-flow:dense;gap:12px;display:grid}@media (min-width:768px){.photos-items{grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:16px}}.photos-item{cursor:pointer;border-radius:var(--radius-sm);position:relative;overflow:hidden}.photos-item:after{pointer-events:none;content:"";border:1px solid color-mix(in srgb, var(--cl-main-50) 14%, transparent);border-radius:inherit;opacity:0;transition:opacity .35s var(--ease-out);position:absolute;inset:0}.photos-item:hover:after{opacity:1}.photos-item:nth-child(5n){grid-column:span 2}.photos-item:nth-child(3n),.photos-item:nth-child(5n){grid-row:span 2}.photos-item:last-child{grid-row:auto}.photos-item-image{object-fit:cover;border-radius:var(--radius-sm);filter:saturate(.92);width:100%;height:100%;transition:filter .45s var(--ease-out),transform .6s var(--ease-out);display:block}.photos-item-image:hover{filter:saturate(1.03);transform:scale(1.015)}
.projects-items{scrollbar-width:thin;gap:20px;margin-left:-24px;margin-right:-24px;padding-left:24px;padding-right:24px;display:flex;overflow:auto}@media (min-width:768px){.projects-items{margin-left:-32px;margin-right:-32px;padding-left:32px;padding-right:32px}}.projects-item-description{text-overflow:ellipsis;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.projects-item{background:color-mix(in srgb, var(--surface) 72%, transparent);border:1px solid var(--stroke-subtle);border-radius:var(--radius-md);min-width:300px;max-width:340px;transition:color .2s var(--ease-out),background-color .3s var(--ease-out),border-color .3s var(--ease-out);flex-direction:column;padding:12px;display:flex;position:relative;overflow:hidden}.projects-item:before{z-index:1;content:"";background:var(--cl-accent-400);transform-origin:0;height:1px;transition:transform .4s var(--ease-out);position:absolute;top:0;left:0;right:0;transform:scaleX(0)}.projects-item:hover{color:var(--cl-main-50);background:var(--surface);border-color:var(--cl-accent-400)}.projects-item:hover:before{transform:scaleX(1)}.projects-item:hover .projects-item-description{color:var(--cl-main-300)}.projects-item-image{aspect-ratio:16/9;object-fit:cover;border-radius:var(--radius-sm);filter:saturate(.9);width:100%;height:auto;transition:filter .4s var(--ease-out)}.projects-item:hover .projects-item-image{filter:saturate(1.5)}
.intro{align-items:center;padding-top:40px;padding-bottom:48px;display:flex;position:relative;overflow:clip}@media (min-width:768px){.intro{padding-top:40px;padding-bottom:72px}}.intro-inner{z-index:1;flex-direction:column;gap:36px;width:100%;display:flex;position:relative}@media (min-width:1024px){.intro-inner{grid-template-columns:minmax(0,1fr) minmax(0,.86fr);align-items:center;column-gap:64px;display:grid}}@media (min-width:1280px){.intro-inner{column-gap:80px}}.sky{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.sky-field{--sky-x:0;--sky-y:0;transform:translate3d(calc(var(--sky-x) * -18px), calc(var(--sky-y) * -14px), 0);position:absolute;inset:0;-webkit-mask-image:radial-gradient(92% 52% at 50% 14%,#000 16%,#0000 80%);mask-image:radial-gradient(92% 52% at 50% 14%,#000 16%,#0000 80%)}@media (min-width:1024px){.sky-field{-webkit-mask-image:radial-gradient(76% 74% at 64% 40%,#000 18%,#0000 84%);mask-image:radial-gradient(76% 74% at 64% 40%,#000 18%,#0000 84%)}}.sky-star{background:var(--cl-main-50);border-radius:var(--radius-full);box-shadow:0 0 4px color-mix(in srgb, var(--cl-main-50) 45%, transparent);opacity:.4;animation-name:sky-twinkle;animation-timing-function:ease-in-out;animation-iteration-count:infinite;position:absolute}.sky-comet{background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--cl-main-50) 80%, transparent), transparent);opacity:0;width:72px;height:1px;position:absolute;top:0;left:0}.sky-comet.is-flying{animation:sky-comet var(--mdur,.8s) linear forwards}@keyframes sky-twinkle{0%,to{opacity:.28;transform:scale(1)}45%{opacity:.95;transform:scale(1.35)}70%{opacity:.45;transform:scale(.9)}}@keyframes sky-comet{0%{opacity:0;transform:translate3d(var(--mx0), var(--my0), 0) rotate(var(--mrot))}12%{opacity:1}78%{opacity:1}to{opacity:0;transform:translate3d(var(--mx1), var(--my1), 0) rotate(var(--mrot))}}.intro-copy{min-width:0}.intro-head{align-items:center;gap:18px;padding-bottom:24px;display:flex}.intro-stamp{aspect-ratio:1;background:var(--surface);border:1px solid color-mix(in srgb, var(--cl-main-500) 26%, transparent);border-radius:var(--radius-sm);isolation:isolate;flex-shrink:0;width:64px;display:block;overflow:hidden}.intro-stamp picture{width:100%;height:100%;display:block}@media (min-width:768px){.intro-stamp{width:72px}}.intro-stamp-image{object-fit:cover;object-position:center 16%;width:100%;height:100%;display:block}.intro-heading{min-width:0}.intro-copy .intro-name{color:var(--cl-main-50);letter-spacing:-.035em;text-wrap:balance;margin:0;font-size:clamp(1.625rem,3vw,2.125rem);line-height:1.05}.intro-copy .intro-lead{max-width:26em;font-family:var(--font-display),Georgia,serif;color:var(--cl-main-100);margin-top:10px;font-size:clamp(1rem,1.4vw,1.0625rem);font-style:italic;line-height:1.35}.intro-record{border-top:1px solid var(--stroke-subtle);margin:0}.intro-record-row{grid-template-columns:minmax(0,1fr);gap:8px;padding:18px 0;display:grid}.intro-record-row+.intro-record-row{border-top:1px solid var(--stroke-subtle)}@media (min-width:600px){.intro-record-row{grid-template-columns:84px minmax(0,1fr);align-items:baseline;gap:20px}}.intro-record-key{font-family:var(--font-mono),monospace;color:var(--cl-main-500);text-transform:uppercase;letter-spacing:.14em;font-size:.6875rem;line-height:1.4}.intro-record-value{min-width:0;margin:0}.intro-focus{flex-wrap:wrap;gap:6px 0;margin:0;padding:0;list-style:none;display:flex}.intro-focus-item{font-family:var(--font-mono),monospace;color:var(--cl-main-400);letter-spacing:.04em;align-items:center;font-size:.75rem;line-height:1;display:inline-flex}.intro-focus-item:not(:last-child):after{content:"";background:color-mix(in srgb, var(--cl-accent-400) 65%, transparent);border-radius:var(--radius-full);width:3px;height:3px;margin-inline:12px}.intro-copy .intro-body{max-width:48ch;color:var(--cl-main-300);margin:0;font-size:.9375rem;line-height:1.65}@media (min-width:768px){.intro-copy .intro-body{font-size:1rem}}.intro-social{flex-wrap:wrap;gap:10px;display:flex}@media screen and (max-width:400px){.intro-social{flex-direction:column}}.intro-social-link{min-height:42px;color:var(--cl-main-100);background:color-mix(in srgb, var(--cl-main-50) 4%, transparent);border:1px solid var(--stroke-subtle);transition:color .2s var(--ease-out),background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .2s var(--ease-out);border-radius:14px;outline:none;align-items:center;gap:8px;padding:10px 18px;font-size:.875rem;font-weight:500;line-height:1;display:inline-flex}.intro-social-link:hover{color:var(--cl-main-50);background:color-mix(in srgb, var(--cl-main-50) 8%, transparent);border-color:color-mix(in srgb, var(--cl-accent-400) 40%, var(--stroke-subtle));transform:translateY(-1px)}.intro-social-link:focus-visible{color:var(--cl-main-50);border-color:color-mix(in srgb, var(--cl-accent-400) 55%, transparent);box-shadow:0 0 0 3px color-mix(in srgb, var(--cl-accent-400) 18%, transparent)}.intro-social-link:active{transform:translateY(0)}.intro-social-icon{color:var(--cl-main-300);transition:color .2s var(--ease-out);flex-shrink:0;display:block}.intro-social-link:hover .intro-social-icon,.intro-social-link:focus-visible .intro-social-icon{color:var(--cl-accent-400)}.intro-social-label{line-height:1}.intro-chain{--chain-surface:color-mix(in srgb, var(--surface) 82%, transparent);background:var(--chain-surface);border:1px solid color-mix(in srgb, var(--cl-accent-400) 14%, var(--stroke-subtle));border-radius:var(--radius-md);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);min-width:0;padding:24px 24px 22px;position:relative}.intro-chain:after{content:"";background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--cl-accent-400) 42%, transparent) 24%, color-mix(in srgb, var(--cl-accent-400) 42%, transparent) 76%, transparent);height:1px;position:absolute;inset:-1px -1px auto}@media (min-width:768px){.intro-chain{padding:28px 28px 26px}}.chain-label{font-family:var(--font-mono),monospace;letter-spacing:.04em;align-items:center;gap:12px;margin:0 0 16px;font-size:.75rem;line-height:1;display:flex}.chain-live{background:var(--cl-accent-400);border-radius:var(--radius-full);flex-shrink:0;width:5px;height:5px;animation:3.2s ease-in-out infinite chain-breathe}.chain-label-handle{color:var(--cl-main-200)}.chain-label-note{color:var(--cl-main-500);flex:1;align-items:center;gap:12px;display:flex}.chain-label-note:before{content:"";background:var(--stroke-subtle);flex:1;height:1px}@keyframes chain-breathe{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--cl-accent-400) 30%, transparent);opacity:.4}50%{box-shadow:0 0 0 3px color-mix(in srgb, var(--cl-accent-400) 12%, transparent);opacity:1}}.echo{--echo-surface:var(--chain-surface,color-mix(in srgb, var(--surface) 82%, transparent))}.echo-field{aspect-ratio:1;width:100%;max-width:288px;margin-inline:auto;position:relative;container-type:inline-size}.echo-rings{fill:none;width:100%;height:100%;position:absolute;inset:0}.echo-core{fill:var(--cl-accent-400);animation:3.2s ease-in-out infinite echo-core-breathe}@keyframes echo-core-breathe{0%,to{opacity:.45}50%{opacity:1}}.echo-ring{stroke:color-mix(in srgb, var(--cl-main-500) 40%, transparent);stroke-width:.4px;stroke-dasharray:1.8 12;transition:stroke .4s var(--ease-out),stroke-width .4s var(--ease-out)}.echo-ring[data-lit]{stroke:color-mix(in srgb, var(--cl-accent-400) 55%, transparent);stroke-dasharray:1.2 4.2;transform-origin:50%;transform-box:fill-box;animation-name:echo-turn;animation-timing-function:linear;animation-iteration-count:infinite}.echo-ring[data-current]{stroke:var(--cl-accent-400);stroke-width:.9px}.echo-labels{margin:0;padding:0;list-style:none;position:absolute;inset:0}.echo-label{position:absolute;transform:translate(-4px,-50%)}.echo-chip{font-family:var(--font-mono),monospace;color:var(--cl-main-400);text-transform:uppercase;letter-spacing:.14em;cursor:pointer;background:color-mix(in srgb, var(--cl-main-50) 4%, var(--echo-surface));border:1px solid var(--stroke-subtle);border-radius:var(--radius-full);transition:color .2s var(--ease-out),background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .2s var(--ease-out);outline:none;align-items:center;padding:clamp(2.5px,1.4cqi,4px) clamp(6px,3.1cqi,9px);font-size:clamp(.5rem,3.4cqi,.625rem);line-height:1;display:inline-flex}.echo-chip-value{white-space:nowrap;clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.echo-label[data-lit] .echo-chip{color:var(--cl-main-100);border-color:color-mix(in srgb, var(--cl-main-400) 26%, var(--stroke-subtle))}.echo-label .echo-chip[aria-current=true]{color:var(--cl-accent-300);background:color-mix(in srgb, var(--cl-accent-400) 13%, var(--echo-surface));border-color:color-mix(in srgb, var(--cl-accent-400) 46%, transparent)}.echo-label .echo-chip:hover{color:var(--cl-main-50);background:color-mix(in srgb, var(--cl-main-50) 9%, var(--echo-surface));border-color:color-mix(in srgb, var(--cl-accent-400) 44%, var(--stroke-subtle));transform:translateY(-1px)}.echo-label .echo-chip:focus-visible{color:var(--cl-main-50);border-color:color-mix(in srgb, var(--cl-accent-400) 55%, transparent);box-shadow:0 0 0 3px color-mix(in srgb, var(--cl-accent-400) 18%, transparent)}.echo-label .echo-chip:active{transform:translateY(0)}.echo-panel{border-top:1px solid var(--stroke-subtle);min-height:9.5em;margin-top:20px;padding-top:16px}.echo-readout{animation:echo-in .35s var(--ease-out) both}.echo-meta{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.14em;justify-content:space-between;align-items:baseline;gap:12px;margin:0 0 10px;font-size:.625rem;line-height:1;display:flex}.echo-via{min-width:0;color:var(--cl-main-500)}.echo-count{font-variant-numeric:tabular-nums;color:var(--cl-accent-400);flex-shrink:0}.echo-count-total{color:var(--cl-main-600)}.echo-value{font-family:var(--font-mono),monospace;color:var(--cl-main-50);overflow-wrap:anywhere;margin:0;font-size:.875rem;line-height:1.5}.echo-detail{max-width:46ch;font-family:var(--font-display),Georgia,serif;color:var(--cl-main-300);margin:8px 0 0;font-size:.9375rem;font-style:italic;line-height:1.6}@keyframes echo-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes echo-turn{0%{stroke-dasharray:1.2 4.2;transform:rotate(0)}50%{stroke-dasharray:2 2}to{stroke-dasharray:1.2 4.2;transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.echo-ring[data-lit],.sky-star,.chain-live,.echo-core,.echo-readout{animation:none}.sky-comet{display:none}.sky-field{transform:none}.echo-chip,.echo-ring,.intro-social-link{transition:none}}
.blog-list{border-top:1px solid var(--stroke-subtle);margin:0;padding:0;list-style:none}.blog-row{border-bottom:1px solid var(--stroke-subtle);transition:background-color .2s var(--ease-out);border-radius:6px;grid-template-columns:120px 1fr;align-items:start;gap:16px;margin:0 -6px;padding:16px 6px;display:grid}@media (min-width:768px){.blog-row{grid-template-columns:220px 1fr;gap:24px}}.blog-row:hover{background:color-mix(in srgb, var(--cl-main-50) 4%, transparent)}.blog-image{aspect-ratio:2;object-fit:cover;filter:saturate(.75);width:100%;height:auto;transition:filter .3s var(--ease-out);border-radius:6px;display:block}.blog-row:hover .blog-image{filter:saturate()}.blog-image--empty{background:color-mix(in srgb, var(--cl-main-50) 4%, transparent);border:1px dashed var(--stroke-subtle)}.blog-body{flex-direction:column;gap:6px;min-width:0;display:flex}.blog-date{font-family:var(--font-mono),monospace;color:var(--cl-main-500);font-size:.75rem}.blog-title{color:var(--cl-main-50);margin:0;font-size:1rem;line-height:1.4}.blog-row:hover .blog-title{color:var(--cl-accent-400)}.blog-description{-webkit-line-clamp:2;line-clamp:2;color:var(--cl-main-400);-webkit-box-orient:vertical;margin:0;font-size:.8125rem;line-height:1.5;display:-webkit-box;overflow:hidden}@media (prefers-reduced-motion:reduce){.blog-row,.blog-image,.blog-title{transition:none}}
