/* ===============================================================
   Harunosuke Works — style
   色は :root だけで管理しています
   =============================================================== */
:root{
  --bg:#ffffff;
  --paper:#f6f7f6;
  --ink:#111413;
  --muted:#6b716f;
  --line:#e3e6e5;
  --accent:#20c3bd;      /* 部のターコイズ */
  --accent-deep:#0b8f8a; /* 文字に使うときの濃いターコイズ */
  --accent-soft:#dff6f5;
  --max:1240px;
  --ease:cubic-bezier(.2,.7,.1,1);
  --font:"Noto Sans JP","Hiragino Sans","Yu Gothic",system-ui,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);line-height:1.75;overflow-x:hidden}
img,video{display:block;max-width:100%}
a{color:inherit}
.wrap{max-width:var(--max);margin:0 auto;padding:0 24px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* ---------- header ---------- */
.site-header{position:fixed;inset:0 0 auto 0;z-index:40;background:rgba(255,255,255,.78);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .4s var(--ease),box-shadow .4s}
.site-header.scrolled{background:rgba(255,255,255,.88);backdrop-filter:blur(10px);box-shadow:0 1px 0 var(--line)}
.site-header .wrap{display:flex;align-items:center;justify-content:space-between;height:68px}
.logo{font-weight:900;letter-spacing:.02em;text-decoration:none;white-space:nowrap;font-size:17px}
.logo i{font-style:normal;color:var(--accent-deep)}
.nav{display:flex;gap:22px;align-items:center;font-size:13px}
.nav a{text-decoration:none;color:var(--muted);transition:color .2s}
.nav a:hover{color:var(--ink)}
.lang{border:1px solid var(--line);border-radius:99px;padding:3px 10px;font-family:var(--mono);font-size:11px;letter-spacing:.06em}
.lang:hover{border-color:var(--accent)}

/* ---------- intro (start signal) ---------- */
.intro{position:fixed;inset:0;z-index:100;background:#fff;display:grid;place-items:center;cursor:pointer}
.intro .call{font-family:var(--mono);font-size:clamp(18px,3vw,26px);letter-spacing:.18em;text-transform:uppercase;color:var(--muted);opacity:0;transform:translateY(8px);transition:opacity .35s var(--ease),transform .35s var(--ease)}
.intro .call.on{opacity:1;transform:none;color:var(--ink)}
.intro .skip{position:absolute;bottom:24px;right:24px;font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.1em}
.intro.bang{animation:bang .7s var(--ease) forwards}
@keyframes bang{0%{background:#fff}12%{background:var(--accent)}100%{background:var(--accent);transform:translateY(-100%)}}
body.intro-lock{overflow:hidden}

/* race clock: 目立たない場所で走り、やがて消える */
.clock{position:fixed;left:20px;bottom:18px;z-index:30;font-family:var(--mono);font-size:12px;color:var(--muted);letter-spacing:.08em;pointer-events:none;opacity:0;transition:opacity 1.6s ease}
.clock.on{opacity:.75}
.clock b{color:var(--accent-deep);font-weight:500}

/* ---------- hero : 作品の壁 ---------- */
.hero{position:relative;height:100svh;min-height:620px;overflow:hidden;background:var(--paper)}
.wall{position:absolute;inset:-10% -4%;display:grid;grid-template-columns:repeat(6,1fr);gap:14px;transform:rotate(-6deg);opacity:0;transition:opacity 1.2s ease .2s}
.ready .wall{opacity:1}
.wall .col{display:flex;flex-direction:column;gap:14px;animation:rise 70s linear infinite}
.wall .col:nth-child(even){animation-name:fall;animation-duration:85s}
.wall img{width:100%;border-radius:10px;box-shadow:0 6px 24px rgba(0,0,0,.08)}
@keyframes rise{from{transform:translateY(0)}to{transform:translateY(-50%)}}
@keyframes fall{from{transform:translateY(-50%)}to{transform:translateY(0)}}
.hero .veil{position:absolute;inset:0;background:radial-gradient(ellipse 70% 55% at center,rgba(255,255,255,.97) 0,rgba(255,255,255,.9) 45%,rgba(255,255,255,.35) 100%)}
.hero .center{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:0 24px}
.hero h1{margin:0;font-weight:900;font-size:clamp(44px,9vw,120px);line-height:1;letter-spacing:-.02em}
.hero h1 .w{display:block;opacity:0;transform:translateY(40px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
.ready .hero h1 .w{opacity:1;transform:none}
.ready .hero h1 .w:nth-child(2){transition-delay:.12s}
.hero h1 .w:nth-child(2){color:var(--accent-deep)}
.hero h1 .w:nth-child(2){margin-left:1.4em}
.hero h1{text-align:left;display:inline-block}
.hero .sub{margin:22px 0 0;font-size:clamp(14px,1.6vw,17px);color:var(--muted);opacity:0;transition:opacity 1s ease .5s}
.ready .hero .sub{opacity:1}
.hero .scroll{position:absolute;z-index:2;left:50%;bottom:150px;transform:translateX(-50%);font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--muted)}
.hero .scroll::after{content:"";display:block;width:1px;height:36px;margin:8px auto 0;background:var(--ink);transform-origin:top;animation:drip 1.8s var(--ease) infinite}
@keyframes drip{0%{transform:scaleY(0)}50%{transform:scaleY(1);transform-origin:top}51%{transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* レーンの線：号砲と同時に左から引かれる */
.lanes{position:absolute;left:0;right:0;bottom:0;height:132px;pointer-events:none;background:#fff}
.lanes span{position:absolute;left:0;height:2px;width:100%;background:var(--accent);transform:scaleX(0);transform-origin:left;opacity:.55}
.ready .lanes span{animation:lane 1.4s var(--ease) forwards}
@keyframes lane{to{transform:scaleX(1)}}

/* ---------- sections ---------- */
section.block{padding:120px 0}
.eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.2em;color:var(--accent-deep);margin:0 0 14px;text-transform:uppercase}
h2.big{font-weight:900;font-size:clamp(36px,6vw,76px);line-height:1.05;margin:0 0 28px;letter-spacing:-.01em}
.lead{color:var(--muted);max-width:42em;margin:0}

/* reveal on scroll */
.rv{opacity:0;transform:translateY(36px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.rv.in{opacity:1;transform:none}

/* ---------- featured: 共闘 ---------- */
.kyoto{background:var(--ink);color:#fff;overflow:hidden}
.kyoto .eyebrow{color:var(--accent)}
.kyoto .head{display:grid;grid-template-columns:auto 1fr;gap:48px;align-items:center}
.kyoto .head img{width:min(260px,40vw);border-radius:14px}
.kyoto h2.big{color:#fff}
.kyoto .lead{color:#b9c1bf}
.strip{display:flex;gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;padding:56px 24px 12px;margin:0 -24px;scrollbar-width:thin}
.strip .item{flex:0 0 clamp(220px,26vw,320px);scroll-snap-align:start;cursor:zoom-in;opacity:0;transform:translateX(60px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
.strip.in .item{opacity:1;transform:none}
.strip .item img{border-radius:12px;transition:transform .5s var(--ease)}
.strip .item:hover img{transform:translateY(-8px) scale(1.02)}
.strip .item p{margin:10px 0 0;font-size:13px;color:#b9c1bf}

/* ---------- works grid ---------- */
.filters{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 40px}
.filters button{font:inherit;font-size:13px;border:1px solid var(--line);background:#fff;border-radius:99px;padding:7px 16px;cursor:pointer;transition:all .25s var(--ease)}
.filters button:hover{border-color:var(--accent)}
.filters button[aria-pressed="true"]{background:var(--ink);color:#fff;border-color:var(--ink)}
.filters button .n{font-family:var(--mono);font-size:11px;color:var(--muted);margin-left:6px}
.filters button[aria-pressed="true"] .n{color:var(--accent)}

.grid{columns:4 260px;column-gap:20px}
.card{break-inside:avoid;margin:0 0 28px;cursor:zoom-in;transition:opacity .4s var(--ease),transform .4s var(--ease)}
.card.hide{display:none}
.card.fade{opacity:0;transform:scale(.97)}
.card .media{position:relative;overflow:hidden;border-radius:12px;background:var(--paper)}
.card .media img,.card .media video{width:100%;transition:transform .7s var(--ease)}
.card:hover .media img,.card:hover .media video{transform:scale(1.04)}
.card video{position:absolute;inset:0;height:100%;object-fit:cover;opacity:0;transition:opacity .4s}
.card.playing video{opacity:1}
.card .play{position:absolute;right:10px;top:10px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;background:rgba(255,255,255,.9);border-radius:99px;padding:3px 9px}
/* hover caption */
.card .cap{position:absolute;left:0;right:0;bottom:0;padding:44px 16px 14px;color:#fff;font-size:13px;line-height:1.6;background:linear-gradient(to top,rgba(10,20,19,.88),rgba(10,20,19,0));transform:translateY(100%);transition:transform .5s var(--ease)}
.card .cap::before{content:"";display:block;width:28px;height:3px;background:var(--accent);margin-bottom:10px;transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease) .15s}
.card:hover .cap,.card:focus-visible .cap{transform:none}
.card:hover .cap::before{transform:scaleX(1)}
.card .cap .credit{display:block;margin-top:6px;font-size:11px;opacity:.75}
.card .title{display:flex;justify-content:space-between;gap:12px;margin-top:10px;font-size:14px;font-weight:700}
.card .type{font-family:var(--mono);font-size:10px;font-weight:400;letter-spacing:.12em;color:var(--muted);text-transform:uppercase;white-space:nowrap;padding-top:3px}
.card.dark .media{background:var(--ink)}
.card.game .media{aspect-ratio:4/5;display:grid;place-items:center;background:linear-gradient(160deg,var(--accent-soft),#fff 60%);border:1px solid var(--line)}
.card.game .media .g{font-weight:900;font-size:30px;line-height:1.15;text-align:center}
.card.game .media .g small{display:block;font-family:var(--mono);font-size:11px;font-weight:400;color:var(--accent-deep);letter-spacing:.18em;margin-top:12px}

/* ---------- highlights ---------- */
.highlights .hl-row{display:grid;grid-template-columns:1fr 1fr;gap:32px;margin-top:8px}
.hl-card{cursor:zoom-in}
.hl-card .media{position:relative;overflow:hidden;border-radius:16px;background:var(--paper);aspect-ratio:4/5}
.hl-card .media img,.hl-card .media video{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease)}
.hl-card:hover .media img{transform:scale(1.03)}
.hl-card video{position:absolute;inset:0;opacity:0;transition:opacity .4s}
.hl-card.playing video{opacity:1}
.hl-card .play{position:absolute;right:12px;top:12px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;background:rgba(255,255,255,.9);border-radius:99px;padding:3px 9px}
.hl-text{padding-top:18px;border-top:3px solid var(--accent);margin-top:18px}
.hl-text h3{margin:0 0 8px;font-size:22px;font-weight:900}
.hl-text p{margin:0;color:var(--muted);font-size:14px}
.hl-text .eyebrow{margin-bottom:6px}

/* ---------- works の開閉 ---------- */
.fold{position:relative;max-height:1500px;overflow:hidden;transition:max-height .9s var(--ease)}
.fold::after{content:"";position:absolute;left:0;right:0;bottom:0;height:220px;background:linear-gradient(to bottom,rgba(255,255,255,0),#fff 85%);pointer-events:none;transition:opacity .4s}
.fold.open{max-height:none}
.fold.open::after{opacity:0}
.fold-btn{display:block;margin:28px auto 0;font:inherit;font-size:14px;font-weight:700;background:var(--ink);color:#fff;border:0;border-radius:99px;padding:13px 28px;cursor:pointer;transition:transform .3s var(--ease),background .3s}
.fold-btn:hover{transform:translateY(-2px);background:var(--accent-deep)}
.fold-float{position:fixed;right:18px;bottom:18px;z-index:35;font:inherit;font-size:13px;font-weight:700;background:var(--ink);color:#fff;border:0;border-radius:99px;padding:10px 18px;box-shadow:0 8px 24px rgba(0,0,0,.18);opacity:0;transform:translateY(20px);pointer-events:none;transition:all .4s var(--ease)}
.fold-float.show{opacity:1;transform:none;pointer-events:auto}

/* ---------- stats ---------- */
.stats{background:var(--paper)}
.stats .row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:28px;margin-top:20px}
.stat .num{font-family:var(--mono);font-size:clamp(40px,5vw,64px);font-weight:500;line-height:1;color:var(--ink)}
.stat .num.pending{color:#c7cccb}
.stat .lbl{margin-top:10px;color:var(--muted);font-size:14px}
.stat{border-top:2px solid var(--ink);padding-top:18px}
.stat.with-img{display:flex;gap:16px;align-items:flex-start;grid-column:span 2}
.stat .num{white-space:nowrap}
.stat-img{width:84px;border-radius:8px;flex:none;box-shadow:0 6px 18px rgba(0,0,0,.1)}
.stat .num.text{font-family:var(--font);font-weight:900}

/* ---------- about ---------- */
.about .cols{display:grid;grid-template-columns:1.1fr 1fr;gap:64px}
.facts{margin:0;display:grid;grid-template-columns:7.5em 1fr;gap:10px 18px;font-size:15px}
.facts dt{color:var(--muted)}
.facts dd{margin:0}
.photos{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-top:28px}
.photos img{border-radius:10px;aspect-ratio:3/4;object-fit:cover}

/* ---------- contact ---------- */
.contact{text-align:center}
.contact a.mail{display:inline-block;font-weight:900;font-size:clamp(24px,4.4vw,52px);text-decoration:none;background:linear-gradient(var(--accent),var(--accent)) 0 100%/0 6px no-repeat;transition:background-size .5s var(--ease)}
.contact a.mail:hover{background-size:100% 6px}

.site-footer{border-top:1px solid var(--line);padding:30px 0 60px;font-size:12px;color:var(--muted)}
.site-footer .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.site-footer a{color:var(--muted)}

/* ---------- lightbox ---------- */
.lb{position:fixed;inset:0;z-index:90;background:rgba(255,255,255,.985);display:none;grid-template-columns:1fr minmax(240px,340px);gap:32px;padding:72px 40px 40px}
.lb.open{display:grid;animation:lbIn .45s var(--ease)}
@keyframes lbIn{from{opacity:0}to{opacity:1}}
.lb .stage{display:grid;place-items:center;min-height:0}
.lb .stage img,.lb .stage video{max-height:calc(100vh - 140px);width:auto;border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,.12);animation:zoomIn .5s var(--ease)}
@keyframes zoomIn{from{transform:scale(.94);opacity:0}to{transform:none;opacity:1}}
.lb .side{align-self:end}
.lb .side h3{margin:0 0 10px;font-size:22px}
.lb .side p{color:var(--muted);font-size:14px}
.lb .btn{position:absolute;font:inherit;font-family:var(--mono);font-size:12px;letter-spacing:.12em;background:none;border:1px solid var(--line);border-radius:99px;padding:6px 14px;cursor:pointer}
.lb .close{top:20px;right:24px}
.lb .prev{top:20px;left:24px}
.lb .next{top:20px;left:124px}

/* ---------- sub pages ---------- */
.page{padding:140px 0 100px}
.page h1{font-weight:900;font-size:clamp(36px,6vw,72px);line-height:1.1;margin:0 0 24px}
.features{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:40px}
.feature{border:1px solid var(--line);border-radius:14px;padding:22px}
.feature h3{margin:0 0 8px;font-size:17px}
.feature p{margin:0;color:var(--muted);font-size:14px}
.legal{max-width:760px}
.legal h2{font-size:19px;margin-top:40px}
.legal p,.legal li{font-size:15px}

/* ---------- responsive ---------- */
@media (max-width:820px){
  .stat.with-img{grid-column:auto}
  .highlights .hl-row{grid-template-columns:1fr}
  .fold{max-height:1100px}
  .wall{grid-template-columns:repeat(3,1fr)}
  .kyoto .head,.about .cols{grid-template-columns:1fr;gap:28px}
  .lb{grid-template-columns:1fr;padding:64px 16px 20px;overflow:auto}
  .nav a.hide-sm{display:none}
  section.block{padding:88px 0}
}
@media (hover:none){ .card .cap{transform:none;background:none;position:static;color:var(--muted);padding:8px 0 0} .card .cap::before{display:none} .card .cap:empty{display:none} }

/* 動きを減らす設定の人には、アニメーションを止める */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .rv,.strip .item,.hero h1 .w,.wall,.hero .sub{opacity:1!important;transform:none!important}
  .lanes span{transform:none}
}
