:root{--line-strong:#c9bda6;--font-serif:"Source Serif 4", "Hiragino Mincho ProN", "Yu Mincho", Georgia, serif;--fs-caps-sm:.65rem;--fs-caps:.7rem;--fs-mono-sm:.72rem;--fs-mono:.8rem;--fs-prose:1.0625rem;--fs-lede:clamp(1.125rem, 1.02rem + .55vw, 1.35rem);--fs-h3:1.3125rem;--fs-title:clamp(1.7rem, 3.4vw, 2.15rem);--sec-gap:clamp(3.25rem, 8vh, 5.5rem)}body[data-surface]{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.028'/%3E%3C/svg%3E");line-height:1.65}body[data-surface]:lang(ja){line-height:1.9}::selection{background:var(--accent-soft);color:var(--text)}h1,h2,h3,h4{font-family:var(--font-display);font-optical-sizing:auto;letter-spacing:-.01em;font-weight:430;line-height:1.15}h1:lang(ja),h2:lang(ja),h3:lang(ja),h4:lang(ja){letter-spacing:0}body a{color:inherit;text-underline-offset:.22em;text-decoration:underline 1px;text-decoration-color:color-mix(in srgb, currentColor 32%, transparent);transition:text-decoration-color .2s,color .2s,background-color .2s,border-color .2s}body a:hover{text-underline-offset:.22em;text-decoration:underline}body :focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}body a.caplink{font-family:var(--font-sans);font-size:var(--fs-caps);letter-spacing:.18em;text-transform:uppercase;color:var(--text-dim);font-weight:600;text-decoration:none}body a.caplink:hover{color:var(--accent);text-underline-offset:.3em;text-decoration:underline 1px}body a.caplink.ext:after{content:" ↗";color:var(--text-faint);letter-spacing:0;font-weight:400}body a.caplink.clay{color:var(--accent)}.fullstop{color:var(--show-accent2,var(--accent))}hr.rule-strong{border:0;border-top:1px solid var(--line-strong);margin:0}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.kicker{color:var(--text-faint);font-size:var(--fs-caps);letter-spacing:.24em;text-transform:uppercase;margin:0 0 1.5rem;font-weight:600}.kicker:lang(ja){letter-spacing:.3em;font-weight:500}.folio{counter-reset:sec}.section-title{font-family:var(--font-sans);font-size:var(--fs-caps);letter-spacing:.22em;text-transform:uppercase;color:var(--text-dim);align-items:baseline;gap:1rem;margin:0 0 1.9rem;font-weight:600;display:flex}.section-title:before{counter-increment:sec;content:counter(sec, decimal-leading-zero);font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:var(--fs-mono);letter-spacing:0;color:var(--accent);font-weight:400}.section-title:after{content:"";border-top:1px solid var(--line);flex:1;transform:translateY(-.2em)}.section-title:lang(ja){letter-spacing:.14em}.stand-first{max-width:44ch;font-family:var(--font-serif);font-style:italic;font-size:var(--fs-lede);color:var(--text-dim);margin:1.9rem 0 0;line-height:1.6}.stand-first:lang(ja){font-family:var(--font-display);font-feature-settings:"palt" 1;letter-spacing:.04em;font-size:clamp(1.0625rem,1rem + .5vw,1.25rem);font-style:normal;font-weight:600;line-height:1.75}.metaline{font-size:var(--fs-caps-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--text-faint);margin:.6rem 0 0;font-weight:600}.metaline:lang(ja){letter-spacing:.22em;font-weight:500}.metaline .dot{color:var(--line-strong);margin-inline:.45em}.metaline .chip{font-size:inherit;font-weight:inherit;letter-spacing:inherit;color:inherit;white-space:normal;background:0 0;border:0;border-radius:0;padding:0;display:inline-flex}.metaline .tech-list{flex-wrap:wrap;align-items:baseline;gap:0;display:inline-flex}.metaline .tech-list .chip+.chip:before{content:"·";color:var(--line-strong);margin-inline:.45em}.spec{align-self:start}.spec-caption{font-size:var(--fs-caps-sm);letter-spacing:.2em;text-transform:uppercase;color:var(--text-faint);margin:0 0 .45rem;font-weight:600}.spec-rows{border-bottom:1px solid var(--line);margin:0}.spec-row{border-top:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:1rem;padding:.62rem 0;display:flex}.spec-row dt{font-size:var(--fs-caps-sm);letter-spacing:.16em;text-transform:uppercase;color:var(--text-faint);font-weight:600}.spec-row dd{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--text);margin:0;font-size:.92rem}.spec .langbars{margin-top:1rem}.spec .langbars svg{border-radius:0;height:5px}.spec .langbars .legend{gap:.2rem .9rem;margin-top:.5rem}.spec .langbars .legend li{font-family:var(--font-mono);font-size:var(--fs-mono-sm);gap:.35em}.spec .langbars .legend .dot{border-radius:1px;width:7px;height:7px}.spec .langbars .legend .name{color:var(--text-faint)}.spec .langbars .legend .pct{color:var(--text-dim)}.langs-detail{max-width:40rem}.langs-detail .langbars svg{border-radius:0;height:7px}.langs-detail .langbars .legend{margin-top:1.5rem;display:block}.langs-detail .langbars .legend li{border-top:1px solid var(--line);font-size:var(--text-sm,.875rem);align-items:baseline;gap:.8em;padding:.65rem 0;display:flex}.langs-detail .langbars .legend li:last-child{border-bottom:1px solid var(--line)}.langs-detail .langbars .legend .dot{border-radius:1px;width:8px;height:8px}.langs-detail .langbars .legend .name{color:var(--text-dim)}.langs-detail .langbars .legend .pct{font-size:var(--fs-mono);color:var(--text-dim);margin-left:auto}.case-study .prose{font-family:var(--font-serif);font-size:var(--fs-prose);max-width:66ch;line-height:1.75}.case-study .prose:lang(ja){font-family:var(--font-sans);font-size:1rem;line-height:1.95}.col-row{border-top:1px solid var(--line);grid-template-columns:14rem 1fr;gap:1.5rem;padding:1.15rem 0;display:grid}.col-row:last-child{border-bottom:1px solid var(--line)}.col-label{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:var(--fs-mono);color:var(--accent);padding-top:.2rem}.col-items{color:var(--text-dim);margin:0;font-size:1rem}.col-items .dot{color:var(--line-strong);margin-inline:.55em}@media (width<=720px){.col-row{grid-template-columns:1fr;gap:.5rem}}.card{background:var(--bg-raised);border:1px solid var(--line);border-radius:var(--radius)}.chip{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-overlay);color:var(--text-dim);white-space:nowrap;align-items:baseline;gap:.45em;padding:.16rem .6rem;font-size:.78rem;display:inline-flex}.chip b{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--text);font-weight:400}.evidence-link{font-family:var(--font-mono);font-size:var(--fs-mono);color:var(--text-dim);background:var(--bg-overlay);border:1px solid var(--line);border-radius:var(--radius-sm);overflow-wrap:anywhere;padding:.22rem .6rem;text-decoration:none;transition:border-color .2s,color .2s,background-color .2s}body a.evidence-link{color:var(--text-dim);text-decoration:none}body a.evidence-link:hover{border-color:var(--accent);color:var(--accent);background:var(--bg-raised);text-decoration:none}.receipt-label{font-size:var(--fs-caps-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--text-faint);font-weight:600}.project-card .name{font-family:var(--font-display);font-optical-sizing:auto;letter-spacing:-.005em;font-size:1.18rem;font-weight:450}.project-card .summary{font-family:var(--font-serif)}body a.project-card{box-shadow:none;text-decoration:none}body a.project-card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-md,none);text-decoration:none}.tl-frame .timeline:before{background:var(--line-strong);border-radius:0;width:1px;left:4px}.tl-frame .event:before{border:1px solid var(--bg);background:var(--line-strong);width:9px;height:9px}.tl-frame .event:last-child:before{background:var(--show-accent2,var(--accent))}.tl-frame .event-title{font-family:var(--font-serif);font-size:1.08rem;font-weight:500}.finis{margin:var(--sec-gap) 0 0;text-align:center;font-family:var(--font-mono);font-size:var(--fs-mono);color:var(--show-accent2,var(--accent));letter-spacing:.6em;padding-left:.6em}@media (prefers-reduced-motion:no-preference){body[data-surface=showcase] .rise{animation:.7s cubic-bezier(.2,.6,.2,1) both ql-rise}body[data-surface=showcase] .rise.d1{animation-delay:80ms}body[data-surface=showcase] .rise.d2{animation-delay:.16s}body[data-surface=showcase] .rise.d3{animation-delay:.24s}body[data-surface=showcase] .rise.d4{animation-delay:.32s}body[data-surface=showcase] .rule-draw{transform-origin:0;animation:.9s .45s both ql-draw}}@keyframes ql-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes ql-draw{0%{transform:scaleX(0)}}@media print{body[data-surface]{background-image:none}.finis{display:none}.evidence-link,.chip{color:#333;background:#fff;border-color:#ccc}}
