*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#13263b}.kal-body{background:#0c1724;overflow:hidden}.kal-body #kal-display{width:100vw;height:100vh;overflow:hidden}.axis-card-img{display:block;width:100%;height:auto}.home-screen{width:100%;height:100%;background:radial-gradient(circle at 50% 30%,#fff8d6 0,#f7f9fb 42%,#eaf3ff 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.6vh}.wakufes-logo{width:min(62vw,1050px);height:auto}.home-screen h1{margin:0;font-size:clamp(56px,7vw,120px);font-weight:1000;letter-spacing:.03em;text-shadow:0 8px 0 #fff}.home-screen h2{margin:-.6vh 0 .6vh;font-size:clamp(34px,3.8vw,72px);font-weight:1000}.home-axes{display:grid;grid-template-columns:repeat(10,1fr);gap:.6vw;width:92vw}.home-axes .axis-card-img{border-radius:12px;box-shadow:0 8px 18px #0002}

/* 個別抽選 */
.upper-axis-screen{width:100%;height:100%;background:linear-gradient(180deg,#f8fbff,#edf4fb);padding:2.2vh 4vw 3vh;position:relative}.prize-hero{height:16vh;display:flex;align-items:center;justify-content:center;gap:1.2vw;background:#fff;border-radius:28px;box-shadow:0 12px 35px #17314c18;border:4px solid #f0c33a}.prize-hero small{font-size:1.2vw;font-weight:900;color:#7c8794}.prize-hero strong{font-size:3vw;font-weight:1000;line-height:1.1}.axis-grid-2x5{height:76vh;margin-top:2vh;display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(2,1fr);gap:1.3vh 1.2vw;align-items:center}.axis-card{position:relative;display:grid;place-items:center;transition:transform .22s ease,opacity .25s ease,filter .25s ease}.axis-card .axis-card-img{width:min(15vw,235px);border-radius:14px;box-shadow:0 10px 28px #0002;transition:transform .3s ease,box-shadow .3s ease,outline-color .3s ease}.axis-card.pick .axis-card-img{transform:scale(1.10);outline:7px solid #fff;box-shadow:0 0 0 10px #ffd54a,0 18px 42px #0003}.axis-card.dim{opacity:.26;filter:saturate(.25)}.axis-card.winner{z-index:4}.axis-card.winner .axis-card-img{transform:scale(1.34);outline:9px solid #fff;box-shadow:0 0 0 14px var(--winner,#ffd54a),0 0 50px 18px #ffd54a99}.axis-confirm{position:absolute;bottom:-1.7vh;background:#152b43;color:#fff;font-size:1.45vw;padding:.28em .8em;border-radius:999px;box-shadow:0 8px 20px #0003}.display-step-badge{position:absolute;right:2.2vw;bottom:2vh;background:#182c44;color:#fff;border:5px solid #ffd54a;border-radius:999px;font-size:1.55vw;font-weight:1000;padding:.34em 1em}
.animal-screen{width:100%;height:100%;background:linear-gradient(180deg,#f8fbff,#edf4fb);padding:1.5vh 3vw}.animal-screen header{height:18vh;display:flex;align-items:center;justify-content:center;gap:1.5vw}.animal-axis-logo{width:7vw;min-width:90px}.animal-axis-logo .axis-card-img{border-radius:12px;box-shadow:0 8px 20px #0002}.animal-screen header small{font-size:1.25vw;font-weight:900;color:#6b7886}.animal-screen header h1{margin:.05em 0 0;font-size:4.5vw;line-height:1;font-weight:1000;color:var(--axis);text-shadow:0 3px 0 #fff}.animal-grid.compact{height:76vh;display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(4,1fr);gap:.6vh .8vw}.animal-cell{display:grid;place-items:center;background:#fff;border:3px solid #dbe3ea;border-radius:12px;padding:.2em .4em;font-size:1.35vw;font-weight:1000;text-align:center;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.animal-cell.pick{transform:scale(1.055);border-color:var(--axis);box-shadow:0 0 0 7px color-mix(in srgb,var(--axis) 30%,transparent),0 9px 20px #0002}.result-screen{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(circle,#fff 0,#f5fbff 40%,color-mix(in srgb,var(--c) 20%,#fff) 100%);gap:1vh}.result-card{width:18vw}.result-card .axis-card-img{border-radius:18px;box-shadow:0 15px 40px #0003}.result-screen small{font-size:2vw;font-weight:900}.result-screen h1{font-size:7vw;margin:.1em 0 0;color:var(--c);font-weight:1000}.result-screen h2{font-size:5vw;margin:0;font-weight:1000}

/* 軸ダービー */
.race-screen{position:relative;width:100%;height:100%;overflow:hidden;background:#9edcf7}.race-field{position:absolute;inset:0;opacity:1;transition:opacity .55s ease;background:linear-gradient(#9fe0fb 0 18%,#83c965 18% 100%)}.dirt-track{position:absolute;left:4%;right:4%;top:15%;bottom:0;background:linear-gradient(90deg,#6fa64b 0 3%,#8a5b36 3% 97%,#6fa64b 97% 100%);box-shadow:inset 0 0 45px #4b2f1880}.dirt-track:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,rgba(255,255,255,.03) 0 2vh,rgba(74,45,24,.07) 2.2vh 4.2vh);animation:dirtRush .48s linear infinite}.grass{position:absolute;top:15%;bottom:0;width:5%;z-index:3;background:repeating-linear-gradient(100deg,#4e9a3f 0 9px,#6fba4e 10px 18px)}.grass-l{left:0}.grass-r{right:0}.lane-lines{position:absolute;inset:0}.lane-lines i{position:absolute;top:0;bottom:0;width:2px;background:rgba(255,255,255,.26);transform:translateX(-50%)}.race-runners{position:absolute;inset:0;z-index:10}.runner{position:absolute;top:79%;width:7.1vw;transform:translateX(-50%);transition:opacity .35s ease,filter .35s ease}.runner .axis-card-img{border-radius:10px;box-shadow:0 14px 25px #0004}.runner.out{display:none}.runner.deadheat{width:8.6vw;filter:drop-shadow(0 0 14px #fff)}.race-message{position:absolute;left:50%;top:45%;transform:translate(-50%,-50%);z-index:20;background:#fffde9;border:6px solid #ef9d26;border-radius:24px;padding:.45em 1.2em;font-size:3vw;font-weight:1000;box-shadow:0 12px 35px #0003;white-space:nowrap}.countdown-overlay{position:absolute;inset:0;z-index:70;display:grid;place-items:center;pointer-events:none;opacity:0;transition:.25s;background:rgba(10,23,36,.15)}.countdown-overlay.show{opacity:1}.support-call,.count-num{background:#fff;border:7px solid #ffd34b;border-radius:28px;padding:.35em .8em;font-size:4.2vw;font-weight:1000;box-shadow:0 15px 40px #0004}.count-num{font-size:9vw;min-width:18vw;text-align:center}.obstacle-real{position:absolute;z-index:25;width:7vw;max-width:125px;transform:translateX(-50%);filter:drop-shadow(0 10px 9px #0005)}.obstacle-real.fall{animation:obstacleDrop 2s cubic-bezier(.2,.6,.22,1) forwards}.obstacle-real.impact{filter:drop-shadow(0 0 20px #fff) drop-shadow(0 0 28px #ffd34b) drop-shadow(0 10px 9px #0006)}.runner.burst{animation:smashBurst 1.05s cubic-bezier(.13,.69,.24,1) forwards}.burst-spark{position:absolute;z-index:40;transform:translate(-50%,-50%);font-size:5vw;animation:sparkPop 1.1s ease forwards}.race-final{position:absolute;inset:0;opacity:0;pointer-events:none;background:linear-gradient(#9fdef9 0 25%,#66b850 25% 100%);transition:opacity .55s ease}.race-final.show{opacity:1}.final-track{position:absolute;left:0;right:0;top:25%;bottom:10%;background:#8a5b36;box-shadow:inset 0 8px 0 #ffffff55,inset 0 -8px 0 #ffffff55}.final-track:after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 30%,rgba(255,255,255,.18) 30.2% 30.8%,transparent 30.8% 63%,rgba(255,255,255,.18) 63.2% 63.8%,transparent 63.8%)}.finish-gate{position:absolute;right:7%;top:16%;height:72%;width:8%;border-left:1vw solid #fff;border-right:1vw solid #fff;border-top:1vw solid #fff;z-index:8}.finish-gate b{position:absolute;top:-.8vw;left:50%;transform:translate(-50%,-100%);background:#172b42;color:#fff;border-radius:12px;padding:.2em .7em;font-size:2.1vw}.finish-line{position:absolute;right:11%;top:25%;bottom:10%;width:.8vw;z-index:10;background:repeating-linear-gradient(0deg,#fff 0 1vw,#111 1vw 2vw)}.finish-tape{position:absolute;right:11%;top:44%;width:14vw;height:.6vw;background:#ef3d3d;border:.2vw solid #fff;z-index:14;transform:translateX(50%)}.finish-tape.cut{animation:tapeCut .8s ease forwards}.final-runners{position:absolute;inset:0;z-index:12}.f-runner{position:absolute;left:4%;width:10vw;transform:translateY(-50%);transition:left 1s cubic-bezier(.25,.65,.25,1)}.f-runner .axis-card-img{border-radius:12px;box-shadow:0 12px 28px #0005}.race-fade{position:absolute;inset:0;z-index:60;background:#fff;opacity:0;pointer-events:none;transition:opacity .55s}.race-fade.on{opacity:1}.winner-overlay{position:absolute;inset:0;z-index:80;background:rgba(10,24,38,.72);display:grid;place-items:center;opacity:0;pointer-events:none;transition:.35s}.winner-overlay.show{opacity:1}.winner-card{background:#fff;border-radius:30px;padding:2.3vh 3vw;text-align:center;border:9px solid #ffd34b;box-shadow:0 18px 50px #0006}.winner-card small{display:block;font-size:2.7vw;font-weight:1000}.winner-card strong{display:block;font-size:2.1vw;color:#6b7885}.winner-card h1{font-size:6vw;margin:.08em 0;font-weight:1000}.winner-card .axis-card-img{width:15vw;margin:auto;border-radius:16px}@keyframes dirtRush{from{background-position-y:-4vh}to{background-position-y:0}}@keyframes obstacleDrop{from{transform:translateX(-50%) translateY(0)}to{transform:translateX(-50%) translateY(var(--drop))}}@keyframes smashBurst{0%{transform:translateX(-50%) scale(1)}25%{transform:translateX(-50%) translateY(-2vh) scale(1.12) rotate(6deg)}100%{transform:translateX(-50%) translate(28vw,-30vh) scale(.06) rotate(780deg);opacity:0}}@keyframes sparkPop{0%{opacity:0;transform:translate(-50%,-50%) scale(.3)}35%{opacity:1;transform:translate(-50%,-50%) scale(1.5)}100%{opacity:0;transform:translate(-50%,-50%) scale(2.6)}}@keyframes tapeCut{to{transform:translateX(75%) translateY(6vh) rotate(26deg);opacity:.15}}

/* サドンデス */
.sudden-menu{width:100%;height:100%;background:radial-gradient(circle at 50% 40%,#fff,#eaf2fb);display:flex;flex-direction:column;align-items:center;justify-content:center}.sudden-menu h1{font-size:6vw;margin:0;font-weight:1000}.sudden-menu h2{font-size:4vw;margin:.15em 0}.sudden-menu p{font-size:2.3vw;font-weight:900}.sudden-choice{display:grid;grid-template-columns:1fr 1fr;gap:3vw}.sudden-choice>div{width:24vw;height:25vh;border-radius:30px;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:7vw;box-shadow:0 12px 35px #0002;border:5px solid #dce6ef}.sudden-choice b{font-size:2.8vw}.sudden{width:100%;height:100%;background:#0c1724;color:#fff}.sudden>header{height:9vh;display:flex;align-items:center;justify-content:space-between;padding:0 2vw;font-size:2.4vw;font-weight:1000;background:#101f30}.s-stage{position:relative;width:100%;height:91vh;overflow:hidden}.spot-world{position:absolute;inset:0;background:#f5f8fb;transform-origin:var(--fx,50%) var(--fy,50%);transition:transform .7s cubic-bezier(.16,.72,.18,1),filter .7s}.s-grid{position:absolute;inset:0;display:grid;grid-template-columns:repeat(20,1fr);grid-template-rows:repeat(10,1fr);gap:2px;padding:5px}.s-cell{display:grid;place-items:center;background:var(--c);border-radius:4px;padding:1px 2px;overflow:hidden}.s-cell b{font-size:clamp(7px,.61vw,12px);line-height:1.05;text-align:center;color:#fff;font-weight:1000;text-shadow:0 1px 2px #0005}.spot-darkness{position:absolute;inset:0;z-index:7;background:rgba(0,0,0,.78);opacity:0;transition:opacity 1.2s ease;pointer-events:none;-webkit-mask-image:radial-gradient(circle 7.5vw at var(--sx,50%) var(--sy,50%),transparent 0 75%,#000 100%);mask-image:radial-gradient(circle 7.5vw at var(--sx,50%) var(--sy,50%),transparent 0 75%,#000 100%)}.spot-world.running .spot-darkness{opacity:1}.spotlight{position:absolute;z-index:8;width:15vw;height:15vw;border-radius:50%;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;background:radial-gradient(circle,rgba(255,245,170,.18) 0 55%,rgba(255,240,150,.08) 72%,transparent 78%);box-shadow:0 0 4vw 1vw rgba(255,224,105,.2)}.spot-beam{position:absolute;z-index:6;height:10vw;transform-origin:0 50%;clip-path:polygon(0 48%,100% 8%,100% 92%,0 52%);background:linear-gradient(90deg,rgba(255,244,180,.03),rgba(255,244,180,.12),rgba(255,244,180,.04));filter:blur(6px);pointer-events:none}.spot-world.focus-1{transform:scale(2.2)}.spot-world.focus-2{transform:scale(4.2)}.spot-world.focus-3{transform:scale(7.2)}.spot-world.judged{}.spot-world.judged .spot-darkness,.spot-world.judged .spotlight,.spot-world.judged .spot-beam{display:none}.s-cell.judge-loser{filter:grayscale(1);opacity:.22}.s-cell.judge-winner{position:relative;z-index:20;outline:8px solid #fff;box-shadow:0 0 0 8px #ffd34b,0 0 30px #ffd34b;transform:scale(1.15)}
.roulette-mode .s-stage{display:grid;place-items:center;background:#0e2032}.roulette-zoom-world{position:relative;width:min(85vh,85vw);height:min(85vh,85vw);transform-origin:50% 0%;transition:transform .75s cubic-bezier(.16,.72,.18,1)}.roulette-wheel{width:100%;height:100%;border-radius:50%;filter:drop-shadow(0 18px 38px #0007)}.roulette-wheel canvas{width:100%;height:100%}.roulette-pointer{position:absolute;top:-3.4vh;left:50%;transform:translateX(-50%);z-index:20;color:#ffdf3e;font-size:5.4vw;text-shadow:0 5px 0 #8b5a00,0 0 14px #fff}.roulette-zoom-world.focus-1{transform:translateY(30vh) scale(1.8)}.roulette-zoom-world.focus-2{transform:translateY(45.5vh) scale(3.3)}.roulette-zoom-world.focus-3{transform:translateY(45.5vh) scale(5.7)}.roulette-decided{position:absolute;left:50%;top:7%;transform:translateX(-50%);z-index:35;pointer-events:none}.roulette-decided b{display:block;background:#ffd34b;color:#172b42;border:.35vw solid #fff;border-radius:999px;padding:.18em .75em;font-size:3.2vw;font-weight:1000;box-shadow:0 0 0 .35vw #d58c00,0 1vh 2vh #0006;animation:rouletteDecisionPop .5s cubic-bezier(.18,.8,.18,1.35)}@keyframes rouletteDecisionPop{0%{transform:scale(.25);opacity:0}70%{transform:scale(1.15);opacity:1}100%{transform:scale(1)}}.roulette-result{position:absolute;inset:0;display:grid;place-items:center;z-index:40;pointer-events:none;opacity:0;background:rgba(9,19,29,.72);transition:.35s}.roulette-result.show{opacity:1}.roulette-result>small{display:none}.roulette-result strong{background:#fff;color:#172b42;border:9px solid #ffd34b;border-radius:30px;padding:.35em .8em;font-size:6vw;font-weight:1000;box-shadow:0 15px 45px #0006}

/* CONTROL */
.kal-control-body{background:#eef3f8}.kal-control{max-width:1600px;margin:auto;padding:18px}.control-head{display:flex;justify-content:space-between;align-items:center;background:#172b42;color:#fff;padding:18px 22px;border-radius:18px}.control-head small{opacity:.7}.control-head h1{margin:.15em 0 0}.control-head a{color:#fff;text-decoration:none;background:#2e8ddd;padding:.7em 1em;border-radius:10px;font-weight:900}.ctrl-layout{display:grid;grid-template-columns:minmax(0,1fr) 370px;gap:16px;margin-top:16px}.ctrl-layout aside{position:sticky;top:12px;height:max-content;background:#fff;padding:12px;border-radius:16px;box-shadow:0 8px 25px #0001}.live-preview-viewport{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;border:1px solid #d9e1e8;border-radius:10px;background:#0c1724}.live-preview-viewport iframe{position:absolute;width:1920px;height:1080px;border:0;transform-origin:0 0;max-width:none}.panel{background:#fff;border-radius:16px;padding:16px;margin-bottom:14px;box-shadow:0 8px 22px #0001}.mode-tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.mode,.panel button{border:0;border-radius:12px;padding:.85em 1em;font-size:17px;font-weight:900;cursor:pointer;background:#e8eef4;color:#17304a}.mode.active{background:#172b42;color:#fff}.ctrl-panel{display:none}.ctrl-panel.active{display:block}.next-action{min-height:78px;margin-top:12px;display:grid;place-items:center}.mega{width:100%;min-height:72px;font-size:27px!important;background:#2b8ee7!important;color:#fff!important;box-shadow:0 8px 0 #1766a8}.mega.danger{background:#e94a46!important;box-shadow:0 8px 0 #9d2825}.mega.hot2{background:#8a55cb!important;box-shadow:0 8px 0 #5b3391}.step-no{display:inline-grid;place-items:center;width:42px;height:42px;border-radius:50%;background:#fff;color:#172b42;margin-right:12px}.step-prize{position:relative;border:4px solid #f0bf31;border-radius:18px;padding:20px;background:#fff9df}.step-mark{position:absolute;left:-16px;top:-18px;width:48px;height:48px;border-radius:50%;display:grid;place-items:center;background:#f0bf31;font-weight:1000;font-size:25px;border:4px solid #fff}.step-prize strong{display:block;margin:0 0 12px 20px;font-size:20px}.prizes{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.prizes button{background:#fff;border:2px solid #dce4eb}.prizes button.selected{background:#172b42;color:#fff;outline:4px solid #ffd34b}.flow-help,.hint{color:#6a7785;font-weight:800}.race-controls,.sudden-controls{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.sudden-controls{grid-template-columns:1fr 1fr}.sudden-controls button.selected{background:#172b42;color:#fff;outline:4px solid #ffd34b}.panel button:disabled{opacity:.28;cursor:not-allowed;filter:grayscale(1)}.utility{display:grid;grid-template-columns:1fr 1fr;gap:8px}.home-btn{background:#35a66f!important;color:#fff!important}.danger{background:#e94a46!important;color:#fff!important}.animal-editor{display:grid;grid-template-columns:1fr 1fr;gap:10px}.animal-editor label{display:grid;grid-template-columns:100px 1fr;gap:8px;align-items:start}.animal-editor label span{display:flex;align-items:center;gap:5px;font-weight:900}.animal-editor label .axis-card-img{width:42px;border-radius:4px}.animal-editor textarea{width:100%;height:180px}.triple-next{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
@media(max-width:1100px){.ctrl-layout{grid-template-columns:1fr}.ctrl-layout aside{position:static}.prizes{grid-template-columns:1fr 1fr}.race-controls{grid-template-columns:1fr}.animal-editor{grid-template-columns:1fr}.home-axes{grid-template-columns:repeat(5,1fr);width:86vw}.axis-grid-2x5{gap:1vh}.animal-cell{font-size:1.6vw}}

/* ===== v0.11.0 tuning ===== */
.prize-hero{transition:transform .55s cubic-bezier(.18,.9,.25,1.35),height .55s ease,box-shadow .55s ease;transform-origin:50% 10%}
.prize-hero.emphasis{position:relative;z-index:30;transform:scale(1.34);box-shadow:0 25px 70px #17314c55,0 0 0 10px #ffd54a88}
.prize-hero.emphasis strong{font-size:3.7vw}
.prize-tools{margin-top:10px}.prize-tools button{width:100%;background:#ffd95a!important;color:#2b2b2b!important}
.axis-card.winner .axis-card-img{transform:scale(1.10);outline:7px solid #fff;box-shadow:0 0 0 10px #ffd54a,0 18px 42px #0003}
.axis-card.winner .axis-confirm{opacity:0;transform:translateY(12px) scale(.8);transition:.45s ease}
.axis-card.winner.confirmed .axis-card-img{transform:scale(1.48);outline:10px solid #fff;box-shadow:0 0 0 16px #ffb400,0 0 65px 24px #ffd54abb}
.axis-card.winner.confirmed .axis-confirm{opacity:1;transform:none;background:#ff9f1a;font-size:1.75vw}
.animal-screen{position:relative;padding:1vh 3vw}
.animal-screen header{height:24vh;position:relative;display:block}
.animal-axis-logo{position:absolute;left:0;top:1vh;width:8vw;min-width:90px;z-index:4}
.animal-live-box{position:absolute;left:11vw;right:2vw;top:2vh;height:18vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.animal-screen header small{font-size:1.35vw}.animal-screen header h1{font-size:5.4vw;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.animal-grid.compact{height:60.8vh;grid-template-rows:repeat(4,1fr);gap:.45vh .7vw}
.animal-cell{font-size:1.62vw;padding:.05em .25em;border-radius:10px;line-height:1.05}
/* Derby: waiting field is still; track only rushes while actual running */
.race-field .dirt-track:before{animation:none}.race-screen:has(.runner.alive) .dirt-track:before{animation:none}
.runner.burst{animation:smashToCamera 1.15s cubic-bezier(.12,.72,.16,1) forwards;z-index:55}
@keyframes smashToCamera{0%{transform:translateX(-50%) scale(1) rotate(0);opacity:1;filter:none}35%{transform:translateX(-50%) translateY(-2vh) scale(1.25) rotate(-12deg);opacity:1}82%{transform:translateX(-50%) translate(3vw,3vh) scale(4.2) rotate(430deg);opacity:.95;filter:drop-shadow(0 0 25px #fff)}100%{transform:translateX(-50%) translate(12vw,10vh) scale(6.5) rotate(650deg);opacity:0;filter:drop-shadow(0 0 45px #fff)}}
.race-final .finish-gate,.race-final .finish-tape{display:none!important}.final-track:after{display:none}.finish-line{right:10%;top:25%;bottom:10%;width:.65vw;background:repeating-linear-gradient(0deg,#fff 0 .8vw,#111 .8vw 1.6vw)}
.f-runner{transition:left 1.1s cubic-bezier(.22,.65,.22,1)}
/* Spotlight: 2s darkening, smaller warm light, keep zoom on judgement */
.spot-darkness{background:rgba(0,0,0,.84);transition:opacity 2s ease;-webkit-mask-image:radial-gradient(circle 4.5vw at var(--sx,50%) var(--sy,50%),transparent 0 72%,#000 100%);mask-image:radial-gradient(circle 4.5vw at var(--sx,50%) var(--sy,50%),transparent 0 72%,#000 100%)}
.spotlight{width:9vw;height:9vw;background:radial-gradient(circle,rgba(255,241,160,.22) 0 55%,rgba(255,224,110,.10) 72%,transparent 80%);box-shadow:0 0 2.6vw .7vw rgba(255,220,90,.22)}
.spot-beam{height:6vw;background:linear-gradient(90deg,rgba(255,240,160,.02),rgba(255,228,120,.11),rgba(255,240,160,.025));filter:blur(7px)}
.spot-world.judged .spot-darkness,.spot-world.judged .spotlight,.spot-world.judged .spot-beam{display:none}.spot-world.judged{filter:none}
.s-cell b{font-size:clamp(8px,.70vw,14px);line-height:1.0;overflow-wrap:anywhere;word-break:break-all}.s-cell b.len-8,.s-cell b.len-9{font-size:clamp(7px,.61vw,12px)}.s-cell b.len-10,.s-cell b.len-11,.s-cell b.len-12{font-size:clamp(6px,.53vw,10px)}
.race-screen.race_running .dirt-track:before,.race-screen.race_deadheat .dirt-track:before,.race-screen.race_obstacle .dirt-track:before{animation:dirtRush .48s linear infinite}

/* ===== v0.12.0 interaction + staging ===== */
/* Sudden-death grid: larger names, multiline first, shrink only when truly long */
.s-cell b{font-size:clamp(12px,1.26vw,24px)!important;line-height:.96!important;max-width:100%;max-height:100%;display:block;text-align:center;overflow:hidden;word-break:normal!important;overflow-wrap:normal!important}
.s-cell b.len-8,.s-cell b.len-9{font-size:clamp(10px,.95vw,19px)!important}
.s-cell b.len-10,.s-cell b.len-11,.s-cell b.len-12{font-size:clamp(9px,.82vw,17px)!important}
.s-cell b.len-13,.s-cell b.len-14,.s-cell b.len-15,.s-cell b.len-16{font-size:clamp(8px,.70vw,14px)!important}
/* Spotlight: 70% of v0.11 light, still warm and from above */
.spot-darkness{transition:opacity 2s ease!important;-webkit-mask-image:radial-gradient(circle 3.15vw at var(--sx,50%) var(--sy,50%),transparent 0 72%,#000 100%)!important;mask-image:radial-gradient(circle 3.15vw at var(--sx,50%) var(--sy,50%),transparent 0 72%,#000 100%)!important}
.spotlight{width:6.3vw!important;height:6.3vw!important;background:radial-gradient(circle,rgba(255,244,178,.26) 0 54%,rgba(255,226,118,.12) 72%,transparent 82%)!important;box-shadow:0 0 2vw .5vw rgba(255,220,90,.20)!important}
.spot-beam{height:4.4vw!important;opacity:.75}
/* Keep zoom when judging; only lighting disappears and losers gray immediately */
.spot-world.judged{filter:none!important}
.spot-world.judged .spot-darkness,.spot-world.judged .spotlight,.spot-world.judged .spot-beam{display:none!important}
/* Roulette pointer: smaller, slightly separated, only tip overlaps */
.roulette-pointer{top:-2.2vh!important;font-size:2.9vw!important;line-height:1!important;text-shadow:0 3px 0 #8b5a00,0 0 10px #fff!important}
/* 3 zoom steps ending at old second-stage maximum */
.roulette-zoom-world.focus-1{transform:scale(1.75)!important}
.roulette-zoom-world.focus-2{transform:scale(2.5)!important}
.roulette-zoom-world.focus-3{transform:scale(3.3)!important}
/* confirmed sudden-death result */
.sudden-confirmed{position:absolute;inset:0;z-index:90;display:grid;place-items:center;background:rgba(9,19,29,.68);opacity:0;pointer-events:none;transition:.3s}
.sudden-confirmed.show{opacity:1}.sudden-confirmed>small{display:block;position:absolute;top:28%;font-size:2.5vw;font-weight:1000;color:#fff}.sudden-confirmed>strong{font-size:7vw;background:#fff;color:#172b42;border:10px solid #ffd34b;border-radius:30px;padding:.28em .7em;box-shadow:0 20px 60px #0008}
/* Derby ground remains still until GO appears */
.race-screen .dirt-track:before{animation:none!important}
.race-screen.go-live .dirt-track:before,.race-screen.race_running .dirt-track:before,.race-screen.race_deadheat .dirt-track:before,.race-screen.race_obstacle .dirt-track:before{animation:dirtRush .38s linear infinite!important}
/* No lingering center bubble once running */
.race-screen.race_running .race-message,.race-screen.race_obstacle .race-message{display:none!important}
/* Bigger, unmistakable single finish line */
.finish-line{right:10%!important;top:21%!important;bottom:7%!important;width:1.45vw!important;background:repeating-linear-gradient(0deg,#fff 0 .95vw,#101010 .95vw 1.9vw)!important;box-shadow:0 0 0 .32vw #ffd34b,0 0 2.2vw .7vw #ffd34baa,0 0 4vw 1.4vw #fff6!important;z-index:18!important}
.finish-line:before{content:'GOAL!';position:absolute;left:50%;top:-2.8vw;transform:translate(-50%,-100%) rotate(-2deg);font-size:2.7vw;font-weight:1000;letter-spacing:.08em;color:#fff;background:#e63d35;border:.28vw solid #fff;border-radius:.5vw;padding:.12em .45em;box-shadow:0 .4vw 1vw #0005,0 0 1.5vw #ffd34b}
/* Control: visually obvious hard-lock during animation phases */
.panel button:disabled,.mode:disabled{opacity:.25!important;cursor:not-allowed!important;filter:grayscale(.8)!important;transform:none!important;box-shadow:none!important}

.spot-world.judged{transition:none!important}

/* ===== v0.12.1 upper-animal ready state ===== */
.animal-axis-logo.pick{border-radius:16px;box-shadow:0 0 0 7px var(--axis),0 0 0 13px color-mix(in srgb,var(--axis) 30%,transparent),0 12px 30px #0003;transform:scale(1.06);transition:.25s}
.animal-waiting .animal-live-box h1{font-size:5.4vw!important;letter-spacing:.08em}
\n/* ===== v0.12.3 fine tuning ===== */
/* Sudden roulette: Japanese animal names are a true stacked vertical column. */
/* Spotlight judgement: NEVER cancel the current zoom. Brighten in place and gray losers. */
.spot-world.judged{transform:scale(var(--judge-scale,1));filter:none!important}
.spot-world.focus-1.judged{--judge-scale:2.2}
.spot-world.focus-2.judged{--judge-scale:4.2}
.spot-world.focus-3.judged{--judge-scale:7.2}
.spot-world.judged .spot-darkness{opacity:0!important;display:block!important;transition:opacity .38s ease!important}
.spot-world.judged .spotlight,.spot-world.judged .spot-beam{opacity:0!important;display:block!important;transition:opacity .38s ease!important}
.s-cell.judge-loser{filter:grayscale(1) brightness(.78)!important;opacity:.30!important;transition:filter .4s ease,opacity .4s ease}
.s-cell.judge-winner{filter:none!important;opacity:1!important}
/* Derby obstacles travel from the top, hit their assigned runner, then continue completely off-screen. */
.obstacle-real{will-change:transform,opacity}
.obstacle-real.fall-to-hit{transition:transform 1.65s cubic-bezier(.18,.68,.22,1);transform:translateX(-50%) translateY(var(--hit))}
.obstacle-real.through{transition:transform 1.35s linear,opacity 1.2s ease!important;transform:translateX(-50%) translateY(calc(var(--hit) + 115vh))!important;opacity:.7}
.runner.camera-out{z-index:58;animation:runnerToCamera 1.25s cubic-bezier(.12,.72,.16,1) forwards!important}
@keyframes runnerToCamera{0%{transform:translateX(-50%) scale(1);opacity:1;filter:none}45%{transform:translateX(-50%) translateY(-8vh) scale(2.2) rotate(-8deg);opacity:1;filter:drop-shadow(0 0 18px #fff)}100%{transform:translateX(-50%) translateY(-18vh) scale(8.5) rotate(20deg);opacity:0;filter:blur(2px) drop-shadow(0 0 35px #fff)}}
.runner.water-drop{z-index:28;animation:runnerWaterDrop 1.35s cubic-bezier(.35,.05,.7,.3) forwards!important}
@keyframes runnerWaterDrop{0%{transform:translateX(-50%) translateY(0) rotate(0);opacity:1}20%{transform:translateX(-50%) translateY(2vh) rotate(-5deg);opacity:1}100%{transform:translateX(-50%) translateY(72vh) rotate(24deg);opacity:.15}}
.obstacle-water.water-with-runner{opacity:.9!important}

/* ===== v0.12.4 verified fixes ===== */
/* During an obstacle event the server already removed losers from race_alive; keep those runners visible until their exit animation finishes. */
.race-screen.race_obstacle .runner.obstacle-hit{display:block!important;opacity:1!important}

/* ===== v0.13.0 FINAL DERBY + SUDDEN ===== */
/* Roulette: 1st zoom closes 2/3 of the distance to center; 2nd centers fully; later stays centered. */
.roulette-zoom-world.focus-1{transform:translateY(30vh) scale(1.75)!important}
.roulette-zoom-world.focus-2{transform:translateY(45.5vh) scale(2.5)!important}
.roulette-zoom-world.focus-3{transform:translateY(45.5vh) scale(3.3)!important}
.roulette-decided{animation:decisionVanish .85s ease forwards}
@keyframes decisionVanish{0%,58%{opacity:1}100%{opacity:0}}
/* Spotlight judgement preserves the exact zoom/translation reached before judging. */
.spot-world.judged{transform:var(--focus-transform,none)!important;filter:none!important}

/* New high-visibility Derby obstacle assets. */
.obstacle-real{width:8.2vw;max-width:150px;object-fit:contain}
.obstacle-real.obstacle-tree{width:9vw}.obstacle-real.obstacle-pond,.obstacle-real.obstacle-netpond{width:9.4vw}.obstacle-real.obstacle-rock{width:9vw}.obstacle-real.obstacle-hurdle{width:8.8vw}
.runner.jump-clear{z-index:45;animation:runnerJumpClear 1.15s cubic-bezier(.22,.75,.25,1) forwards}
@keyframes runnerJumpClear{0%{transform:translateX(-50%) translateY(0)}45%{transform:translateX(-50%) translateY(-9vh) scale(1.08)}100%{transform:translateX(-50%) translateY(0)}}
.runner.power-through{z-index:46;animation:powerThrough .9s ease-out}
@keyframes powerThrough{0%{transform:translateX(-50%) scale(1)}45%{transform:translateX(-50%) scale(1.18)}100%{transform:translateX(-50%) scale(1)}}
.obstacle-real.rock-broken{animation:rockBreakOpen .9s ease forwards!important}
@keyframes rockBreakOpen{0%{transform:translateX(-50%) translateY(var(--hit)) scale(1)}100%{transform:translateX(-50%) translateY(var(--hit)) scale(1.14);opacity:.7}}
.runner.cat-stuck{z-index:46;animation:catStuck 1.5s ease forwards!important}
@keyframes catStuck{0%{transform:translateX(-50%)}30%,70%{transform:translateX(-50%) translateY(0)}45%{transform:translateX(-54%) rotate(-5deg)}60%{transform:translateX(-46%) rotate(5deg)}100%{transform:translateX(-50%);opacity:.25}}
.runner.net-flap{z-index:47;animation:netFlap 1.5s ease-in forwards!important}
@keyframes netFlap{0%,15%,30%,45%{transform:translateX(-50%) rotate(-7deg)}8%,23%,38%,53%{transform:translateX(-50%) rotate(7deg)}100%{transform:translateX(-50%) translateY(72vh) rotate(12deg);opacity:.15}}
.obstacle-real.net-carry,.obstacle-real.pond-carry,.obstacle-real.tree-carry{transition:transform 1.45s linear,opacity 1.2s ease!important;transform:translateX(-50%) translateY(calc(var(--hit) + 115vh))!important;opacity:.72}
.runner.pond-drift{z-index:47;animation:pondDrift 1.45s linear forwards!important}
@keyframes pondDrift{to{transform:translateX(-50%) translateY(115vh);opacity:.15}}
.runner.bird-rest{z-index:47;animation:treeRide 1.45s linear forwards  .25s!important}
.runner.leaf-eat{z-index:47;animation:treeRide 1.45s linear forwards 1.05s!important}
@keyframes treeRide{to{transform:translateX(-50%) translateY(115vh);opacity:.15}}
.race-note{position:absolute;z-index:60;transform:translate(-50%,-50%);font-size:2.8vw;font-weight:1000;color:#ffe34e;text-shadow:0 2px 4px #000;animation:noteFloat 1.3s ease forwards}
@keyframes noteFloat{to{transform:translate(-50%,-140%);opacity:0}}

/* v0.13.1 Derby opening show */
.derby-opening{background:radial-gradient(circle at 50% 48%,rgba(255,199,45,.18),rgba(5,15,28,.92))!important}.derby-title{display:grid;place-items:center;gap:1.4vh;text-align:center;color:#fff;text-shadow:0 .5vh 1.2vh #000}.derby-title small{font-size:2vw;font-weight:1000;letter-spacing:.12em}.derby-title strong{font-size:8vw;line-height:.95;font-weight:1000;letter-spacing:.04em;color:#ffd34b;-webkit-text-stroke:.18vw #fff;filter:drop-shadow(0 1vh 0 #8d5100);animation:derbyTitleIn .65s cubic-bezier(.16,.9,.2,1.25)}.derby-title b{font-size:3.6vw}.entrance-runner{animation:runnerEntrance 1.1s cubic-bezier(.16,.85,.25,1) both;animation-delay:var(--entrance-delay)!important}.race-field.entrance-pan .runner.alive{filter:drop-shadow(0 0 1.2vw #fff8)}@keyframes derbyTitleIn{0%{transform:scale(.25) rotate(-4deg);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes runnerEntrance{0%{transform:translateX(-120vw) scale(.65);opacity:0}55%{transform:translateX(2vw) scale(1.12);opacity:1}100%{transform:translateX(0) scale(1);opacity:1}}
/* v0.13.2 Derby show-flow polish */
.race-screen.race_opening:not(.opening-reveal) .race-field{visibility:hidden}
.race-screen.race_opening .countdown-overlay.derby-opening{visibility:visible;background:#000!important;opacity:1!important}
.derby-opening .derby-title strong{font-size:6.8vw;color:#ffd34b;-webkit-text-stroke:.16vw #fff;text-shadow:0 .8vh 1.4vh #000}
.race-field.intro-pan-active{z-index:80;transition:transform .42s cubic-bezier(.2,.75,.22,1);transform-origin:50% 62%;will-change:transform}
.race-message:empty{display:none!important}

/* ===== v0.13.3 SHOW POLISH ===== */
.race-prize-call{margin:.7em 0 1em;padding:.65em .85em;border-radius:14px;background:#fff5c8;border:2px solid #efbd2e;font-weight:900;font-size:1.05rem}
/* Obstacles: deliberately large and always enter from above. */
.obstacle-real{width:12.5vw!important;max-width:235px!important;top:-24%!important}
.obstacle-real.obstacle-tree{width:14vw!important}.obstacle-real.obstacle-pond,.obstacle-real.obstacle-netpond{width:14.5vw!important}.obstacle-real.obstacle-rock{width:13.5vw!important}.obstacle-real.obstacle-hurdle{width:13vw!important}
/* Multiple camera-outs fan cleanly left/right instead of stacking. */
.runner.camera-out{animation:runnerToCameraFan 1.35s cubic-bezier(.12,.72,.16,1) forwards!important}
@keyframes runnerToCameraFan{0%{transform:translateX(-50%) scale(1);opacity:1}35%{transform:translateX(calc(-50% + var(--exit-x,0vw)*.28)) translateY(-5vh) scale(1.8) rotate(calc(var(--exit-rot,0deg)*.3));opacity:1}100%{transform:translateX(calc(-50% + var(--exit-x,0vw))) translateY(-20vh) scale(8.8) rotate(var(--exit-rot,0deg));opacity:0;filter:blur(2px)}}
/* A carried loser bounces at impact, then shares the obstacle's exact downward travel timing. */
.runner.obstacle-carry{z-index:47;animation:obstacleCarry 1.45s linear forwards!important}
@keyframes obstacleCarry{0%{transform:translateX(-50%) translateY(0) scale(1)}7%{transform:translateX(-50%) translateY(-1.3vh) scale(1.08)}14%{transform:translateX(-50%) translateY(1.1vh) scale(.96)}22%{transform:translateX(-50%) translateY(-.6vh) scale(1.03)}30%{transform:translateX(-50%) translateY(0) scale(1)}100%{transform:translateX(-50%) translateY(115vh) scale(1);opacity:.15}}
/* Broken rock: shudder, grow for impact readability, then leave downward. */
.obstacle-real.rock-broken{animation:rockBreakDrop 1.65s ease-in forwards!important}
@keyframes rockBreakDrop{0%{transform:translateX(-50%) translateY(var(--hit)) scale(1)}5%{transform:translateX(calc(-50% - 5px)) translateY(var(--hit)) scale(1.03) rotate(-2deg)}10%{transform:translateX(calc(-50% + 6px)) translateY(var(--hit)) scale(1.08) rotate(2deg)}18%{transform:translateX(-50%) translateY(var(--hit)) scale(1.22)}32%{transform:translateX(-50%) translateY(var(--hit)) scale(1.22)}100%{transform:translateX(-50%) translateY(calc(var(--hit) + 115vh)) scale(1.22);opacity:.55}}
/* Opening roster presentation: blank field -> each axis arrives huge -> docks into its start slot. */
.derby-runner-intro{position:absolute;left:50%;top:50%;z-index:95;width:22vw;opacity:0;transform:translate(-50%,-50%) scale(.65);transition:transform .48s cubic-bezier(.16,.85,.22,1),opacity .2s;filter:drop-shadow(0 1.4vh 1.6vh #0006)}
.derby-runner-intro .axis-card-img{width:100%;border-radius:18px}.derby-runner-intro.from-left{transform:translate(-120vw,-50%) scale(1.05)}.derby-runner-intro.from-right{transform:translate(120vw,-50%) scale(1.05)}.derby-runner-intro.from-top{transform:translate(-50%,-100vh) scale(1.05)}.derby-runner-intro.from-bottom{transform:translate(-50%,100vh) scale(1.05)}.derby-runner-intro.show{opacity:1;transform:translate(-50%,-50%) scale(1)}.derby-runner-intro.dock{width:7.1vw;transform:translate(calc(-50% + var(--tx)),calc(-50% + var(--ty))) scale(1);transition:width .42s ease,transform .42s cubic-bezier(.2,.75,.22,1),opacity .15s}
/* Roulette: pointer is one-third-arrow farther away; zoom anchors at the pointer instead of dropping downward. */
.roulette-pointer{top:-3.2vh!important}
.roulette-zoom-world{transform-origin:50% 0!important}
.roulette-zoom-world.focus-1{transform:scale(1.75)!important}.roulette-zoom-world.focus-2{transform:scale(2.5)!important}.roulette-zoom-world.focus-3{transform:scale(3.3)!important}
/* Finale: all ten axes run from depth through the camera and disappear. */
.animal-finale{position:relative;width:100%;height:100%;overflow:hidden;background:radial-gradient(circle at 50% 45%,#9edcf7,#5da94b);perspective:900px}.finale-depth{position:absolute;inset:0}.finale-animal{position:absolute;left:50%;top:48%;width:5vw;opacity:0;transform:translate(calc(-50% + var(--x)), -50%) translateZ(-700px) scale(.12);filter:drop-shadow(0 8px 12px #0005)}.finale-animal .axis-card-img{width:100%;border-radius:12px}.animal-finale.go .finale-animal{animation:finaleRun 2.45s cubic-bezier(.2,.68,.22,1) forwards;animation-delay:calc(var(--i)*.075s)}@keyframes finaleRun{0%{opacity:0;transform:translate(calc(-50% + var(--x)*.18),-50%) translateZ(-700px) scale(.12) rotate(var(--r))}12%{opacity:1}70%{opacity:1}100%{opacity:0;transform:translate(calc(-50% + var(--x)*1.2),20vh) translateZ(650px) scale(8) rotate(var(--r))}}.finale-call{position:absolute;left:50%;top:18%;transform:translateX(-50%);font-size:4.6vw;font-weight:1000;color:#fff;text-shadow:0 .35vw .6vw #17314c;white-space:nowrap;z-index:20;opacity:0}.animal-finale.go .finale-call{animation:finaleCall 2.5s ease forwards}@keyframes finaleCall{0%{opacity:0;transform:translateX(-50%) scale(.5)}15%,65%{opacity:1;transform:translateX(-50%) scale(1)}100%{opacity:0;transform:translateX(-50%) scale(1.08)}}

/* ===== v0.13.4 DERBY PREOPEN + EXACT OBSTACLE COUNTS ===== */
.race-screen.race-preopening{background:#241d2a!important;display:grid;place-items:center}
.race-prize-cushion{position:absolute;inset:0;display:grid;place-items:center;background:radial-gradient(circle at 50% 44%,#493d50 0,#302737 52%,#1c1721 100%);padding:7vh 7vw}
.race-prize-cushion>div{max-width:88vw;padding:.72em 1.25em;background:#5b465f;border:.28vw solid #806985;border-radius:2.2vw;box-shadow:0 2.2vh 4vh #0007,inset 0 .25vh .5vh #ffffff18;color:#fff7d6;text-align:center;font-size:4.3vw;line-height:1.28;font-weight:1000;letter-spacing:.025em;text-shadow:0 .35vh .7vh #0009}

/* ===== v0.13.5 EVENT-DAY FLOW / VIEWPORT / DERBY ===== */
/* Group decision stays readable but no longer grows out of the 16:9 frame. */
.axis-card.winner.confirmed .axis-card-img{transform:scale(1.25)!important;outline-width:8px!important;box-shadow:0 0 0 12px #ffb400,0 0 48px 16px #ffd54aaa!important}
.axis-card.winner.confirmed .axis-confirm{font-size:1.45vw!important;bottom:-1.1vh!important}
/* RANDOM sudden-death view: 95% visual field, centered with breathing room. */
.spotlight-mode .s-stage{padding:2.275vh 2.5vw;background:#0c1724}
.spotlight-mode .spot-world{inset:2.5%;width:95%;height:95%;margin:auto}
/* Ground/obstacle travel is 85% of previous speed. */
.race-screen.go-live .dirt-track:before,.race-screen.race_running .dirt-track:before,.race-screen.race_deadheat .dirt-track:before,.race-screen.race_obstacle .dirt-track:before{animation-duration:.45s!important}
.obstacle-real.fall-to-hit{transition-duration:1.94s!important}
/* Clear obstacles now visibly hop. */
.runner.jump-clear{animation:runnerJumpClear 1.35s cubic-bezier(.22,.75,.25,1) forwards!important}
/* Roulette layout controls */
.sudden-layout-controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.sudden-layout-controls button.selected{background:#172b42;color:#fff;outline:4px solid #ffd34b}
