:root{font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:#f3e7d4;background:#161315;font-synthesis:none}*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0;overflow:hidden}button,input{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}button:focus-visible,input:focus-visible{outline:3px solid #e9c36d;outline-offset:2px}.hidden{display:none!important}.entry-screen{position:fixed;inset:0;overflow:auto;overscroll-behavior:contain;background:radial-gradient(ellipse at 50% 18%,#665037 0,#272024 50%,#161315 100%);padding:calc(25px + env(safe-area-inset-top)) 18px calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:center;gap:20px}.brand{text-align:center}.brand-mark{color:#f6d77d;font-size:42px;text-shadow:0 0 24px #ffdd7070}.brand h1{font-size:clamp(30px,8vw,44px);letter-spacing:.07em;margin:6px 0;color:#f4d27b;font-weight:900}.brand p{font-size:13px;color:#d9bea3;margin:0}.join-card{width:min(100%,410px);border:1px solid #8f7147;background:#191619e6;box-shadow:0 15px 40px #0005;border-radius:19px;padding:19px;display:flex;flex-direction:column;gap:11px}.join-card label{font-size:13px;font-weight:700}.join-card input{border-radius:12px;border:1px solid #9a7957;background:#2b2627;padding:14px 13px;color:white;width:100%;font-size:16px}.choice-head{font-size:11px;color:#d8b984;font-weight:900;letter-spacing:.06em;display:flex;justify-content:space-between}.choice-head span{color:#f9e4c0}.avatar-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.avatar-pick{border:1px solid #695443;background:#2b2424;color:#e7ddcb;border-radius:12px;min-height:75px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px}.avatar-pick.selected{background:#53432b;border:2px solid #ebc96f}.avatar-head{width:33px;height:35px;border-radius:45% 45% 42% 42%;display:block;position:relative;border:3px solid var(--hair);background:var(--skin);box-shadow:0 6px 0 3px var(--shirt)}.avatar-head::after{content:'';position:absolute;left:8px;top:10px;border-radius:50%;width:3px;height:3px;background:#44372e;box-shadow:10px 0 #44372e}.avatar-pick small{font-size:11px}.join-button,.primary{background:linear-gradient(#f1cd80,#bd862e);color:#22180d;border:0;border-radius:13px;min-height:49px;font-weight:900;letter-spacing:.07em}.join-button{display:flex;justify-content:space-around;align-items:center}.subtext{text-align:center;font-size:11px;line-height:1.5;color:#bba99a;margin:0}.error{color:#ff9c96;font-size:12px;margin:0;min-height:1px}.game,#world{position:absolute;inset:0;width:100%;height:100%;touch-action:none}.game{background:#171413;overflow:hidden;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}#world{display:block;outline:none}#nametags{position:absolute;inset:0;pointer-events:none;overflow:hidden}.name-tag{position:absolute;color:white;background:#191314b8;border:1px solid #bdab8f88;padding:3px 8px;border-radius:9px;font-size:11px;white-space:nowrap;transform:translate(-50%,-50%);text-shadow:0 1px 1px #000}.name-tag.me{border-color:#f1d582;color:#ffdf97}.hud{position:absolute;z-index:3}.top-left{top:calc(env(safe-area-inset-top) + 12px);left:13px;display:flex;align-items:center;gap:7px}.score,.online,.menu-button{background:#181418c9;border:1px solid #c7a05f86;backdrop-filter:blur(10px);border-radius:12px;padding:9px 10px;font-size:12px;min-height:37px}.score{color:#f8d481}.score b{font-size:16px}.score span{color:#d5c4ae;font-size:9px}.online{font-size:10px;color:#e9dfd2}.dot{display:inline-block;width:6px;height:6px;background:#7adb8b;border-radius:50%;margin-right:2px}.menu-button{top:calc(env(safe-area-inset-top) + 12px);right:13px;color:#f5deae;font-size:17px;width:42px;height:38px;padding:0}.decree{top:calc(env(safe-area-inset-top) + 65px);left:50%;transform:translateX(-50%);width:min(calc(100% - 28px),350px);text-align:center;background:#171315c9;border:1px solid #997446b5;border-radius:14px;padding:8px 14px;display:flex;flex-direction:column;gap:3px}.decree span{font-size:10px;letter-spacing:.12em;color:#f0c878;font-weight:900}.decree strong{font-size:11px;font-weight:600}.decree-progress{height:3px;border-radius:4px;background:#ffffff24;overflow:hidden;margin-top:3px}.decree-progress i{height:100%;display:block;background:#e8bc5b;width:0;transition:width .25s}.voice{position:absolute;z-index:4;top:calc(env(safe-area-inset-top) + 144px);left:50%;transform:translateX(-50%);max-width:min(92vw,340px);color:#fff5dd;text-align:center;text-shadow:0 2px 4px #000;background:#241814b8;border-radius:10px;padding:8px 11px;font-size:12px;pointer-events:none;opacity:0;transition:opacity .25s}.voice.show{opacity:1}.footer-ui{position:absolute;bottom:calc(env(safe-area-inset-bottom) + 21px);width:100%;display:flex;align-items:flex-end;justify-content:space-between;padding:0 16px;pointer-events:none;z-index:3}.joystick-zone{height:136px;width:42%;max-width:170px;position:relative;pointer-events:auto;touch-action:none}.action{pointer-events:auto;border:3px solid #ffe09c;background:linear-gradient(145deg,#f1c66b,#ab711e);color:#31200c;width:105px;height:105px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;box-shadow:0 4px 0 #6b461f,0 5px 22px #0009;touch-action:none;user-select:none;-webkit-user-select:none}.action:active{transform:scale(.97)}.action span{font-size:27px}.action b{font-size:12px}.connection{position:absolute;z-index:5;left:50%;top:53%;transform:translate(-50%,-50%);background:#1a1319db;border:1px solid #e0c27d;border-radius:12px;text-align:center;padding:12px 18px;white-space:nowrap;font-size:13px;pointer-events:none}.connection.hidden{display:none}.panel{position:absolute;z-index:10;inset:0 0 0 auto;width:min(88%,375px);background:#211b1bfa;border-left:1px solid #9e7c4a;padding:calc(env(safe-area-inset-top) + 18px) 20px calc(env(safe-area-inset-bottom) + 18px);display:flex;flex-direction:column;gap:15px;box-shadow:-16px 0 45px #000b;overflow:auto;touch-action:pan-y;user-select:text}.panel header{display:flex;align-items:center;justify-content:space-between}.panel h2{font-size:17px;color:#f2ce82;margin:0}.panel header button{width:36px;height:36px;border:1px solid #776249;background:#33282a;border-radius:8px;color:#eee}.panel-body{display:flex;flex-direction:column;gap:8px;font-size:13px}.panel p{margin:5px 0}.panel ul{margin:0;padding-left:23px;max-height:140px;overflow:auto}.panel li{margin-bottom:6px}.menu-option{background:#40322a;color:#ffe6bb;border:1px solid #987543;border-radius:10px;padding:12px;text-align:left}.panel strong{color:#f6d27b}@media(max-height:650px){.entry-screen{gap:10px;padding-top:20px}.join-card{padding:13px}.avatar-pick{min-height:64px}.avatar-head{width:26px;height:28px}.decree{top:calc(env(safe-area-inset-top) + 57px)}.footer-ui{bottom:calc(env(safe-area-inset-bottom) + 6px)}.action{width:87px;height:87px}.joystick-zone{height:105px}}@media(min-width:700px){.footer-ui{max-width:750px;left:50%;transform:translateX(-50%)}}


/* Always visible, independent pointer capture, safe-area provided by footer. */
.joystick-zone{width:124px;height:124px;flex-shrink:0;border-radius:50%;position:relative;touch-action:none}
.stick-base{position:absolute;inset:0;border-radius:50%;border:2px solid #e5c581aa;background:#211a21aa;box-shadow:inset 0 0 24px #edc88222,0 4px 20px #0006;pointer-events:none}
.stick-knob{position:absolute;left:50%;top:50%;width:50px;height:50px;transform:translate(-50%,-50%);border-radius:50%;border:2px solid #ffe4a9;background:linear-gradient(145deg,#dec080dd,#967343dd);box-shadow:0 3px 10px #0008;pointer-events:none}
@media(max-height:650px){.joystick-zone{width:100px;height:100px}.stick-knob{width:42px;height:42px}}

/* Oct 2026 repair: every non-control HUD surface is a camera swipe surface. */
.hud:not(button),.top-left,.score,.online,.decree,.decree *{pointer-events:none}
.menu-button{pointer-events:auto}
.decree{width:min(calc(100% - 72px),320px);top:calc(env(safe-area-inset-top) + 59px);padding:7px 11px}
.action{width:92px;height:92px}
.action span{font-size:23px}
.action b{font-size:11px}

/* Picking up gifts must never replace the core bow action. */
.right-controls{display:flex;flex-direction:column;align-items:flex-end;gap:9px;pointer-events:none}
.right-controls>*{pointer-events:auto}
.interact-button{touch-action:none;min-height:40px;border:1px solid #ffe29b;border-radius:14px;background:#2c2221e8;color:#ffe3a3;font-size:12px;letter-spacing:.04em;font-weight:800;padding:8px 12px;box-shadow:0 3px 14px #0006}

/* More 3D visibility, HUD must not intercept the first camera swipe. */
.decree{width:min(calc(100% - 70px),320px);background:#1d1818b8;min-height:52px;gap:2px;box-shadow:0 3px 12px #0002}
.decree strong{font-size:11px;line-height:1.2}.decree-progress{margin-top:2px}
.game,#world{overscroll-behavior:none;-webkit-user-select:none;touch-action:none}

/* TPP Orbit Controller: a dedicated camera surface above the canvas, but below
   joystick/menu/action UI. First contact is always a camera drag. */
#orbit-surface{position:absolute;inset:0;z-index:2;touch-action:none;overscroll-behavior:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;pointer-events:auto}
#world{pointer-events:none}

#touch-debug:not([hidden]){position:absolute;left:12px;top:calc(env(safe-area-inset-top) + 148px);z-index:20;pointer-events:none;background:#080c0de8;color:#97ffad;border:1px solid #97ffad;border-radius:9px;padding:9px;max-width:calc(100% - 24px);font:12px/1.4 monospace;white-space:pre-wrap;user-select:none}

/* Cult of Igor mobile entry: artwork is decorative, controls remain real HTML. */
.entry-screen{background:radial-gradient(ellipse at 50% 12%,#775026 0%,#2c1c15 45%,#100b0b 100%);justify-content:center;gap:clamp(12px,2.3vh,26px);padding:calc(20px + env(safe-area-inset-top)) 6vw calc(20px + env(safe-area-inset-bottom))}
.brand{width:min(100%,540px);text-shadow:0 3px 16px #000}
.brand-mark{font-size:clamp(40px,7vh,70px);color:#ffe38e}
.brand h1{font-size:clamp(34px,9vw,70px);line-height:1.04;letter-spacing:.025em;color:#ffe18a;text-shadow:0 3px 25px #3c1b06}
.brand p{font-size:clamp(13px,3.5vw,20px);color:#ffebc6}
.join-card{width:min(100%,470px);border:2px solid #e7b862;border-radius:26px;background:#171111ed;box-shadow:0 0 35px #c28b3029,0 18px 45px #0009;padding:clamp(18px,4vw,27px);gap:clamp(12px,2vh,22px)}
.join-card label{font-size:clamp(16px,4vw,21px);color:#fff3db}
.join-card input{background:#2a2220e8;border:1px solid #b58b61;border-radius:16px;padding:17px;color:#fff2dc}
.choice-head{font-size:14px;color:#f6c779;letter-spacing:.11em}
.avatar-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.avatar-pick{min-height:125px;border:1px solid #87684d;border-radius:19px;background:#312322e6;gap:8px}
.avatar-pick.selected{border:3px solid #ffe087;background:linear-gradient(145deg,#73532a,#3b291a);box-shadow:0 0 22px #efb84a42}
.gender-icon{font-size:66px;line-height:1;color:#b98c81;font-family:Arial,sans-serif}
.avatar-pick.selected .gender-icon{color:#ffe28b}
.avatar-pick small{font-size:17px;color:#fff0d4}
.join-button{min-height:65px;border:1px solid #ffe398;border-radius:20px;font-size:clamp(16px,4.5vw,22px);background:linear-gradient(#ffe69a,#dfa746);color:#211409;box-shadow:0 4px 20px #a66b2859}
.subtext{font-size:12px;color:#c5ae9a}
@media(max-height:720px){.entry-screen{justify-content:flex-start;gap:10px}.brand-mark{font-size:30px}.brand h1{font-size:34px}.join-card{padding:14px;gap:9px}.avatar-pick{min-height:83px}.gender-icon{font-size:43px}.join-button{min-height:48px}}

/* Voice chat (ported from Anon Chat). */
.voice-button{top:calc(env(safe-area-inset-top) + 12px);right:62px;width:42px;height:38px;padding:0;display:grid;place-items:center;color:#f5deae;background:#181418c9;border:1px solid #c7a05f86;backdrop-filter:blur(10px);border-radius:12px;pointer-events:auto}
.voice-button.active{background:#3a2c14;border-color:#e8c06e;color:#ffd98a}
.call-panel{top:calc(env(safe-area-inset-top) + 15px);right:111px;left:auto;flex-direction:row-reverse;display:flex;align-items:center;gap:8px;padding:0;background:none;border:0}
.call-people{display:none}
.call-person{font-size:11px;padding:6px 9px;border:1px solid #5a4725;background:#241d14;border-radius:20px;color:#f3e7d4;white-space:nowrap}
.call-person.talking{border-color:#e8c06e;color:#ffd98a;box-shadow:0 0 9px #e8c06e55}
.call-person.muted{opacity:.6}
.call-person.connection-weak{border-color:#d49451;background:#33251b;color:#ffd4a0}
.call-control{width:34px;height:34px;flex:none;border:1px solid #c7a05f86;background:#2a2113;color:#f5deae;display:grid;place-items:center;border-radius:50%;padding:0;font-size:15px}
.call-control.muted{background:#412026;border-color:#a43744;color:#ff9ca8}
.call-control.hangup{background:#4a1720;color:#ff9ca8;border-color:#a43744}
#call-panel button{pointer-events:auto}

/* Wave button sits left of the bow button. */
.act-row{display:flex;align-items:flex-end;gap:10px;pointer-events:none}
.act-row>*{pointer-events:auto}
.small-action{width:64px;height:64px;font-size:9px}
.small-action span{font-size:22px}
.small-action b{font-size:8px}
