*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}.factor-page{margin:0;min-height:100dvh}.factor-header{display:grid;grid-template-columns:56px minmax(0,1fr) 56px 56px;gap:8px}.factor-header h1{text-align:center;font-size:clamp(1rem,4vw,1.6rem)}.factor-header .nb-btn{padding:8px;min-width:56px;font-size:1.3rem}.factor-page main{max-width:1040px;margin:auto;padding:10px max(12px,env(safe-area-inset-right)) 0 max(12px,env(safe-area-inset-left))}.factor-page button:focus-visible,.factor-page a:focus-visible,.factor-page select:focus-visible{outline:4px solid var(--focus);outline-offset:3px}.setup{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;padding:4px 0}.choice{display:flex;align-items:center;gap:8px;padding:8px;font-size:.9rem;font-weight:850}.choice select{min-height:56px;min-width:86px;border:1px solid var(--edge);border-radius:16px;background:var(--paper);padding:6px 8px;font:900 1rem var(--font);color:var(--ink)}.segmented{display:flex;gap:6px}.segmented .nb-btn{padding:8px 12px;font-size:.95rem}.segmented [aria-pressed=true]{background:var(--picked);outline:3px solid var(--picked-edge);outline-offset:1px}.restart{font-size:1rem}
.scorebar{display:flex;align-items:center;justify-content:center;gap:clamp(10px,4vw,40px);margin:8px 0;font-weight:900;flex-wrap:wrap}.clock{font-size:clamp(1.4rem,4vw,2rem);font-variant-numeric:tabular-nums;min-width:3ch;text-align:center}.score,.team{display:flex;align-items:center;gap:7px;color:var(--muted)}.score b,.team b{font-size:1.35rem;color:var(--ink)}.timer-track{height:7px;max-width:820px;margin:6px auto;border-radius:99px;background:var(--tray);overflow:hidden}.timer-track div{height:100%;width:100%;border-radius:inherit;background:var(--picked-edge);transition:width .1s linear}.prompt{min-height:1.5em;margin:8px 0;text-align:center;font-weight:900;font-size:clamp(.95rem,3vw,1.2rem)}
.arena{position:relative;isolation:isolate;width:100%;height:min(57dvh,580px);min-height:350px;max-height:580px;margin:0 auto;overflow:hidden;border:6px solid var(--picked-edge);border-radius:28px;background:radial-gradient(ellipse at 48% 46%,var(--picked),var(--sage) 88%);box-shadow:inset 0 0 0 3px var(--glass),0 5px 0 var(--forest);touch-action:none}.arena-lines{position:absolute;inset:7%;border:3px solid var(--glass);border-radius:44%;pointer-events:none}.arena-lines::before{content:"";position:absolute;left:50%;top:0;bottom:0;border-left:3px solid var(--glass)}.arena-lines::after{content:"";position:absolute;width:27%;aspect-ratio:1;left:50%;top:50%;transform:translate(-50%,-50%);border:3px solid var(--glass);border-radius:50%}.units{position:absolute;inset:0}.unit{position:absolute;z-index:2;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;justify-content:center;width:86px;height:106px;padding:3px;border:3px solid transparent;border-radius:18px;background:var(--paper);color:var(--ink);box-shadow:0 3px 0 var(--edge-dark);transition:left .08s linear,top .08s linear,border-color .12s,transform .12s}.unit.you{border-color:var(--picked-edge);background:var(--picked);box-shadow:0 0 0 3px var(--glow),0 3px 0 var(--picked-edge);z-index:3}.unit.them{background:var(--paper)}.unit.neutral{border-color:var(--edge);border-style:dashed;background:var(--paper)}.unit:active{transform:translate(-50%,-50%) scale(.95)}.unit svg{width:62px;height:65px;pointer-events:none}.unit .unit-number{font-size:1.35rem;line-height:1;font-weight:1000}.unit .owner{font-size:.65rem;font-weight:900;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.tag-button{position:absolute;z-index:5;right:16px;bottom:16px;min-width:110px;font-size:1.18rem}.stick{position:absolute;z-index:4;left:18px;bottom:18px;width:124px;height:124px;border:3px solid var(--paper);border-radius:50%;background:var(--glass);touch-action:none;user-select:none}.stick-hint{position:absolute;inset:0;display:grid;place-items:center;color:var(--ink);font-size:.78rem;font-weight:1000;letter-spacing:.1em}.knob{position:absolute;left:50%;top:50%;width:48px;height:48px;border-radius:50%;border:3px solid var(--paper);background:var(--gold);box-shadow:0 3px 6px var(--edge-dark);transform:translate(-50%,-50%);pointer-events:none}.key-help{position:absolute;right:16px;top:14px;border-radius:99px;background:var(--glass);padding:6px 10px;font-size:.75rem;font-weight:800;color:var(--ink)}.key-help span{margin-left:8px}.message{position:absolute;z-index:6;left:50%;top:25%;transform:translate(-50%,-10px);max-width:90%;border-radius:18px;padding:10px 16px;background:var(--ink);color:var(--paper);font-weight:900;text-align:center;opacity:0;pointer-events:none;transition:opacity .1s,transform .1s}.message.show{opacity:1;transform:translate(-50%,0)}.message.invalid{background:var(--count-b)}.ending{position:absolute;z-index:8;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:14px;background:var(--paper);text-align:center}.ending[hidden]{display:none}.ending .cheer{font-size:4rem}.ending strong{font-size:clamp(1.6rem,6vw,3rem)}.ending p{margin:4px 0;max-width:28rem;font-weight:800}.world-links{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;margin:14px;font-weight:900}.unit .group-count{position:absolute;right:-5px;top:-8px;border:2px solid var(--picked-edge);border-radius:99px;background:var(--picked);padding:3px 6px;font-size:.9rem;font-weight:950;color:var(--ink)}.unit .group-count[hidden]{display:none}
@media(max-width:620px){.factor-header{gap:4px}.factor-header .nb-btn,.factor-header .nb-home{min-width:48px;width:48px;min-height:48px;height:48px}.factor-header{grid-template-columns:48px minmax(0,1fr) 48px 48px}.setup{gap:6px}.choice{padding:6px;font-size:.85rem}.segmented .nb-btn{padding:8px;font-size:.9rem}.scorebar{gap:8px}.score,.team{font-size:.85rem;gap:4px}.arena{height:min(57dvh,520px);min-height:330px;border-width:4px;border-radius:22px}.unit{width:72px;height:92px}.unit svg{width:54px;height:57px}.unit .unit-number{font-size:1.2rem}.stick{width:104px;height:104px;left:12px;bottom:12px}.knob{width:42px;height:42px}.tag-button{right:12px;bottom:12px;min-width:94px;font-size:1rem}.key-help{top:9px;right:9px;font-size:.65rem}}
@media(max-height:650px) and (orientation:landscape){.setup{padding:0}.scorebar{margin:4px 0}.timer-track,.prompt{margin:4px auto}.arena{height:calc(100dvh - 240px);min-height:240px;max-height:none;width:min(100%,940px)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
/* Give the native picker an explicit box on mobile WebKit as well. */
.factor-page #playerNumber{min-width:80px;min-height:56px;min-inline-size:80px;min-block-size:56px;height:56px;width:auto}
