@font-face{font-family:'Lucky Jua';src:url('fonts/Jua-Regular.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}
:root{--ink:#082d4a;--ocean:#0b99c3;--gold:#ffcd21;--cream:#fffced}*{box-sizing:border-box}html{min-height:100%;background:#056b99}body{margin:0;color:var(--ink);font:16px Arial,'Noto Sans KR',sans-serif;background:linear-gradient(#12b9df,#006e9f);min-height:100vh}button,input,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;filter:saturate(.65);opacity:.65}button:active:not(:disabled){transform:translateY(2px)}button:focus-visible,input:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid #ffb71d;outline-offset:4px}[hidden]{display:none!important}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}h1,h2,h3,p{margin:0}.arcade{max-width:1660px;margin:0 auto;padding:12px 20px 0}.arcade-shell{position:relative;border:4px solid #062d4a;border-radius:25px;background:#089ac8;box-shadow:0 6px 0 #044866,0 0 0 3px #31d3f0;overflow:visible}.utility-bar{position:absolute;z-index:12;top:13px;right:17px;display:flex;gap:9px;align-items:center}.audio-controls{display:flex;align-items:center;gap:9px;border:3px solid var(--ink);border-radius:24px;background:#f5ffffee;padding:5px 10px;box-shadow:0 3px 0 #073953}.audio-controls button{font-family:'Lucky Jua',sans-serif;font-size:15px;border:0;background:none;color:var(--ink);min-height:29px;padding:2px 3px}.audio-controls button[aria-pressed=false]{color:#7d8a91}.audio-controls input{width:67px;accent-color:#0398db}.quiet{font-family:'Lucky Jua',sans-serif;font-size:15px;background:#073c64e8;color:#fff;border:3px solid #fff;border-radius:25px;padding:10px 14px;box-shadow:0 3px 0 #073953}.game-area{position:relative}.game-top{position:absolute;z-index:7;top:16px;left:21px;right:325px;display:none;align-items:center;justify-content:space-between;gap:20px}.brand{font-family:'Lucky Jua',sans-serif;font-size:27px;text-decoration:none;color:#ffdb50;text-shadow:2px 3px 0 #052f4c;-webkit-text-stroke:1px #052f4c;white-space:nowrap}.brand em{font-style:normal;color:white}.live-counters{display:flex;gap:12px}.live-counters>div{display:flex;align-items:center;gap:12px;background:#073554e8;border:2px solid #caefff;border-radius:25px;padding:8px 16px;color:#fff}.live-counters span{font-size:13px;font-weight:700}.live-counters strong{font:26px 'Lucky Jua',sans-serif;color:#ffdf57}.ocean{height:clamp(350px,calc(100svh - 280px),740px);position:relative;overflow:hidden;border-radius:20px 20px 8px 8px;background:#19bce0;isolation:isolate}canvas{position:absolute;width:100%;height:100%;inset:0}.sea-top{position:absolute;top:71px;left:20px;right:20px;display:none;align-items:center;justify-content:space-between;pointer-events:none}.status-pill,.sea-button{font:14px 'Lucky Jua',sans-serif;border-radius:20px;background:#073955e8;color:white;border:2px solid #b7ecf2;padding:8px 13px;box-shadow:0 2px 0 #06405a}.sea-button{pointer-events:auto}.sea-bottom{display:none;position:absolute;left:23px;right:23px;bottom:16px;font-size:12px;font-weight:700;color:#155c6d}.pause-overlay{position:absolute;inset:0;background:#06344dd4;backdrop-filter:blur(5px);color:white;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:19px}.pause-overlay strong{font:34px 'Lucky Jua',sans-serif}.primary{border:4px solid var(--ink);border-radius:16px;background:linear-gradient(#fff26b 0%,#ffcf17 45%,#ffad12 100%);color:white;font-family:'Lucky Jua',sans-serif;font-size:24px;padding:13px 25px;box-shadow:inset 0 4px 0 #fff7b1,inset 0 -7px 0 #ee8910,0 4px 0 #074065;text-shadow:2px 3px 0 var(--ink);-webkit-text-stroke:1.4px var(--ink)}.primary:hover:not(:disabled){filter:brightness(1.05)}.console{position:relative;z-index:8;margin:-35px 28px 17px;border:5px solid var(--ink);border-radius:28px;background:linear-gradient(110deg,#fffef7,#f3edd5);box-shadow:inset 0 4px 0 #fff,inset 0 -4px 0 #dcc797,0 0 0 5px #ffb331,0 -8px 0 5px #158dcd,0 8px 0 #06466c;padding:18px 23px;display:grid;grid-template-columns:minmax(0,1.4fr) minmax(170px,.66fr) minmax(260px,1fr);gap:23px;min-height:230px}.console-names{min-width:0}.console-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.console-heading label{font:23px 'Lucky Jua',sans-serif;color:#fff;background:#073961;padding:7px 20px;border-radius:17px 17px 4px 4px;box-shadow:inset 0 2px 0 #1777aa}.console-heading>span{font-size:12px;font-weight:700;color:#537183}textarea{width:100%;height:105px;min-height:85px;resize:vertical;border:3px solid #369bd7;border-radius:12px;background:#fff;color:#123954;padding:11px 14px;font-size:16px;line-height:1.5;box-shadow:inset 0 2px 4px #173c5510}textarea::placeholder{color:#668093}.input-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:7px;font-size:12px;color:#657f8b}.text-button{border:0;background:none;color:#087da0;font-weight:800;padding:0;white-space:nowrap;font-size:12px}.validation{color:#bc461b;font-size:12px;line-height:1.4;margin-top:5px}.validation:empty{display:none}.duplicate{display:block;padding:7px;border-radius:7px;background:#fff0b9;font-size:12px;line-height:1.6;margin-top:7px}.duplicate input{accent-color:#148ea4}.console-numbers{border-left:2px solid #d8d4bf;border-right:2px solid #d8d4bf;padding:0 18px;display:flex;flex-direction:column;align-items:stretch;gap:8px}.participant-count{text-align:center;background:#eee9d8;border-radius:15px;padding:8px 7px 5px;box-shadow:inset 0 0 0 1px #ddd6c4}.participant-count>span,.winner-control>label{font:18px 'Lucky Jua',sans-serif}.participant-count>div{display:flex;align-items:baseline;justify-content:center;gap:5px;margin-top:1px}.participant-count strong{font:43px 'Lucky Jua',sans-serif;color:#0583b8;line-height:1.1}.participant-count b{font:20px 'Lucky Jua',sans-serif}.winner-control{text-align:center}.winner-control>label{display:block;margin-bottom:5px}.stepper{display:flex;align-items:center;justify-content:center;border:3px solid #d0d9df;box-shadow:0 0 0 2px white;border-radius:19px;background:#fff;min-height:46px;overflow:hidden}.stepper button{border:0;border-radius:11px;background:#e0e8f0;color:#153c5b;font:28px 'Lucky Jua',sans-serif;width:35px;height:36px;flex-shrink:0;margin:2px}.stepper input{appearance:textfield;-moz-appearance:textfield;width:45px;min-width:0;border:0;background:transparent;text-align:center;color:#102e50;font:29px 'Lucky Jua',sans-serif;padding:0}.stepper input::-webkit-inner-spin-button{display:none}.stepper b{font:17px 'Lucky Jua',sans-serif;margin-right:5px}.probability{display:flex;align-items:center;justify-content:center;gap:8px;font-size:12px;color:#5b7a85}.probability strong{color:#0083a0}.console-play{display:flex;flex-direction:column;justify-content:center;min-width:0}.speed-heading{font:21px 'Lucky Jua',sans-serif;margin-bottom:8px}.speed{display:flex;gap:3px;border:3px solid #d5e1e8;background:white;border-radius:28px;padding:3px;box-shadow:0 2px 0 #e0e6e8}.speed button{flex:1;min-width:0;border:0;border-radius:22px;background:none;padding:8px 6px;color:#4d6882;font:18px 'Lucky Jua',sans-serif;line-height:1.1}.speed button small{font-family:Arial,sans-serif;font-size:11px;display:block;line-height:1.3;margin-top:3px;opacity:.75}.speed .selected{background:linear-gradient(#1dc3ff,#007ff0);color:white;box-shadow:inset 0 2px 0 #8ce8ff}.start{width:100%;margin-top:13px;min-height:83px;font-size:clamp(24px,2.9vw,44px);line-height:1.12;border-radius:40px;letter-spacing:-.5px;padding:11px 13px;box-shadow:inset 0 5px 0 #fffbc0,inset 0 -8px 0 #f38900,0 0 0 4px #fff,0 6px 0 5px #123b58;text-shadow:2px 4px 0 #092b49;-webkit-text-stroke:1.7px #092b49}.start span{margin-right:8px}.start-note{font-size:11px;text-align:center;color:#5b7380;line-height:1.45;margin-top:12px}.game-tools{padding:17px 18px 0;color:#e6fbff}.below-sea{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.searchbox{display:flex;align-items:center;gap:8px;border:2px solid #0a4863;background:#f4ffff;border-radius:12px;min-height:41px;padding:0 12px;width:230px}.searchbox>span{font-size:26px;color:#366b81}.searchbox input{width:100%;min-width:0;border:0;outline:0;background:none;color:#10394e;font-size:14px}.below-sea #searchStatus{font-size:12px;overflow-wrap:anywhere;flex:1;min-width:160px}.fair-badge{font-size:12px;font-weight:700;margin-left:auto}.name-view-hint{font-size:12px;line-height:1.7;color:#c4edf4;margin-top:7px}.roster-panel{padding:12px 0}.roster-panel summary{font-family:'Lucky Jua',sans-serif;font-size:16px;cursor:pointer}.roster-panel summary span{font:12px Arial,sans-serif;opacity:.8;margin-left:10px}.roster{display:flex;gap:7px;flex-wrap:wrap;max-height:220px;overflow:auto;padding:12px 0}.roster-chip{border:1px solid #94c8d7;background:#f5ffff;border-radius:8px;padding:6px 9px;color:#164356;font-size:14px;overflow-wrap:anywhere;max-width:100%}.roster-chip b{font-size:12px;color:#6b8b98;margin-right:6px}.roster-chip.match{background:#ffea8b;border-color:#d8a520}.roster-chip.out{opacity:.5;text-decoration:line-through}.roster-chip.won{background:#d8f9e8;border-color:#1ca889}.empty-roster{font-size:13px;color:#c0e5ee}.result{position:relative;z-index:9;margin:15px 29px 56px;background:linear-gradient(140deg,#fffdf1,#fff);border:4px solid #16364e;border-radius:20px;padding:23px;box-shadow:0 5px 0 #eeaf25}.result-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.eyebrow{font-size:12px;letter-spacing:1.3px;color:#047d9b;font-weight:800}.result h2{font:28px 'Lucky Jua',sans-serif;margin-top:7px}.secondary{border:2px solid #b4cfd7;border-radius:10px;padding:9px 14px;background:#f5fcfe;color:#123d54;font-weight:700;font-size:13px;white-space:nowrap}#resultMeta{font-size:13px;color:#66838d;margin-top:10px}.winner-list{display:flex;flex-wrap:wrap;gap:10px;margin-top:17px}.winner{border:2px solid #e7bc3d;background:#fff0a6;border-radius:12px;padding:12px 16px;font-family:'Lucky Jua',sans-serif;font-size:20px;box-shadow:0 3px 0 #f2dfa3;overflow-wrap:anywhere}.winner small{font:12px Arial,sans-serif;color:#957026;margin-right:8px}.result-note{font-size:12px;color:#778e98;line-height:1.7;margin-top:14px}footer{text-align:center;padding:5px 20px 20px;color:#b5e1eb;font-size:12px;line-height:1.7}dialog{border:4px solid #092f4c;border-radius:23px;background:#fffef2;padding:30px;max-width:550px;width:calc(100% - 30px);color:#14384d}dialog::backdrop{background:#031d38bf}dialog h2{font:29px 'Lucky Jua',sans-serif;margin:12px 0 20px}dialog ol{padding-left:21px;font-size:15px;line-height:1.9}dialog p{font-size:14px;line-height:1.8;color:#577281;margin:15px 0}dialog .primary{width:100%;margin-top:8px}.close{position:absolute;top:8px;right:13px;border:0;background:none;color:#173a4e;font-size:32px}.running .setup{display:none}.running .ocean{height:max(560px,calc(100svh - 150px));border-radius:20px}.running.dense .ocean{min-height:760px}.running .game-top,.running .sea-top,.running .sea-bottom{display:flex}.running .game-tools{padding-top:13px}.finished .game-top,.finished .sea-bottom{display:flex}.finished .ocean{height:650px}.finished .game-top{top:15px}.finished .result{margin-top:8px}
@media(max-width:1150px) and (min-width:801px){.console{margin-left:18px;margin-right:18px;padding:17px;gap:14px;grid-template-columns:minmax(0,1.25fr) 185px minmax(225px,.9fr)}.console-numbers{padding:0 12px}.console-heading label{font-size:20px;padding:8px 13px}.game-top{right:315px}.brand{font-size:22px}.live-counters{gap:7px}.live-counters>div{padding:7px 11px;gap:7px}.live-counters span{font-size:12px}.start{font-size:31px}}
@media(max-width:800px){.arcade{padding:8px 9px 0}.arcade-shell{border-width:3px;border-radius:20px;padding-top:50px}.utility-bar{top:7px;right:10px;left:10px;justify-content:flex-end;gap:8px}.quiet{font-size:13px;padding:7px 11px;border-width:2px}.audio-controls{border-width:2px;padding:2px 8px;gap:6px}.audio-controls button{font-size:14px}.audio-controls input{width:64px}.ocean{height:330px;border-radius:14px 14px 4px 4px}.console{margin:-15px 11px 16px;border-width:4px;border-radius:21px;padding:15px 14px;gap:16px 13px;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);box-shadow:inset 0 3px 0 #fff,inset 0 -3px 0 #d5c395,0 0 0 4px #ffb42b,0 -5px 0 4px #157caf,0 5px 0 #073d5a}.console-names{grid-column:1/-1}.console-heading{margin-bottom:7px}.console-heading label{font-size:20px;padding:6px 14px}.console-heading>span{font-size:12px}textarea{height:90px;font-size:16px}.input-meta{font-size:11px}.console-numbers{padding:0 10px 0 0;border-left:0;border-right:2px solid #ddd5bd;gap:8px}.participant-count{padding:7px 4px}.participant-count strong{font-size:34px}.participant-count>span,.winner-control>label{font-size:16px}.stepper{min-height:42px;border-width:2px}.stepper button{width:27px;height:32px;font-size:25px}.stepper input{width:32px;font-size:26px}.stepper b{font-size:15px;margin-right:1px}.probability{font-size:11px;gap:5px}.console-play{justify-content:flex-start;padding-top:2px}.speed-heading{font-size:18px;margin-bottom:8px}.speed{border-width:2px;padding:2px}.speed button{font-size:16px;padding:8px 3px}.speed button small{font-size:10px}.start{min-height:78px;font-size:27px;border-radius:27px;border-width:3px;padding:8px;line-height:1.15;-webkit-text-stroke:1.3px #092b49}.start-note{font-size:10px;line-height:1.6;margin-top:11px}.game-tools{padding:15px 4px 0}.fair-badge{display:none}.below-sea{gap:8px}.searchbox{width:190px}.below-sea #searchStatus{min-width:100px;font-size:11px}.name-view-hint{font-size:11px}.game-top{left:10px;right:10px;top:9px;justify-content:center}.brand{display:none}.live-counters{gap:8px}.live-counters>div{padding:7px 15px}.live-counters strong{font-size:23px}.live-counters span{font-size:12px}.sea-top{top:61px;left:10px;right:10px}.status-pill,.sea-button{font-size:12px;padding:7px 10px}.sea-bottom{left:13px;right:13px;font-size:10px;bottom:12px}.running .ocean{height:720px}.running.dense .ocean{min-height:880px}.finished .ocean{height:680px}.pause-overlay strong{font-size:28px}.result{margin:12px 12px 37px;padding:18px;border-width:3px}.result h2{font-size:22px}.result-head{align-items:flex-start;gap:10px}.secondary{font-size:12px;padding:8px}.winner{font-size:19px;padding:10px 12px}.result-note{font-size:11px}footer{font-size:11px;padding:5px 15px 18px}}
@media(prefers-reduced-motion:reduce){button{transition:none}}
@media(max-width:800px){.start span{display:none}.running .utility-bar{position:fixed;top:auto;bottom:10px;left:14px;right:14px;justify-content:center}.running .arcade-shell{padding-top:0}}
.finished .game-top,.celebrating .game-top,.celebrating .sea-top{display:none}
.running.wide-roster .below-sea{position:fixed;z-index:18;bottom:14px;left:28px;max-width:680px;padding:10px 12px;background:#f3fcffeF;color:#174963;border:2px solid #134764;border-radius:14px;box-shadow:0 3px 12px #05263c33}.running.wide-roster .below-sea .fair-badge{display:none}.running.wide-roster #searchStatus{max-height:45px;overflow:auto}.running.wide-roster .game-tools{padding-bottom:95px}@media(max-width:800px){.running.wide-roster .below-sea{bottom:62px;left:12px;right:12px;max-width:none;gap:7px;padding:8px}.running.wide-roster .searchbox{width:180px}.running.wide-roster #searchStatus{flex-basis:100%;font-size:12px}}
.stepper input{width:52px}.stepper button{width:32px}@media(max-width:800px){.stepper input{width:45px;font-size:24px}.stepper button{width:22px;margin:1px}.stepper b{font-size:14px}}
.running .pause-overlay{position:fixed;inset:0;z-index:40}.running.wide-roster .sea-button{position:fixed;right:28px;top:78px;z-index:22}@media(max-width:800px){.running.wide-roster .sea-button{right:14px;top:63px}}
/* A fixed arena: population changes density, never the field height. */
body.running{overflow:hidden}.running .arcade{position:fixed;inset:0;max-width:none;padding:8px 12px 0;display:flex;flex-direction:column}.running .arcade-shell{flex:1;min-height:0;padding-top:0}.running .game-area{height:100%}.running .ocean,.running.dense .ocean{height:100%;min-height:0;max-height:none}.running .game-tools{flex:0 0 58px;padding:6px 4px 0;min-height:0}.running .below-sea,.running.wide-roster .below-sea{position:static;max-width:none;padding:0;border:0;box-shadow:none;background:none;color:#e6fbff;gap:8px;flex-wrap:nowrap}.running .name-view-hint,.running .roster-panel,.running .fair-badge,.running footer{display:none}.running #searchStatus{max-height:36px;overflow:auto;font-size:12px;min-width:0}.running #locate{white-space:nowrap}.running .searchbox{flex-shrink:0}.running .sea-button{position:static}.finished .ocean{height:min(650px,calc(100svh - 100px));min-height:0}
@media(max-width:800px){.running .arcade{padding:5px 6px 0}.running .utility-bar{position:absolute;top:5px;right:8px;left:8px;bottom:auto;justify-content:flex-end}.running .game-top{top:48px}.running .live-counters>div{padding:5px 12px}.running .sea-top{top:88px}.running .game-tools{flex-basis:76px;padding:5px 0}.running .below-sea{flex-wrap:wrap;gap:5px}.running .searchbox{width:calc(100% - 97px);height:34px;min-height:34px}.running #locate{height:34px;padding:5px 10px}.running #searchStatus{flex-basis:100%;max-height:23px;font-size:11px}.running.wide-roster .sea-button{position:static}.finished .ocean{height:min(650px,calc(100svh - 115px))}}

/* Text-sized Korean names retain open counters; cartoon display headings stay Jua. */
@font-face{font-family:"Lucky Names";src:url("fonts/LuckyNameSans.woff") format("woff");font-weight:400;font-style:normal;font-display:swap}
#names,#search,#searchStatus,.roster-chip,.winner{font-family:"Lucky Names","Noto Sans KR",Arial,sans-serif;font-weight:400}
