:root{--color-bg:#f7f1dc;--color-bg-stripe:#74b85726;--color-sky:#bfe7ff;--color-grass:#74b857;--color-grass-light:#9bd874;--color-surface:#fffaf0;--color-surface-raised:#fff;--color-surface-inset:#fff4d7;--color-track:#d59b56;--color-lane:#ffffff57;--color-text:#2b2418;--color-text-strong:#171109;--color-text-soft:#3a2c16;--color-input-text:#171109;--color-muted:#655a46;--color-muted-strong:#5b4d32;--color-muted-dim:#8d7d61;--color-white:#fff;--color-accent:#f2b705;--color-accent-hover:#ffd447;--color-accent-contrast:#171109;--color-input-border:#caa66c;--color-danger:#dc3f31;--color-danger-soft:#b52e24;--color-danger-surface:#ffe4df;--color-danger-badge-text:#6e1812;--color-danger-badge-surface:#ffe4df;--color-danger-wash:#dc3f312e;--color-success:#2e8b57;--color-border:#caa66c;--color-border-strong:#986c2c;--color-border-muted:#dcc697;--color-border-soft:#bfa477;--color-track-border:#986c2c;--color-lane-border:#ffffff8f;--color-stat-divider:#dcc697;--color-cut-in:#fff6d7;--color-cut-in-major:#ffe6a6;--color-result-surface:#fff0b8;--color-log-text:#3a2c16;--radius-control:7px;color:var(--color-text);background:var(--color-bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:16px}*{box-sizing:border-box}html{background:var(--color-bg)}body{min-width:320px;min-height:100vh;color:var(--color-text);background:linear-gradient(180deg, var(--color-sky) 0 180px, transparent 181px), linear-gradient(90deg, var(--color-bg-stripe) 0 2px, transparent 2px 34px), var(--color-bg);margin:0}button,input,textarea,select{font:inherit}button{border:2px solid var(--color-border-strong);border-radius:var(--radius-control);min-width:0;min-height:46px;color:var(--color-text);background:var(--color-surface-raised);cursor:pointer;overflow-wrap:anywhere;text-align:center;padding:10px 14px;font-weight:800;line-height:1.2;box-shadow:inset 0 -3px #5b3f1829}button:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-text-strong)}button:focus-visible,input:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.48}input{border:2px solid var(--color-input-border);border-radius:var(--radius-control);width:100%;min-height:46px;color:var(--color-input-text);background:var(--color-surface-inset);padding:10px 12px}input::placeholder{color:var(--color-muted-dim)}.app-shell{min-height:100vh;padding:12px;display:flex}.screen{align-self:flex-start;width:min(100%,920px);margin:0 auto}.screen-header{flex-direction:column;gap:8px;margin-bottom:18px;padding:10px 0 0;display:flex}.race-header{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:12px;display:grid}.race-header strong{border:2px solid var(--color-accent);border-radius:var(--radius-control);min-width:58px;color:var(--color-accent-contrast);background:var(--color-accent);text-align:center;padding:7px 8px;font-size:1rem}.eyebrow{color:var(--color-accent);letter-spacing:0;text-transform:uppercase;margin:0;font-size:.84rem;font-weight:900}h1,h2,p,dl{margin-top:0}h1{max-width:100%;color:var(--color-text-strong);overflow-wrap:anywhere;margin-bottom:0;font-size:2.35rem;line-height:.98}h2{color:var(--color-text-soft);margin-bottom:10px;font-size:1.08rem;line-height:1.2}.lede,.small-note{color:var(--color-muted);overflow-wrap:anywhere;line-height:1.55}.setup-form,.heat-plan,.horse-card,.result-summary>section,.replay-log{border:2px solid var(--color-border);border-radius:var(--radius-control);background:var(--color-surface);padding:14px}.name-list,.horse-grid,.race-track{gap:10px;display:grid}.name-row{grid-template-columns:28px minmax(0,1fr);align-items:center;gap:8px;display:grid}.name-row>span{border:2px solid var(--color-accent);width:28px;height:28px;color:var(--color-accent);place-items:center;font-weight:900;display:grid}.name-row button{grid-column:2}.button-row{grid-template-columns:1fr;gap:10px;margin-top:14px;display:grid}.primary-button{border-color:var(--color-accent);color:var(--color-accent-contrast);background:var(--color-accent)}.primary-button:hover:not(:disabled){color:var(--color-accent-contrast);background:var(--color-accent-hover)}.ghost-button{border-color:var(--color-border-soft);background:var(--color-surface-inset)}.error-message{color:var(--color-danger-soft);margin:12px 0 0;font-weight:800}.heat-plan{margin-top:14px}.heat-line{border-top:2px dashed var(--color-border-muted);gap:4px;padding:10px 0;display:grid}.heat-line span{overflow-wrap:anywhere}.horse-grid{grid-template-columns:1fr}.horse-card{gap:14px;display:grid}.horse-card-header{grid-template-columns:5.8rem minmax(0,1fr);align-items:center;gap:12px;display:grid}.horse-card-header .horse-sprite{width:5.6rem}.participant-name{color:var(--color-accent);overflow-wrap:anywhere;margin-bottom:4px;font-weight:900}.badge{border:2px solid var(--color-danger);max-width:100%;color:var(--color-danger-badge-text);background:var(--color-danger-badge-surface);overflow-wrap:anywhere;border-radius:999px;padding:3px 8px;font-size:.82rem;font-weight:900;display:inline-block}.stat-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;margin-bottom:0;display:grid}.stat-grid div{border-left:2px solid var(--color-stat-divider);min-width:0;padding-left:6px}.stat-grid dt{color:var(--color-muted-strong);text-overflow:ellipsis;font-size:.76rem;font-weight:800;overflow:hidden}.stat-grid dd{color:var(--color-white);margin:0;font-weight:900}.horse-stat-radar{margin:0}.horse-stat-radar svg{width:100%;max-width:260px;margin:0 auto;display:block}.radar-grid-shape{fill:#ffffff75;stroke:var(--color-border);stroke-width:2px}.radar-value-shape{fill:#f2b7056b;stroke:var(--color-accent);stroke-linejoin:round;stroke-width:3px}.radar-label text{fill:var(--color-muted);font-size:.58rem;font-weight:800}.radar-label .radar-label-value{fill:var(--color-text-strong);font-size:.68rem;font-weight:900}.cut-in{border:2px solid var(--color-border);border-radius:var(--radius-control);background:var(--color-cut-in);align-content:center;gap:3px;min-height:64px;max-height:92px;margin-bottom:10px;padding:10px 12px;display:grid;overflow:hidden}.cut-in strong,.cut-in span{overflow-wrap:anywhere;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.cut-in strong{color:var(--color-accent);-webkit-line-clamp:1}.cut-in span{color:var(--color-muted);-webkit-line-clamp:2}.cut-in-major{border-color:var(--color-accent);background:var(--color-cut-in-major)}.cut-in-rare{border-color:var(--color-danger);background:var(--color-danger-surface)}.race-track{border:2px solid var(--color-track-border);border-radius:var(--radius-control);background:radial-gradient(circle at 12% 8%, #ffffff57, transparent 24%), linear-gradient(90deg, transparent calc(100% - 24px), #17110924 calc(100% - 24px)), repeating-linear-gradient(0deg, transparent 0 60px, #ffffff61 60px 63px), linear-gradient(180deg, var(--color-grass-light), var(--color-grass));margin-bottom:14px;padding:16px 8px 10px;position:relative;overflow:hidden;box-shadow:inset 0 0 0 6px #ffffff3d,inset 0 -18px 28px #2658243d,0 8px #54743033}.race-track:after{background:repeating-linear-gradient(0deg, var(--color-white) 0 7px, #171109 7px 14px), var(--color-white);content:"";pointer-events:none;z-index:2;border-inline:1px solid #17110952;width:9px;position:absolute;inset:12px 14px 12px auto;box-shadow:-8px 0 #fff3,6px 0 #1711091f}.race-track:before{border-radius:var(--radius-control);background:repeating-linear-gradient(90deg, #ffffff1f 0 2px, transparent 2px 34px), linear-gradient(180deg, #ffffff38, transparent 32%), linear-gradient(180deg, #e3ad65, var(--color-track) 58%, #a96b2f);content:"";position:absolute;inset:20px 22px 18px 18px;box-shadow:inset 0 2px #ffffff47,inset 0 -7px #4c2b1129,inset 0 0 0 2px #895a2247}.race-lane{z-index:1;grid-template-rows:minmax(68px,auto) minmax(34px,auto);grid-template-columns:72px minmax(0,1fr);align-items:stretch;gap:4px 8px;min-height:112px;display:grid;position:relative}.lane-meta{border-right:3px solid #ffffffc2;align-content:center;gap:3px;min-width:0;padding-right:8px;display:grid}.lane-meta strong{color:var(--color-accent);font-size:1.18rem;line-height:1}.lane-meta span,.state-label,.horse-token small{overflow-wrap:anywhere;word-break:break-word;min-width:0}.lane-meta span{color:var(--color-text-strong);font-weight:900;line-height:1.18}.lane-track{border:2px solid var(--color-lane-border);border-radius:var(--radius-control);background:linear-gradient(90deg, transparent calc(100% - 24px), #1711092e calc(100% - 24px) calc(100% - 21px), #ffffff6b calc(100% - 21px)), repeating-linear-gradient(90deg, #fff3 0 1px, transparent 1px 28px), linear-gradient(180deg, #ffffff57, #ffffff1a), var(--color-lane);min-width:0;height:76px;position:relative;overflow:visible;box-shadow:inset 0 2px #ffffff57,inset 0 -9px #7345181a,0 2px #5232141a}.horse-token{--horse-lane-shift:0px;--horse-progress-ratio:0;width:5.9rem;min-width:0;transform:translate(-24px, var(--horse-lane-shift));justify-items:center;transition:left 80ms linear,transform .18s ease-out;display:grid;position:absolute;top:2px}.horse-token:before{width:calc(.8rem + (1.8rem * var(--horse-progress-ratio)));filter:blur(.4px);height:.42rem;opacity:calc(.18 + (.42 * var(--horse-progress-ratio)));content:"";pointer-events:none;background:radial-gradient(circle,#fff3d3d6 0 34%,#0000 36%),radial-gradient(circle at 78% 56%,#794a1f2e,#0000 52%);border-radius:999px;position:absolute;top:2.75rem;left:-.45rem;transform:translate(-54%)}.horse-token[data-interaction=attacking]{--horse-lane-shift:var(--attack-lane-offset,0px);z-index:4}.horse-token[data-interaction=defending]{z-index:3}.horse-token[data-interaction=countering]{z-index:5}.horse-token[data-interaction=stunned]{--horse-lane-shift:var(--attack-lane-offset,0px);z-index:2}.horse-token small{max-width:5.7rem;color:var(--color-text-strong);text-align:center;text-overflow:ellipsis;text-shadow:none;white-space:nowrap;background:#fffaf0c7;border:1px solid #ffffff94;border-radius:999px;padding:1px 5px;font-size:.7rem;font-weight:800;line-height:1.12;overflow:hidden}.horse-sprite{aspect-ratio:82/66;transform-origin:50% 78%;width:5.1rem;display:block;position:relative}.horse-sprite-frame{background-position:0 0;background-repeat:no-repeat;background-size:calc(var(--sprite-frame-width) * var(--sprite-frame-count)) var(--sprite-frame-height);image-rendering:pixelated;transform-origin:50%;position:absolute;inset:0}.horse-sprite:before{content:"";background:#2b241842;border-radius:999px;height:8%;position:absolute;bottom:7%;left:16%;right:12%;transform:translateY(.7rem)}.horse-sprite:after{opacity:0;content:"";pointer-events:none;position:absolute}.horse-sprite-sheet .horse-sprite-frame{animation:sprite-cycle var(--sprite-duration) steps(var(--sprite-frame-count)) infinite}.horse-sprite[data-facing=right] .horse-sprite-frame{transform:scaleX(-1)}.horse-sprite[data-state=attacking]{animation:.36s ease-in-out infinite alternate horse-lunge}.horse-sprite[data-state=defending]{animation:.22s ease-in-out infinite alternate horse-defend}.horse-sprite[data-state=countering]{animation:.36s ease-in-out infinite alternate horse-counter}.horse-sprite[data-state=hit]{animation:.18s linear infinite alternate horse-hit}.horse-sprite[data-state=vomiting]{animation:.62s ease-in-out infinite alternate sick-sway}.horse-sprite[data-state=stunned]{animation:.7s ease-in-out infinite alternate horse-stunned}.horse-sprite[data-state=finishStall]{animation:.9s ease-in-out infinite alternate finish-stall}.horse-sprite[data-mode=race][data-state=vomiting]:after{opacity:1;background:#76c94e;border-radius:999px;width:1.1rem;height:.42rem;top:39%;right:-.32rem;transform:rotate(12deg)}.horse-sprite[data-mode=race][data-state=stunned]:after{clip-path:polygon(50% 0,61% 35%,98% 35%,68% 56%,79% 94%,50% 70%,21% 94%,32% 56%,2% 35%,39% 35%);opacity:1;background:#f7d154;width:.78rem;height:.78rem;top:4%;left:8%}.horse-sprite[data-mode=race][data-state=finishStall]:after{opacity:1;background:linear-gradient(90deg,#111 0 25%,#0000 25% 50%,#111 50% 75%,#0000 75%),#fff;border:1px solid #1711098c;width:1.35rem;height:.85rem;top:14%;left:-.25rem}.event-bubble{z-index:6;border-radius:var(--radius-control);max-width:min(50%,184px);max-height:42px;color:var(--color-accent-contrast);background:linear-gradient(180deg, #ffd95e, var(--color-accent));overflow-wrap:anywhere;word-break:break-word;border:2px solid #171109db;padding:4px 8px;font-size:.78rem;font-weight:900;line-height:1.15;position:absolute;top:6px;right:7px;overflow:hidden;box-shadow:0 2px #17110947,0 0 0 3px #ffffff2e}.event-bubble:after{background:var(--color-accent);content:"";border-bottom:2px solid #171109db;border-right:2px solid #171109db;width:.65rem;height:.65rem;position:absolute;bottom:-.38rem;right:1.2rem;transform:rotate(45deg)}.state-label{min-height:34px;color:var(--color-muted);overflow-wrap:anywhere;word-break:break-word;grid-column:2;font-size:.84rem;font-weight:700;line-height:1.25;display:block}.loser-reveal{border:3px solid var(--color-accent);border-radius:var(--radius-control);min-width:0;max-width:100%;color:var(--color-text-strong);background:linear-gradient(90deg, var(--color-danger-wash), transparent 48%), var(--color-result-surface);gap:8px;margin-bottom:14px;padding:18px;display:grid;overflow:hidden}@keyframes sprite-cycle{0%{background-position:0 0}to{background-position:calc(var(--sprite-frame-width) * var(--sprite-frame-count) * -1) 0}}@keyframes sick-sway{0%{transform:translateY(1px)rotate(-2deg)}to{transform:translateY(4px)rotate(2deg)}}@keyframes horse-stunned{0%{transform:translateY(.18rem)rotate(-4deg)}to{transform:translateY(.45rem)rotate(-9deg)}}@keyframes finish-stall{0%{transform:translateY(0)rotate(0)}to{transform:translateY(-.12rem)rotate(3deg)}}@keyframes horse-lunge{0%{transform:translate(0)rotate(0)}to{transform:translate(8px)rotate(-3deg)}}@keyframes horse-counter{0%{transform:translate(0)rotate(0)}to{transform:translate(-7px)rotate(4deg)}}@keyframes horse-hit{0%{transform:translate(0)}to{transform:translate(-5px)}}@keyframes horse-defend{0%{transform:translate(0)rotate(0)}to{transform:translate(-7px)rotate(-4deg)}}.loser-reveal p,.loser-reveal strong,.loser-reveal span{overflow-wrap:anywhere;word-break:break-word;min-width:0;max-width:100%}.loser-reveal p{color:var(--color-muted);margin-bottom:0;font-weight:800}.loser-reveal strong{font-size:2.8rem;line-height:.98;display:block}.loser-reveal span{color:var(--color-accent);font-weight:900}.tournament-notice{border:2px solid var(--color-accent);border-radius:var(--radius-control);color:var(--color-text-strong);background:var(--color-cut-in-major);overflow-wrap:anywhere;margin-bottom:14px;padding:12px;font-weight:900;line-height:1.45}.result-summary{grid-template-columns:1fr;gap:10px;margin-bottom:14px;display:grid}.result-summary p,.replay-log li{color:var(--color-log-text);overflow-wrap:anywhere;line-height:1.5}.replay-log ol{gap:8px;margin:0;padding-left:22px;display:grid}@media (width>=480px){.app-shell{padding:18px}.button-row{grid-template-columns:repeat(3,minmax(0,1fr))}.name-row{grid-template-columns:28px minmax(0,1fr) minmax(76px,auto)}.name-row button{grid-column:auto}.race-lane{grid-template-columns:92px minmax(0,1fr)}}@media (width>=720px){.app-shell{align-items:center;padding:28px}.screen-header{margin-bottom:22px}h1{font-size:3.7rem}.horse-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.result-summary{grid-template-columns:2fr 1fr}.race-track{padding:14px 10px 10px}.race-lane{grid-template-columns:116px minmax(0,1fr);min-height:112px}.lane-track{height:76px}.loser-reveal strong{font-size:4.8rem}}
