*{box-sizing:border-box}html{background:#292821}body{margin:0;min-height:100vh;background:radial-gradient(ellipse at 50% 32%,#494233 0,#292821 68%);color:#ddd2ad;font-family:Tahoma,"Microsoft YaHei",sans-serif;display:flex;justify-content:center;align-items:center;padding:18px 12px}.arcade{width:min(1150px,100%,calc((100vh - 125px)*1.3333));margin:auto}.game{width:100%;aspect-ratio:4/3;position:relative;overflow:hidden;background:#586247;box-shadow:0 16px 48px #0008;border:1px solid #6c634d}canvas{display:block;width:100%;height:100%;image-rendering:pixelated}.input-skin{position:absolute;left:2.6%;top:85.1%;width:94.8%;height:10.2%;background:url("assets/sprites/police_input.png") center/100% 100% no-repeat;pointer-events:none}.target-text{position:absolute;left:7.35%;top:86.5%;width:85.4%;height:4.2%;white-space:nowrap;overflow:hidden;color:#141414;font:700 clamp(10px,2.25vw,18px)/1.45 Arial,sans-serif;letter-spacing:.005em;text-shadow:0 0 .3px #000}.target-text .matched{color:#168bd2}.target-text .next-char{text-decoration:underline;text-decoration-color:#2084a9;text-decoration-thickness:2px;text-underline-offset:2px}.capture{position:absolute;left:7.1%;top:86.2%;width:85.8%;height:5%;border:0;outline:0;background:transparent;color:transparent;caret-color:transparent;opacity:.01;font-size:16px;cursor:text}.read-progress{position:absolute;left:6.8%;top:93.15%;width:86.3%;height:1.2%;background:#ddd9cf;border:1px solid #898579;pointer-events:none}.read-progress span{display:block;width:0;height:100%;background:#198bd2;transition:width .12s}.hotspot{position:absolute;top:87%;width:3%;height:4%;border:0;background:transparent;cursor:pointer}.previous{left:3.1%}.next{right:3.1%}.result{position:absolute;inset:29% 13% auto;text-align:center;background:#1f2c2edb;border:1px solid #e6cb6a;box-shadow:0 5px 24px #0008;padding:17px;color:#fff0ab;font-size:clamp(14px,2.3vw,20px);font-weight:700;opacity:0;transform:translateY(8px);transition:.18s;pointer-events:none}.result.visible{opacity:1;transform:translateY(0)}.options{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:12px 0 0;padding:9px 10px;background:#36352d;border:1px solid #645a42;box-shadow:inset 0 0 0 1px #25251f;min-height:42px}.option-group{display:flex;align-items:center;gap:4px;padding-right:9px;border-right:1px solid #5b543f}.option-group:last-of-type{border:0}.option-group .label{font-size:10px;color:#baa978;margin:0 3px}.option-group button,.sound,footer button{border:1px solid #726440;background:#474438;color:#d9cfaa;padding:5px 9px;font:10px Tahoma,"Microsoft YaHei",sans-serif;cursor:pointer}.option-group button:hover,.sound:hover,footer button:hover{background:#5d5844;color:#fff2bf}.option-group button.selected{color:#fff0ad;background:#766333;border-color:#c4a456;box-shadow:inset 0 0 0 1px #94793b}.option-group.compact{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:3px;border:0;padding:0 4px}.compact span{font-size:9px;color:#d9c98d;white-space:nowrap}.compact span+span{color:#958e77}.sound{margin-left:auto;white-space:nowrap}.sound[aria-pressed="true"]{color:#f2d56f}footer{display:flex;align-items:center;justify-content:space-between;padding:9px 3px 0;color:#827a62;font:9px Tahoma,"Microsoft YaHei",sans-serif}footer button{padding:3px 7px;color:#a9a083;font-size:9px}
@media(max-width:650px){body{padding:7px 5px;align-items:flex-start}.arcade{margin:4px auto}.options{gap:5px;padding:7px}.option-group{padding-right:5px}.option-group .label{font-size:8px}.option-group button,.sound{padding:4px 6px;font-size:9px}.option-group.compact{flex-direction:row;align-items:center;margin-left:0;width:100%;justify-content:space-between;border-top:1px solid #5b543f;padding-top:5px}.compact span{font-size:8px}.sound{margin-left:0}footer{font-size:7px}footer button{font-size:8px}}
.target-text .next-char{text-decoration:none}.game.started .target-text .next-char{text-decoration:underline;text-decoration-color:#2084a9;text-decoration-thickness:2px;text-underline-offset:2px}

@media(min-width:651px){body{min-height:100svh}}
.arcade:fullscreen{width:100vw;height:100vh;height:100svh;max-width:none;margin:0;padding:12px 16px;display:grid;grid-template-rows:minmax(0,1fr) auto auto;align-content:center;justify-items:center;gap:8px;background:#292821;overflow:auto}.arcade:fullscreen .game{width:min(100%,calc((100svh - 120px)*1.3333));max-height:calc(100svh - 120px);align-self:center}.arcade:fullscreen .options{width:min(100%,1150px);margin:0}.arcade:fullscreen footer{width:min(100%,1150px);padding-top:0}@media(max-width:650px){.arcade{width:100%}.arcade:fullscreen{padding:6px;gap:4px}.arcade:fullscreen .game{width:min(100%,calc((100svh - 132px)*1.3333))}}

.arcade:fullscreen{width:100vw;height:100svh;max-width:none;margin:0;padding:12px 16px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;background:#292821;overflow:auto}.arcade:fullscreen .game{flex:none;width:auto;height:min(calc(100svh - 150px),calc(100vw * .75));aspect-ratio:4/3;max-height:none;align-self:center}.arcade:fullscreen .options,.arcade:fullscreen footer{flex:none;width:min(100%,1150px);margin:0}.arcade:fullscreen footer{padding-top:0}@media(max-width:650px){.arcade:fullscreen{padding:6px;gap:4px}.arcade:fullscreen .game{height:min(calc(100svh - 180px),calc(100vw * .75))}}

.game .options{position:absolute;z-index:4;left:1.2%;right:1.2%;top:1.4%;margin:0;min-height:38px;justify-content:flex-start;gap:6px;padding:5px 7px;background:#24251fe0;border:1px solid #b49a5d;box-shadow:0 3px 14px #0008}.game .option-group{padding-right:6px}.game .option-group button,.game .sound{padding:5px 7px}.game .option-group .label{font-size:10px}.game .speed-control{gap:6px;white-space:nowrap}.speed-control input{width:100px;accent-color:#d5b65a}.speed-control #speedValue{color:#fff0ad;font-weight:bold}.game .option-group.compact{flex:1;min-width:110px;margin:0 0 0 auto;align-items:flex-end}.game .sound{margin-left:0;white-space:nowrap}.game #fullscreen{margin-left:auto}.game .result{z-index:5;inset:42% 18% auto;display:flex;flex-direction:column;align-items:center;gap:12px;pointer-events:none}.game .result.visible{pointer-events:auto}.game .result button{display:none;border:1px solid #e8d17c;background:#766333;color:#fff3bd;padding:8px 18px;font-weight:700;font-size:14px;cursor:pointer}.game .result.visible button{display:block}.game.started .options input{opacity:.72}@media(max-width:750px){.game .options{flex-wrap:wrap;align-content:flex-start;gap:3px;left:1%;right:1%;top:1%;padding:4px}.game .option-group{gap:3px;padding-right:4px}.game .option-group .label{font-size:8px;margin:0 1px}.game .option-group button,.game .sound{padding:4px 5px;font-size:8px}.game .speed-control input{width:65px}.game .option-group.compact{flex:1 1 100%;flex-direction:row;justify-content:space-between;align-items:center;border-top:1px solid #5b543f;padding-top:3px}.game .option-group.compact span{font-size:8px}.game .result{inset:38% 8% auto;padding:10px;font-size:14px}}

/* Keep the slider stationary while its percentage changes during a drag. */
.game .speed-control{flex:none}
.game .speed-control .label{display:inline-flex;align-items:center;gap:4px}
.game .speed-control #speedValue{display:inline-block;width:6ch;flex:none;text-align:right;font-variant-numeric:tabular-nums}
.game .speed-control input{flex:none;margin:0;touch-action:none}

/* The frame, typing line and progress share one box so resizing cannot separate them. */
.typing-panel{position:absolute;left:2.6%;width:94.8%;bottom:4.7%;height:min(10%,60px)}
.typing-panel .input-skin{inset:0;width:100%;height:100%}
.typing-panel .target-text{left:5%;top:15%;width:90%;height:55%}
.typing-panel .capture{left:5%;top:15%;width:90%;height:55%}
.typing-panel .read-progress{left:4.4%;top:78.7%;width:91%;height:12%}
.title-disclaimer{position:absolute;left:3%;right:3%;bottom:1.4%;margin:0;padding:5px 9px;background:#211a0ac9;border:1px solid #e3ba4a66;color:#fff2c4;text-align:center;text-shadow:0 1px 2px #000;font:clamp(10px,1.1vw,13px)/1.45 Tahoma,"Microsoft YaHei",sans-serif}

.target-text .matched{color:#087eae;font-weight:700;text-shadow:0 0 .4px #087eae}.target-text .next-char{text-decoration:underline;text-decoration-color:#2084a9;text-decoration-thickness:2px;text-underline-offset:2px}.game.started .target-text .next-char{text-decoration:underline;text-decoration-color:#2084a9;text-decoration-thickness:2px;text-underline-offset:2px}
.title-screen,.setup-screen{position:absolute;inset:0;z-index:8;background:url("assets/sprites/police_mainmenu_clean_bg.png") center/cover;display:none}.title-screen.visible,.setup-screen.visible{display:block}.title-buttons{position:absolute;left:53%;top:56%;width:42%}.title-buttons button,.setup-actions button{width:100%;border:4px solid #5c5140;border-radius:20px;background:linear-gradient(#fff,#d6d6d6);box-shadow:inset 0 0 0 2px #aaa,0 3px 8px #0007;color:#171717;font-size:clamp(18px,3vw,28px);font-weight:bold;padding:10px;cursor:pointer}.setup-screen{background:#161e22df url("assets/sprites/police_background.png") center/cover}.setup-screen:before{content:"";position:absolute;inset:0;background:#111b20cc}.setup-grid{position:absolute;inset:3% 2%;display:grid;grid-template-columns:1fr 28%;gap:2%;color:#f4d35d}.setup-left{display:grid;grid-template-rows:1fr 1fr 1.3fr auto;gap:10px;min-height:0}.setup-panel,.passage-panel,.setup-help{background:#283840cc;border:1px solid #a88d3b;min-height:0}.setup-panel h2,.passage-panel h2,.setup-help h2{margin:0;background:#c5a13b;color:#fff;padding:2px 6px;font-size:16px}.choice-row{height:calc(100% - 22px);display:flex;align-items:center;justify-content:space-evenly}.choice{width:45%;height:92%;position:relative;display:grid;place-items:center;overflow:hidden;background:#35464c8c;border:1px solid #b79d4b;cursor:pointer}.choice.selected{outline:2px solid #f0cf54;background:#607078bb}.choice img{max-width:78%;max-height:76%;object-fit:contain;image-rendering:pixelated}.choice img[src*="police_car"],.choice img[src*="police_bike"]{position:absolute;left:6%;top:14%;width:180%;max-width:none;max-height:none;object-fit:initial;clip-path:inset(0 75% 0 0);mix-blend-mode:screen}.choice span{position:absolute;bottom:3px;right:7px;color:#fff;font-size:13px}.setup-help{padding:0 10px;color:#e0ca73}.setup-help p{margin:12px 0}.setup-actions{display:flex;justify-content:center;gap:40px}.setup-actions button{width:110px;background:transparent;border:0;box-shadow:none;color:#ffdf5c;font-size:22px;padding:4px}.passage-panel{display:flex;flex-direction:column;overflow:hidden}.passage-panel #passageList{overflow:auto;padding:3px}.passage-panel #passageList button{display:block;width:100%;text-align:left;background:transparent;border:0;color:#f0c633;padding:3px;font:12px monospace;cursor:pointer}.passage-panel #passageList button.selected,.passage-panel #passageList button:hover{background:#be9a39;color:#111}.game:not(.ready) .options{display:none}

.target-text .matched{color:#075c88;background:#d8edf7;border-radius:2px;padding:0 1px;font-weight:700;text-shadow:none}
.title-buttons button{transition:box-shadow .15s ease,transform .15s ease}
.title-buttons button:hover,.title-buttons button:focus-visible{background:linear-gradient(#fff2b6,#dcae43);border-color:#8e641d;box-shadow:inset 0 0 0 2px #fff5c7,0 5px 12px #0009;color:#422900;transform:translateY(-2px)}
.title-buttons button:active{transform:translateY(0)}
.mount-row{height:calc(100% - 22px);display:grid;grid-template-columns:1fr 1fr;gap:3%;padding:2px 10px 6px}
.mount-group{min-width:0;min-height:0;display:flex;flex-direction:column;border:1px solid #b79d4b;background:#35464c8c}
.mount-group.active{outline:2px solid #f0cf54;background:#607078bb}
.mount-heading{display:flex;justify-content:space-between;gap:4px;padding:3px 5px;color:#ffdf8b;font-size:11px;white-space:nowrap}
.mount-heading span{font-size:10px;color:#fff0ba}
.mount-choices{display:flex;flex:1;min-height:0}
.mount-choices button{width:50%;min-width:0;border:1px solid transparent;background:transparent;color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:2px;padding:1px;cursor:pointer;font:11px Tahoma,"Microsoft YaHei",sans-serif}
.mount-choices button:hover{background:#75877980}
.mount-choices button.selected{border-color:#f0cf54;background:#71888488}
.mount-choices img{max-width:90%;height:calc(100% - 18px);object-fit:contain;image-rendering:pixelated}
@media(max-width:650px){.mount-heading{font-size:8px}.mount-heading span{font-size:8px}.mount-choices button{font-size:8px}.mount-row{gap:2%;padding:2px 5px 4px}}

/* Original single-player selection screen, scaled with the game canvas. */
.game{container-type:inline-size}
.setup-grid{inset:3.3% 1.2% 2.8%;grid-template-columns:minmax(0,69%) minmax(0,28.3%);gap:2.7%}
.setup-left{grid-template-rows:159fr 110fr 198fr 57fr;gap:1.5cqw}
.character-row,.mount-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5.4%;height:auto;min-height:0;padding:0}
.character-choice{display:block;width:100%;height:100%;padding:0;border:0;outline:0;background-color:transparent;background-repeat:no-repeat;background-size:400% 100%;background-position:0 0;image-rendering:pixelated;cursor:pointer}
.police-choice{background-image:url("assets/sprites/police_police.png")}
.thief-choice{background-image:url("assets/sprites/police_thief.png")}
.character-choice:hover{background-position:33.333% 0}
.character-choice.selected,.character-choice.selected:hover{background-position:66.666% 0}
.character-choice:focus-visible,.mount-choices button:focus-visible,.setup-actions button:focus-visible{outline:2px solid #fff6af;outline-offset:2px}
.mount-panel{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;border:1px solid #a88d3b;background:#314149a6}
.mount-panel h2,.setup-help h2,.passage-panel h2{height:2.5cqw;flex:none;line-height:2.5cqw;margin:0;padding:0 .4cqw;background:#c3a03f;color:white;font-size:2cqw;font-weight:bold}
.mount-choices{display:flex;flex:1;min-height:0;align-items:center;justify-content:space-around;padding:0}
.mount-choices button{display:block;flex:none;width:35.2%;height:100%;min-width:0;padding:0;margin:0;border:0;background-color:transparent;background-repeat:no-repeat;background-size:400% 100%;background-position:0 0;image-rendering:pixelated;cursor:pointer;font-size:0}
.mount-choices button.car-choice{background-image:url("assets/sprites/police_car_transparent.png")}
.mount-choices button.bike-choice{background-image:url("assets/sprites/police_bike_transparent.png")}
.mount-choices button:hover,.mount-choices button.selected,.mount-choices button.selected:hover{border:0;background-color:transparent;background-repeat:no-repeat;background-size:400% 100%;background-position:33.333% 0}
.setup-help{padding:0;border:1px solid #a88d3b;background:#263840b8;color:#f3d349}
.setup-help p{margin:1.5cqw 1cqw 0;font-size:1.7cqw;line-height:1.5}
.setup-help .setup-notice{color:#fff0ac;font-weight:bold}
.setup-actions{display:flex;justify-content:center;align-items:center;gap:7cqw}
.setup-actions button{display:block;width:6cqw;height:3.25cqw;min-width:0;padding:0;border:0;border-radius:0;box-shadow:none;background-color:transparent;background-repeat:no-repeat;background-size:300% 100%;background-position:0 0;color:transparent;font-size:0;line-height:0;cursor:pointer}
.setup-actions #beginGame{background-image:url("assets/sprites/police_start.png")}
.setup-actions #cancelSetup{background-image:url("assets/sprites/police_cancel.png")}
.setup-actions button:hover,.setup-actions button:focus-visible{background-position:50% 0;background-color:transparent;color:transparent}
.setup-actions button:active{background-position:100% 0}
.passage-panel{background:#283840ba}
.passage-panel #passageList{padding:0;overflow-y:auto}
.passage-panel #passageList button{display:block;width:100%;height:3cqw;padding:0 .45cqw;overflow:hidden;white-space:nowrap;text-overflow:clip;border:0;background:transparent;color:#e6c62d;text-align:left;font:1.45cqw/3cqw "Courier New",monospace;cursor:pointer}
.passage-panel #passageList button:hover{background:#75652c;color:#ffe66a}
.passage-panel #passageList button.selected,.passage-panel #passageList button.selected:hover{background:#050505;color:#e5c234;box-shadow:inset 0 0 0 1px #e6c34a}
