:root { color-scheme: dark; --teal: #073f42; --teal-dark: #06292a; --gold: #d6a33c; --gold-bright: #ffd46f; --paper: #f2d99c; --paper-deep: #c9944d; --ink: #2a160b; --red: #a42b21; --blue: #10537d; --green: #176e5e; --shadow: 0 18px 48px rgba(0, 0, 0, 0.42); } * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; color: #fff0bc; font-family: Georgia, "Times New Roman", serif; background: linear-gradient(90deg, rgba(6, 41, 42, 0.9), rgba(65, 36, 10, 0.65)), #241508; overflow: hidden; } button, textarea { font: inherit; } button { cursor: pointer; } button:disabled { cursor: default; } .game-board { width: min(1920px, 100vw); height: 100vh; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; margin: 0 auto; padding: 0 0 8px; background: repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.025) 0 1px, transparent 1px 18px), linear-gradient(180deg, #0c4141 0 15%, #261307 15% 100%); border: 3px solid #8e5f18; box-shadow: inset 0 0 0 3px #e0a83d, var(--shadow); } .top-banner { height: 128px; display: grid; grid-template-columns: 288px minmax(0, 1fr) 172px 94px; align-items: stretch; gap: 10px; padding: 6px 10px; background: linear-gradient(180deg, rgba(255, 233, 145, 0.16), transparent 32%), linear-gradient(90deg, #063538, #07484b 52%, #063538); border-bottom: 5px solid #b47b25; box-shadow: inset 0 -2px 0 #ffd476; } .bureau-crest { position: relative; display: grid; place-items: center; overflow: hidden; } .bureau-crest img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: fill; } .title-panel { position: relative; display: grid; place-items: center; align-content: center; min-width: 0; } .title-panel:before, .title-panel:after { content: ""; position: absolute; top: 58%; width: 120px; height: 11px; background: linear-gradient(90deg, transparent, var(--gold-bright), transparent); } .title-panel:before { left: 34px; } .title-panel:after { right: 34px; } .title-panel h1 { margin: 0; color: #ffc85f; font-size: clamp(3.4rem, 7vw, 6.3rem); line-height: 0.86; letter-spacing: 0; text-transform: uppercase; text-shadow: 0 3px 0 #5f3209, 0 6px 0 #171008, 0 0 18px rgba(255, 214, 105, 0.45); white-space: nowrap; } .title-panel p { margin: 10px 0 0; color: #ffd46f; font-size: 1.16rem; font-weight: 950; letter-spacing: 0.14em; text-transform: uppercase; } .title-panel h1[contenteditable="true"], .title-panel p[contenteditable="true"] { max-width: 100%; outline: 0; cursor: text; } .title-panel h1[contenteditable="true"]:focus, .title-panel p[contenteditable="true"]:focus { text-decoration: underline; text-decoration-color: rgba(255, 212, 111, 0.8); text-underline-offset: 0.12em; } .turn-panel, .gear-button { border: 4px solid #b98127; background: linear-gradient(180deg, rgba(255, 213, 109, 0.15), transparent), #08393c; box-shadow: inset 0 0 0 2px #52320b, 0 4px 0 #301a05; } .turn-panel { display: grid; place-items: center; align-content: center; color: #ffd46f; text-transform: uppercase; } .turn-panel span, .turn-panel small { font-weight: 950; letter-spacing: 0.08em; } .turn-panel strong { color: #fff0bc; font-size: 2.45rem; line-height: 1; } .gear-button { display: grid; place-items: center; color: #ffdf86; font-size: 3.3rem; } .gear-button.muted { opacity: 0.62; } .table-grid { height: auto; min-height: 0; display: grid; grid-template-columns: 286px minmax(0, 1fr) 334px; gap: 8px; padding: 8px; } .left-rail, .right-rail, .center-stage { min-height: 0; } .left-rail, .right-rail { display: grid; gap: 10px; } .left-rail { grid-template-rows: minmax(0, 1fr) 92px 62px 46px 42px; } .right-rail { grid-template-rows: minmax(0, 0.92fr) minmax(0, 1fr); } .wanted-card, .active-units, .lookout-board, .statements-panel { border: 4px solid #b98127; box-shadow: inset 0 0 0 2px #55320b, var(--shadow); } .wanted-card { min-height: 0; display: grid; justify-items: center; gap: 7px; padding: 14px; color: var(--ink); background: linear-gradient(180deg, rgba(255, 255, 255, 0.45), transparent 24%), var(--paper); } .wanted-card h2 { margin: 0; color: #8b2217; font-size: 3rem; line-height: 0.95; letter-spacing: 0.02em; text-transform: uppercase; } .suspect-image { width: 198px; height: min(224px, 28vh); object-fit: cover; border: 2px solid #9e6d2c; box-shadow: inset 0 0 0 3px rgba(255, 239, 185, 0.5); } .wanted-card dl { width: 100%; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 8px; margin: 0; } .wanted-card dt { color: #251304; font-weight: 950; text-transform: uppercase; } .wanted-card dd { min-width: 0; margin: 0; color: #5c1f13; font-weight: 800; line-height: 1.02; } #wantedLastSeen { color: #8b2217; } .wanted-card strong { color: #4b2109; font-size: 1.55rem; } .wanted-card small { color: #4b2109; font-weight: 950; letter-spacing: 0.08em; text-transform: uppercase; } .active-units { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: auto minmax(0, 1fr); align-items: center; gap: 4px 8px; padding: 9px 10px; background: repeating-linear-gradient(170deg, rgba(255, 255, 255, 0.04) 0 1px, transparent 1px 14px), var(--teal); } .active-units h2, .lookout-board h2, .statements-panel h2 { margin: 0; color: #ffd46f; font-size: 1.3rem; letter-spacing: 0.08em; text-transform: uppercase; text-shadow: 0 2px 0 #311a06; } .active-units h2 { grid-column: 1 / -1; font-size: 1.08rem; } .unit-row { min-width: 0; display: grid; grid-template-columns: repeat(6, 15px); gap: 4px; align-content: center; } .unit-dot { width: 15px; height: 19px; display: block; border-radius: 50% 50% 7px 7px; border: 1px solid rgba(255, 239, 185, 0.75); } .unit-dot.ready { background: radial-gradient(circle at 50% 24%, #a6e4ff 0 3px, transparent 4px), linear-gradient(135deg, #1784bd, #0b4265); } .unit-dot.used { background: radial-gradient(circle at 50% 24%, #c2c2b6 0 3px, transparent 4px), linear-gradient(135deg, #777d77, #3d413d); opacity: 0.72; } .active-units strong { justify-self: end; color: #ffdf86; font-size: 1.08rem; white-space: nowrap; } .advance-button, .new-case-button, .search-button { min-height: 50px; color: #fff4c2; font-size: 1.45rem; font-weight: 950; text-transform: uppercase; border: 3px solid #a97522; box-shadow: inset 0 0 0 2px rgba(255, 239, 185, 0.24), 0 5px 0 #2c1907; } .advance-button { background: linear-gradient(180deg, #1d6796, #0c436e); } .advance-button.processing, .new-case-button.processing { background: linear-gradient(180deg, #c8862c, #7a4e0d); color: #1a0e02; cursor: progress; animation: advance-pulse 1.1s ease-in-out infinite; } @keyframes advance-pulse { 0%, 100% { box-shadow: inset 0 0 0 2px rgba(255, 239, 185, 0.24), 0 5px 0 #2c1907, 0 0 0 0 rgba(255, 215, 100, 0.0); } 50% { box-shadow: inset 0 0 0 2px rgba(255, 239, 185, 0.6), 0 5px 0 #2c1907, 0 0 16px 4px rgba(255, 215, 100, 0.55); } } .new-case-button { background: linear-gradient(180deg, #25765f, #104d43); } .search-button { background: linear-gradient(180deg, #c33d32, #8b2119); } .center-stage { display: grid; grid-template-rows: 130px minmax(0, 1fr); gap: 8px; } .tactic-strip { padding: 8px 12px 10px; color: var(--ink); background: linear-gradient(180deg, rgba(255, 255, 255, 0.45), transparent 42%), var(--paper); border: 4px solid #b98127; box-shadow: inset 0 0 0 2px #56330c, var(--shadow); } .tactic-strip h2 { margin: 0 0 8px; color: #143d3d; font-size: 1.55rem; text-align: center; letter-spacing: 0.12em; text-transform: uppercase; } .tactic-tray { display: grid; grid-template-columns: repeat(5, minmax(132px, 1fr)); gap: 9px; } .tactic-card { position: relative; height: 78px; display: grid; grid-template-columns: 66px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) auto; align-items: center; gap: 0 8px; padding: 8px 10px; color: var(--ink); text-align: left; background: linear-gradient(180deg, rgba(255, 255, 255, 0.46), transparent 50%), #f2d99c; border: 3px solid #a97522; box-shadow: inset 0 0 0 2px rgba(80, 43, 8, 0.25), 0 4px 0 rgba(54, 30, 5, 0.55); } .tactic-card:disabled { filter: grayscale(0.65); opacity: 0.58; } .tactic-card img { grid-row: 1 / 3; width: 62px; height: 62px; object-fit: contain; } .tactic-card span { min-width: 0; color: #201005; font-size: 0.96rem; font-weight: 950; line-height: 1.02; text-transform: uppercase; } .tactic-card strong { color: #201005; font-size: 1.15rem; } .tactic-preview { position: absolute; left: 50%; bottom: calc(100% + 10px); z-index: 30; width: min(260px, 70vw); display: none; transform: translateX(-50%); padding: 10px 12px; color: #173a35; font-size: 0.92rem; font-style: normal; line-height: 1.25; background: #fff1bd; border: 3px solid #a97522; box-shadow: 0 14px 32px rgba(0, 0, 0, 0.38); } .tactic-preview:after { content: ""; position: absolute; left: 50%; bottom: -10px; width: 16px; height: 16px; transform: translateX(-50%) rotate(45deg); background: #fff1bd; border-right: 3px solid #a97522; border-bottom: 3px solid #a97522; } .tactic-card:hover .tactic-preview, .tactic-card:focus-visible .tactic-preview { display: block; } .map-shell { min-height: 0; display: grid; grid-template-rows: 38px minmax(0, 1fr) 62px; padding: 0; } .layer-tabs { display: flex; align-items: end; gap: 4px; padding-left: 14px; } .layer-tabs button { min-width: 112px; height: 40px; color: #ffdf86; font-size: 1.16rem; font-weight: 950; background: linear-gradient(180deg, #0c5d5d, #063738); border: 3px solid #a97522; border-bottom: 0; text-transform: capitalize; } .layer-tabs button.active { color: #251304; background: linear-gradient(180deg, #ffd461, #d4a231); } .map-wrap { position: relative; min-height: 0; overflow: hidden; background: #0a1414; border: 5px solid #b98127; border-radius: 16px 16px 0 0; box-shadow: inset 0 0 0 3px #4c2c08, var(--shadow); cursor: grab; touch-action: none; } .map-wrap:active { cursor: grabbing; } .map-canvas { position: absolute; inset: 0; transform-origin: 0 0; will-change: transform; } #mapImage { display: block; width: 100%; height: 100%; object-fit: contain; user-select: none; pointer-events: none; } .overlay-layer { position: absolute; inset: 0; pointer-events: none; } .map-controls { position: absolute; right: 12px; top: 12px; z-index: 18; display: flex; align-items: center; gap: 5px; max-width: calc(100% - 24px); padding: 5px; color: var(--ink); background: rgba(242, 217, 156, 0.94); border: 2px solid #a97522; box-shadow: 0 10px 24px rgba(0, 0, 0, 0.34); } .map-controls button, .map-controls output { min-width: 34px; height: 30px; display: grid; place-items: center; color: var(--ink); font-weight: 950; background: #ffd46f; border: 1px solid #8f5d18; } .map-controls output { min-width: 52px; background: #fff0bc; } .map-control-divider { width: 1px; height: 24px; background: #8f5d18; } .map-controls .map-visibility-toggle, .map-controls #witnessModeButton { min-width: auto; padding: 0 8px; font-size: 0.72rem; } .map-controls .map-visibility-toggle:not(.active) { color: #6c5c42; background: #c8b98f; text-decoration: line-through; } .map-controls #witnessModeButton.active { color: #fff4c2; background: #176e5e; } .focus-marker { position: absolute; width: 30px; height: 30px; transform: translate(-50%, -50%); border: 3px solid #ffdf86; border-radius: 50%; box-shadow: 0 0 0 4px rgba(25, 105, 100, 0.35), 0 0 14px rgba(255, 212, 111, 0.62); } .map-token, .witness-token { position: absolute; pointer-events: auto; border: 0; background: transparent; filter: drop-shadow(0 10px 8px rgba(0, 0, 0, 0.52)); } .map-token { width: 40px; height: 48px; transform: translate( calc(-50% + var(--token-offset-x, 0px)), calc(-82% + var(--token-offset-y, 0px)) ); } .map-token.junction_lockdown { width: 58px; height: 44px; } .map-token.roadblock { width: 32px; height: 26px; } .map-token.patrol_unit { width: 48px; height: 54px; } .map-token.search_team { width: 50px; height: 50px; } .map-token.lookout_board { width: 48px; height: 58px; } .witness-token { width: 38px; height: 52px; transform: translate( calc(-50% + var(--token-offset-x, 0px)), calc(-86% + var(--token-offset-y, 0px)) ); } #selectionLayer { z-index: 10; } #tacticLayer { z-index: 11; } #witnessLayer { z-index: 12; } .map-token.co-located, .witness-token.co-located { filter: drop-shadow(0 10px 8px rgba(0, 0, 0, 0.62)); } .map-token img, .witness-token img { width: 100%; height: 100%; object-fit: contain; } .witness-token strong { position: absolute; right: -1px; top: 4px; min-width: 16px; min-height: 16px; display: grid; place-items: center; color: #fff4c2; font-size: 0.62rem; border-radius: 50%; background: #8e2118; border: 1px solid #ffdf86; } .witness-token.viewed strong { background: #176e5e; } .witness-cluster-token { z-index: 4; width: 42px; height: 56px; transform: translate(-50%, -86%); } .witness-cluster-token strong { right: -3px; top: 1px; min-width: 19px; min-height: 19px; font-size: 0.68rem; } .witness-cluster-member { opacity: 0; pointer-events: none; } .cluster-report-list { display: grid; gap: 7px; max-height: 230px; overflow: auto; } .cluster-report-button { display: grid; gap: 3px; padding: 8px; color: #251304; text-align: left; background: #fff0bc; border: 2px solid #a97522; } .cluster-report-button.viewed { border-color: #176e5e; background: #d7eee0; } .cluster-report-button span { font-size: 0.76rem; line-height: 1.25; } .cluster-report-button em { font-style: normal; font-size: 0.7rem; font-weight: 700; color: #6b3812; letter-spacing: 0.04em; text-transform: uppercase; } .map-message { position: absolute; left: 14px; right: 14px; bottom: 12px; min-height: 34px; display: flex; align-items: center; padding: 0 12px; color: #fff4c2; font-weight: 800; background: rgba(7, 63, 66, 0.88); border: 2px solid rgba(255, 212, 111, 0.7); pointer-events: none; } .legend-strip { min-height: 62px; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; padding: 7px 9px; color: var(--ink); background: linear-gradient(180deg, rgba(255, 255, 255, 0.45), transparent), var(--paper); border: 5px solid #b98127; border-top: 0; box-shadow: inset 0 0 0 2px #55320b; } .legend-item { min-width: 0; display: grid; grid-template-columns: 42px minmax(0, 1fr); grid-template-rows: 1fr 1fr; align-items: center; column-gap: 6px; } .legend-item img { grid-row: 1 / 3; width: 42px; height: 52px; object-fit: contain; } .legend-item strong { overflow: hidden; font-size: 0.76rem; font-weight: 950; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; } .legend-item span { overflow: hidden; font-family: "Segoe Print", "Bradley Hand ITC", cursive; font-size: 0.72rem; text-overflow: ellipsis; white-space: nowrap; } .lookout-board, .statements-panel { min-height: 0; display: grid; gap: 8px; padding: 12px; background: repeating-linear-gradient(172deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 16px), var(--teal); } .lookout-board { grid-template-rows: auto minmax(0, 1fr); } .statements-panel { grid-template-rows: auto minmax(0, 1fr); } .paper-note { min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto; gap: 8px; padding: 14px; color: var(--ink); background: linear-gradient(180deg, rgba(255, 255, 255, 0.52), transparent 34%), var(--paper); border: 3px solid #a97522; box-shadow: inset 0 0 0 2px rgba(86, 51, 12, 0.28); } .paper-note h3 { margin: 0; color: #8b2217; text-align: center; text-transform: uppercase; } .paper-note textarea { width: 100%; min-height: 126px; resize: none; color: #193b34; font-family: "Segoe Print", "Bradley Hand ITC", cursive; font-size: 1.05rem; line-height: 1.42; background: repeating-linear-gradient(180deg, transparent 0 30px, rgba(35, 87, 72, 0.12) 31px), rgba(255, 249, 218, 0.18); border: 1px dashed rgba(80, 43, 8, 0.35); outline: none; } .paper-note button, .ask-button, .remove-button { min-height: 36px; color: #fff4c2; font-weight: 950; background: linear-gradient(180deg, #25765f, #104d43); border: 2px solid #a97522; } .paper-note p { margin: 0; color: #5b3110; font-weight: 800; } .statement-list { min-height: 0; display: grid; align-content: start; gap: 8px; overflow: auto; } .statement-card { position: relative; min-height: 78px; padding: 9px 44px 9px 10px; color: var(--ink); background: linear-gradient(180deg, rgba(255, 255, 255, 0.45), transparent 50%), #f0d69a; border: 2px solid #a97522; } .statement-card div { display: flex; justify-content: space-between; gap: 8px; } .statement-card strong { font-size: 0.92rem; text-transform: uppercase; } .statement-card span { color: #176e5e; font-size: 0.72rem; font-weight: 950; text-transform: uppercase; } .statement-card p { margin: 5px 0 0; font-family: "Segoe Print", "Bradley Hand ITC", cursive; font-size: 0.84rem; line-height: 1.22; } .statement-card mark { position: absolute; right: 9px; top: 50%; width: 30px; height: 30px; display: grid; place-items: center; transform: translateY(-50%); color: #176e5e; font-size: 1.35rem; font-weight: 950; background: transparent; border: 3px solid #176e5e; border-radius: 50%; } .statement-card.empty mark { display: none; } .event-ticker { margin: 0 8px; min-height: 28px; display: flex; align-items: center; padding: 0 12px; color: #ffdf86; background: rgba(0, 0, 0, 0.34); border: 2px solid rgba(255, 212, 111, 0.45); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .detail-popup { position: fixed; z-index: 80; width: 280px; display: grid; gap: 8px; padding: 12px; color: var(--ink); background: linear-gradient(180deg, rgba(255, 255, 255, 0.48), transparent 46%), var(--paper); border: 4px solid #a97522; box-shadow: var(--shadow); } .drag-ghost { position: fixed; z-index: 120; width: 136px; min-height: 54px; display: grid; grid-template-columns: 46px minmax(0, 1fr); align-items: center; gap: 7px; padding: 6px 9px; color: var(--ink); font-weight: 950; text-transform: uppercase; background: linear-gradient(180deg, rgba(255, 255, 255, 0.48), transparent), var(--paper); border: 3px solid #a97522; box-shadow: 0 16px 34px rgba(0, 0, 0, 0.45); pointer-events: none; } .drag-ghost img { width: 44px; height: 44px; object-fit: contain; } .drag-ghost span { min-width: 0; font-size: 0.78rem; line-height: 1.05; } .detail-popup[hidden] { display: none; } .detail-popup > img { width: 58px; height: 68px; object-fit: contain; } .detail-popup h3 { margin: 0; color: #8b2217; font-size: 1.1rem; text-transform: uppercase; } .detail-popup p { margin: 0; line-height: 1.32; } .detail-popup dl { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 8px; margin: 0; } .detail-popup dt { font-weight: 950; text-transform: uppercase; } .detail-popup dd { margin: 0; } .popup-close { position: absolute; right: 6px; top: 5px; width: 28px; height: 28px; color: #fff4c2; background: #8b2217; border: 2px solid #a97522; } .remove-button { background: linear-gradient(180deg, #c33d32, #8b2119); } .settings-dialog { width: min(760px, calc(100vw - 28px)); max-height: calc(100dvh - 28px); color: var(--ink); background: transparent; border: 0; padding: 0; } .settings-dialog::backdrop { background: rgba(0, 0, 0, 0.58); } .settings-panel { display: grid; width: 100%; box-sizing: border-box; gap: 14px; padding: 16px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.42), transparent 42%), var(--paper); border: 5px solid #a97522; box-shadow: var(--shadow); max-height: calc(100dvh - 28px); overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; } .settings-panel > * { min-width: 0; } .settings-panel header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .settings-panel h2 { margin: 0; color: #8b2217; font-size: 2rem; text-transform: uppercase; } .settings-panel header button { width: 34px; height: 34px; color: #fff4c2; background: #8b2217; border: 2px solid #a97522; } .settings-grid { display: grid; min-width: 0; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .settings-grid label { min-width: 0; display: grid; gap: 4px; color: #482309; font-weight: 950; text-transform: uppercase; } .settings-wide { grid-column: 1 / -1; } .settings-subgrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 12px; background: rgba(139, 34, 23, 0.07); border: 2px dashed rgba(139, 34, 23, 0.45); } .settings-subgrid[hidden] { display: none; } .settings-hint { margin: 0; color: #5f3215; font-size: 0.82rem; font-weight: 750; line-height: 1.35; text-transform: none; } .settings-grid input, .settings-grid select { width: 100%; min-width: 0; box-sizing: border-box; min-height: 36px; color: var(--ink); background: #fff0bc; border: 2px solid #a97522; padding: 6px 8px; } .llama-status { margin: 0; padding: 10px; color: #173a35; font-weight: 850; background: rgba(23, 110, 94, 0.12); border-left: 5px solid #176e5e; overflow-wrap: anywhere; } .settings-actions { display: flex; flex-wrap: wrap; gap: 8px; } .settings-actions button { min-height: 38px; padding: 0 12px; color: #fff4c2; font-weight: 950; background: linear-gradient(180deg, #25765f, #104d43); border: 2px solid #a97522; } @media (max-width: 700px) { .settings-grid, .settings-subgrid { grid-template-columns: 1fr; } } .setup-overlay { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: 24px; background: rgba(7, 17, 19, 0.82); backdrop-filter: blur(6px); } .setup-overlay[hidden] { display: none; } .setup-card { width: min(620px, 92vw); display: grid; gap: 16px; padding: 34px; color: #3e210d; text-align: center; background: linear-gradient(145deg, #f8e7ad, #d7b86b); border: 5px solid #6d3c12; box-shadow: inset 0 0 0 3px #f8da82, 0 24px 70px #000; } .setup-card small { font-weight: 950; letter-spacing: 0.16em; text-transform: uppercase; } .setup-card h2 { margin: 0; font-size: clamp(2rem, 5vw, 3.4rem); line-height: 0.95; text-transform: uppercase; } .setup-card p { margin: 0; font-size: 1.08rem; font-weight: 750; } .setup-card progress { width: 100%; height: 24px; accent-color: #176e5e; } .setup-start-button { min-height: 72px; color: #fff4c2; font-size: 1.8rem; font-weight: 1000; text-transform: uppercase; background: linear-gradient(180deg, #2b8b69, #104d43); border: 4px solid #a97522; box-shadow: inset 0 0 0 2px rgba(255, 239, 185, 0.3), 0 7px 0 #2c1907; } .setup-start-button:disabled { cursor: wait; filter: grayscale(0.7); opacity: 0.72; } .setup-overlay.ready .setup-start-button { animation: setup-ready-pulse 1.8s ease-in-out infinite; } .setup-settings-button { justify-self: center; color: #4c2b12; font-weight: 900; background: transparent; border: 0; text-decoration: underline; } .setup-picker { display: grid; gap: 12px; padding: 18px; text-align: left; background: rgba(255, 248, 222, 0.72); border: 2px solid #a97522; border-radius: 6px; } .setup-picker[hidden] { display: none; } .setup-picker-intro { margin: 0; font-size: 0.98rem; font-weight: 750; color: #4c2b12; } .setup-storage-hint { padding: 8px 10px; overflow-wrap: anywhere; font-size: 0.82rem !important; color: #4c2b12; background: rgba(255, 255, 255, 0.42); border-left: 4px solid #176e5e; } .setup-picker-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 16px; } .setup-picker-grid label { display: grid; gap: 4px; font-weight: 850; font-size: 0.86rem; text-transform: uppercase; letter-spacing: 0.04em; color: #4c2b12; } .setup-picker-grid select { padding: 8px 10px; font-size: 0.95rem; font-weight: 600; color: #2c1907; background: #fff8d8; border: 2px solid #6d3c12; border-radius: 4px; text-transform: none; letter-spacing: 0; } .setup-picker-grid small { font-weight: 500; font-size: 0.78rem; text-transform: none; letter-spacing: 0; color: #5a3e1f; } @media (max-width: 700px) { .setup-picker-grid { grid-template-columns: minmax(0, 1fr); } } @keyframes setup-ready-pulse { 50% { transform: scale(1.025); box-shadow: inset 0 0 0 2px rgba(255, 239, 185, 0.4), 0 10px 0 #2c1907, 0 0 30px rgba(255, 214, 101, 0.65); } } @media (max-width: 1200px) { .top-banner { height: auto; grid-template-columns: 190px minmax(0, 1fr) 132px 72px; } .table-grid { height: auto; grid-template-columns: 220px minmax(0, 1fr); } .right-rail { grid-column: 1 / -1; grid-template-columns: 1fr 1fr; grid-template-rows: minmax(260px, 1fr); } .tactic-tray { grid-template-columns: repeat(3, minmax(132px, 1fr)); } .center-stage { grid-template-rows: auto minmax(620px, 68vh); } } @media (max-width: 1400px) { .top-banner { grid-template-columns: 250px minmax(0, 1fr) 150px 78px; } .title-panel:before, .title-panel:after { display: none; } .title-panel h1 { font-size: clamp(3rem, 5.4vw, 4.35rem); } .title-panel p { font-size: 0.94rem; } .turn-panel strong { font-size: 1.72rem; } .gear-button { font-size: 2.5rem; } .table-grid { grid-template-columns: 250px minmax(0, 1fr) 300px; } .wanted-card h2 { font-size: 2.35rem; } .suspect-image { width: 172px; height: 206px; } .wanted-card { gap: 5px; padding: 10px; } .wanted-card dl { font-size: 0.94rem; gap: 3px 7px; } .wanted-card strong { font-size: 1.25rem; } .tactic-tray { grid-template-columns: repeat(5, minmax(0, 1fr)); } .tactic-card { grid-template-columns: 48px minmax(0, 1fr); gap: 0 5px; padding: 7px; } .tactic-card img { width: 48px; height: 48px; } .tactic-card span { font-size: 0.78rem; } .tactic-card strong { font-size: 0.95rem; } .right-rail { min-width: 0; } } @media (max-width: 760px) { .top-banner, .table-grid, .right-rail { grid-template-columns: 1fr; } .bureau-crest { min-height: 126px; } .title-panel h1 { font-size: 3rem; white-space: normal; text-align: center; } .table-grid { min-height: 0; } .tactic-tray, .legend-strip { grid-template-columns: 1fr; } .map-shell { grid-template-rows: auto minmax(520px, 65vh) auto; } } body { position: relative; } .game-board { position: fixed; left: 50%; top: 50%; width: 1672px; height: 940px; min-height: 0; transform: translate(-50%, -50%) scale(var(--app-scale, 1)); transform-origin: center center; } .top-banner { height: 142px; grid-template-columns: 286px minmax(0, 1fr) 172px 94px; } .table-grid { height: auto; min-height: 0; grid-template-columns: 286px minmax(0, 1fr) 334px; } .left-rail { grid-template-rows: minmax(0, 1fr) 92px 62px 46px 42px; } .right-rail { grid-column: auto; min-width: 0; grid-template-columns: 1fr; grid-template-rows: minmax(0, 0.92fr) minmax(0, 1fr); } .center-stage { grid-template-rows: 130px minmax(0, 1fr); } .tactic-tray { grid-template-columns: repeat(5, minmax(0, 1fr)); } .map-shell { grid-template-rows: 38px minmax(0, 1fr) 62px; } .legend-strip { grid-template-columns: repeat(7, minmax(0, 1fr)); } .case-control-row { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; } .case-control-row button { color: #ffe8a7; font-weight: 900; background: #63251c; border: 2px solid #c28a35; } #notesText { min-height: 210px; resize: none; } #notesStatus { margin: 6px 0 0; opacity: 0.76; } .notice-dialog, .witness-dialog, .story-dialog { padding: 0; color: var(--ink); background: transparent; border: 0; } .notice-dialog::backdrop, .witness-dialog::backdrop, .story-dialog::backdrop { background: rgba(3, 14, 15, 0.9); backdrop-filter: blur(5px); } .notice-panel { width: min(720px, 92vw); display: grid; gap: 16px; padding: 22px; background: #f3dda6; border: 5px solid #b47b25; box-shadow: 0 24px 80px #000; } .notice-panel header, .witness-interview-shell > header, .story-reveal-shell > header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .notice-panel h2, .witness-interview-shell h2, .story-reveal-shell h2 { margin: 0; color: #8b2217; text-transform: uppercase; } .notice-panel textarea { min-height: 220px; padding: 16px; color: #251304; background: #fff0bc; border: 2px solid #9a6825; resize: vertical; } .dialog-actions, .speech-controls, .text-chat-row { display: flex; gap: 10px; } .dialog-actions button, .witness-interview-shell button, .story-reveal-shell button { min-height: 40px; padding: 8px 14px; color: #fff0bc; font-weight: 900; background: #0c5552; border: 2px solid #c18a34; } .witness-dialog, .story-dialog { width: 100vw; max-width: none; height: 100vh; max-height: none; } .witness-interview-shell, .story-reveal-shell { width: 100%; height: 100%; display: grid; grid-template-rows: auto auto minmax(0, 1fr) auto; gap: 14px; padding: clamp(18px, 3vw, 48px); color: #f8e7b3; background: radial-gradient(circle at 20% 10%, rgba(211, 159, 55, 0.16), transparent 34%), linear-gradient(145deg, #052d30, #171006 70%); border: 8px solid #9f6d22; } .witness-interview-shell h2, .story-reveal-shell h2 { color: #ffd46f; font-size: clamp(2rem, 4vw, 4rem); } .witness-interview-shell header p, .witness-interview-shell header small, .story-reveal-shell header small { margin: 4px 0; color: #e8c978; } .witness-summary { padding: 14px 18px; color: #2a160b; background: #eed69b; border-left: 6px solid #9e2c20; } .witness-transcript, .story-timeline { min-height: 0; overflow: auto; padding: 18px; background: rgba(0, 0, 0, 0.27); border: 2px solid #8c672d; } .chat-message { width: min(76%, 820px); margin: 10px 0; padding: 12px 14px; border-radius: 8px; line-height: 1.45; } .chat-message.user { margin-left: auto; color: #f9ebbd; background: #175e65; } .chat-message.witness { color: #2b1709; background: #eed69b; } .witness-interview-shell footer { display: grid; gap: 10px; } .speech-controls { align-items: center; flex-wrap: wrap; } #pushToTalkButton.recording, #autoSpeechButton.active { background: #9b2a20; box-shadow: 0 0 20px rgba(255, 85, 62, 0.6); } #micLevel { width: 180px; } .text-chat-row textarea { min-height: 58px; flex: 1; padding: 10px; color: #241307; background: #fff0bc; resize: none; } .story-reveal-shell { grid-template-rows: auto minmax(0, 1fr) auto; } .story-card { margin: 0 0 16px; padding: 18px; color: #28170a; background: #efd99f; border-left: 7px solid #9b2a20; } .story-card h3 { margin: 0 0 8px; color: #7f2219; } .story-facts { margin: 10px 0 0; color: #4c3318; } .case-intro-dialog { width: 100vw; max-width: none; height: 100vh; max-height: none; padding: 0; color: #f7e7b5; background: transparent; border: 0; } .case-intro-dialog::backdrop { background: rgba(1, 8, 10, 0.94); backdrop-filter: blur(7px); } .case-intro-shell { box-sizing: border-box; width: 100%; height: 100%; display: grid; grid-template-rows: auto 1fr auto; gap: clamp(18px, 3vh, 34px); padding: clamp(24px, 4vw, 64px); overflow: auto; background: radial-gradient(circle at 82% 12%, rgba(183, 44, 29, 0.2), transparent 30%), radial-gradient(circle at 12% 80%, rgba(199, 151, 51, 0.15), transparent 34%), #071f21; border: 10px solid #9a6926; box-shadow: inset 0 0 90px #000; } .case-intro-heading { display: flex; align-items: center; justify-content: space-between; gap: 24px; border-bottom: 1px solid rgba(232, 195, 104, 0.4); padding-bottom: 18px; } .case-intro-heading small, .intro-card > small { color: #d9ae50; font-weight: 900; letter-spacing: 0.18em; text-transform: uppercase; } .case-intro-heading h2 { margin: 5px 0 0; color: #ffe39a; font-size: clamp(2.4rem, 5vw, 5.2rem); line-height: 0.92; text-transform: uppercase; text-shadow: 4px 5px 0 #3f1710; } .case-intro-heading p { max-width: 760px; margin: 12px 0 0; color: #d8c38f; font-size: 1.08rem; } .case-stamp { padding: 12px 18px; color: #d4513e; font: 900 1.15rem Georgia, serif; letter-spacing: 0.14em; text-transform: uppercase; border: 4px double #b43a2b; transform: rotate(5deg); } .case-intro-cards { display: grid; grid-template-columns: 1.25fr 0.8fr 1.15fr; gap: clamp(14px, 2vw, 28px); align-items: stretch; } .intro-card { position: relative; min-height: 430px; padding: clamp(22px, 2.5vw, 38px); color: #281707; overflow: hidden; background: linear-gradient(145deg, #f5e3ac, #d8b96f); border: 1px solid #fff0be; box-shadow: 0 22px 50px rgba(0,0,0,0.5), inset 0 0 35px rgba(91,45,12,0.18); transform: rotate(-0.7deg); } .intro-card:nth-child(2) { transform: translateY(10px) rotate(0.8deg); } .intro-card:nth-child(3) { transform: rotate(-0.3deg); } .intro-card:after { content: ""; position: absolute; inset: 10px; pointer-events: none; border: 1px solid rgba(107, 58, 17, 0.35); } .intro-card-number { position: absolute; top: 10px; right: 20px; color: rgba(116, 57, 16, 0.16); font: 900 5rem Georgia, serif; } .intro-card h3 { position: relative; margin: 14px 0; color: #7f2118; font: 900 clamp(1.55rem, 2.4vw, 2.7rem) Georgia, serif; line-height: 1; text-transform: uppercase; } .intro-card p { position: relative; line-height: 1.55; } .crime-card dl { position: relative; display: grid; grid-template-columns: 72px 1fr; gap: 8px 12px; margin-top: 24px; padding-top: 18px; border-top: 2px solid rgba(112, 62, 19, 0.35); } .crime-card dt { color: #8d271b; font-weight: 900; text-transform: uppercase; } .crime-card dd { margin: 0; font-weight: 700; } .suspect-card { text-align: center; background: linear-gradient(160deg, #d9c17b, #ae8946); } .suspect-card img { position: relative; width: min(90%, 230px); height: 245px; margin: 14px auto 4px; object-fit: cover; filter: sepia(0.8) contrast(1.2); border: 7px solid #f2dda0; box-shadow: 0 5px 15px rgba(48, 25, 5, 0.45); } .suspect-card p { padding: 12px; color: #f8e8b7; background: #4e2615; } .sightings-card ol { position: relative; display: grid; gap: 10px; margin: 18px 0 0; padding: 0; list-style: none; } .sightings-card li { display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 12px; background: rgba(255,247,211,0.45); border-left: 5px solid #856632; } .sightings-card li.sighting-confirmed { background: rgba(153, 39, 26, 0.12); border-color: #9a2a1d; } .sightings-card li > span { color: #9a2a1d; font: 900 1.35rem Georgia, serif; } .sightings-card li small, .sightings-card li strong { display: block; } .sightings-card li small { color: #75521e; font-weight: 900; text-transform: uppercase; } .sightings-card li strong { margin: 2px 0 4px; font-size: 1.08rem; } .sightings-card li p { margin: 0; font-size: 0.9rem; line-height: 1.35; } .case-intro-shell footer { display: flex; align-items: center; justify-content: space-between; gap: 20px; color: #d7bd79; } .case-intro-shell footer button { min-width: 240px; padding: 15px 24px; color: #fff1bd; font-weight: 900; letter-spacing: 0.08em; text-transform: uppercase; background: linear-gradient(#a73a29, #702116); border: 3px solid #d7a64d; box-shadow: 0 8px 0 #32100c; } .case-intro-shell footer button:hover { transform: translateY(-2px); box-shadow: 0 10px 0 #32100c; } @media (max-width: 1000px) { .case-intro-cards { grid-template-columns: 1fr; } .intro-card { min-height: 0; transform: none !important; } .case-intro-heading { align-items: flex-start; } } /* How-to-play tutorial -------------------------------------------------- */ .help-button { font: 900 1.5rem Georgia, serif; } .tutorial-dialog { width: 100vw; max-width: none; height: 100vh; max-height: none; padding: 0; color: #f7e7b5; background: transparent; border: 0; } .tutorial-dialog::backdrop { background: rgba(1, 8, 10, 0.95); backdrop-filter: blur(7px); } .tutorial-shell { box-sizing: border-box; width: 100%; height: 100%; display: grid; grid-template-rows: auto 1fr auto; gap: clamp(16px, 2.6vh, 30px); padding: clamp(22px, 3.4vw, 56px); overflow: auto; background: radial-gradient(circle at 82% 12%, rgba(183, 44, 29, 0.18), transparent 30%), radial-gradient(circle at 12% 80%, rgba(199, 151, 51, 0.14), transparent 34%), #071f21; border: 10px solid #9a6926; box-shadow: inset 0 0 90px #000; } .tutorial-head { display: flex; align-items: center; justify-content: space-between; gap: 24px; border-bottom: 1px solid rgba(232, 195, 104, 0.4); padding-bottom: 14px; } .tutorial-head small { color: #d9ae50; font-weight: 900; letter-spacing: 0.18em; text-transform: uppercase; } .tutorial-head h2 { margin: 5px 0 0; color: #ffe39a; font-size: clamp(1.9rem, 3.6vw, 3.4rem); line-height: 0.95; text-transform: uppercase; text-shadow: 3px 4px 0 #3f1710; } .tutorial-skip { padding: 10px 18px; color: #e7cd8a; font-weight: 900; letter-spacing: 0.06em; text-transform: uppercase; background: transparent; border: 2px solid rgba(215, 166, 77, 0.6); border-radius: 4px; cursor: pointer; } .tutorial-skip:hover { color: #fff1bd; border-color: #d7a64d; } .tutorial-body { display: grid; grid-template-columns: 1.55fr 1fr; gap: clamp(18px, 2.5vw, 40px); align-items: center; min-height: 0; } .tutorial-figure { margin: 0; padding: 12px; background: linear-gradient(145deg, #16322f, #0a2422); border: 4px solid #9a6926; box-shadow: 0 22px 50px rgba(0,0,0,0.55); } .tutorial-figure img { display: block; width: 100%; height: auto; max-height: 64vh; object-fit: contain; border: 1px solid rgba(0,0,0,0.5); } .tutorial-copy { display: grid; gap: 14px; align-content: center; } .tutorial-tag { justify-self: start; padding: 6px 14px; color: #1c1305; font: 900 0.82rem Georgia, serif; letter-spacing: 0.14em; text-transform: uppercase; background: linear-gradient(#f5e3ac, #d8b96f); border: 2px solid #fff0be; } .tutorial-copy h3 { margin: 0; color: #ffe39a; font: 900 clamp(1.6rem, 2.6vw, 2.8rem) Georgia, serif; line-height: 1.02; text-transform: uppercase; } .tutorial-text { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; } .tutorial-text li { position: relative; padding-left: 26px; color: #e8d5a0; font-size: clamp(0.98rem, 1.2vw, 1.18rem); line-height: 1.45; } .tutorial-text li::before { content: ""; position: absolute; left: 4px; top: 0.55em; width: 9px; height: 9px; background: #d4513e; transform: rotate(45deg); box-shadow: 0 0 0 2px rgba(215, 166, 77, 0.5); } .tutorial-text li strong { color: #ffe39a; } .tutorial-foot { display: flex; align-items: center; justify-content: space-between; gap: 20px; border-top: 1px solid rgba(232, 195, 104, 0.4); padding-top: 14px; } .tutorial-dots { display: flex; gap: 10px; } .tutorial-dots button { width: 13px; height: 13px; padding: 0; background: rgba(215, 166, 77, 0.3); border: 2px solid #8a6427; border-radius: 50%; cursor: pointer; } .tutorial-dots button.active { background: #d4513e; border-color: #f0c267; } .tutorial-nav { display: flex; align-items: center; gap: 14px; } .tutorial-counter { color: #c9ad6c; font-weight: 800; letter-spacing: 0.08em; } .tutorial-nav button { min-width: 130px; padding: 13px 22px; color: #fff1bd; font-weight: 900; letter-spacing: 0.08em; text-transform: uppercase; background: linear-gradient(#23423d, #15302d); border: 3px solid #d7a64d; box-shadow: 0 6px 0 #0a1c1a; cursor: pointer; } .tutorial-nav button.tutorial-primary { background: linear-gradient(#a73a29, #702116); box-shadow: 0 6px 0 #32100c; } .tutorial-nav button:hover { transform: translateY(-2px); } .tutorial-nav button:disabled { opacity: 0.4; cursor: default; transform: none; } @media (max-width: 1000px) { .tutorial-body { grid-template-columns: 1fr; } .tutorial-figure img { max-height: 40vh; } } @media (max-height: 800px) and (min-width: 1001px) { .case-intro-shell { gap: 14px; padding: 22px 42px; } .case-intro-heading { padding-bottom: 10px; } .case-intro-heading h2 { font-size: 3rem; } .case-intro-heading p { margin-top: 7px; } .intro-card { min-height: 360px; padding: 20px 25px; } .intro-card h3 { font-size: 1.7rem; } .suspect-card img { width: 180px; height: 195px; margin-top: 8px; } .sightings-card ol { gap: 7px; margin-top: 10px; } .sightings-card li { padding: 8px 10px; } .sightings-card li p { font-size: 0.8rem; } .case-intro-shell footer button { padding: 11px 20px; } }