:root{--sky: #4FB3E8;--sky-deep: #2B6FA3;--sky-pale: #DDF0FA;--ink: #1E2A5A;--ink-soft: #5B6680;--warm: #FFE6C4;--cream: #F6EFE1;--navy: #1E2A5A;--red: #E0261C;--gold: #F7C948;--ok: #2E9E6B;--danger: #C0392B;--line: #D8E3EA;--radius: 14px;--font: "Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font);font-size:17px;line-height:1.5;color:var(--ink);background:var(--cream);-webkit-font-smoothing:antialiased}h1,h2,h3{line-height:1.2;margin:0 0 .5em}h1{font-size:1.9rem}h2{font-size:1.4rem}h3{font-size:1.1rem}p{margin:0 0 .8em}a{color:var(--sky-deep)}button,.btn{font:inherit;font-weight:600;border:0;border-radius:12px;padding:.7em 1.2em;background:var(--sky);color:#fff;cursor:pointer;min-height:48px;display:inline-flex;align-items:center;justify-content:center;gap:.5em;text-decoration:none;transition:transform .08s ease,background .15s ease}button:hover,.btn:hover{background:#3a9fd6}button:active{transform:translateY(1px)}button:disabled{opacity:.55;cursor:not-allowed}button.secondary,.btn.secondary{background:#fff;color:var(--ink);border:2px solid var(--line)}button.secondary:hover{background:var(--sky-pale)}button.ghost{background:transparent;color:var(--ink);border:0;padding:.5em .8em;min-height:40px}button.ghost:hover{background:#0000000d}button.danger{background:var(--danger)}button.warm{background:#e07b4f}button.ok{background:var(--ok)}button.small{min-height:36px;padding:.35em .8em;font-size:.9rem;border-radius:9px}input,select,textarea{font:inherit;padding:.65em .8em;border:2px solid var(--line);border-radius:10px;width:100%;background:#fff;color:var(--ink);min-height:48px}input:focus,select:focus,textarea:focus,button:focus-visible{outline:3px solid rgba(79,179,232,.5);outline-offset:1px}textarea{min-height:110px;resize:vertical}label{display:block;font-weight:600;margin-bottom:.3em}.field{margin-bottom:1rem}.field .hint{font-weight:400;color:var(--ink-soft);font-size:.9rem}.check{display:flex;gap:.6em;align-items:flex-start;font-weight:500}.check input{width:22px;height:22px;min-height:0;margin-top:3px;flex:none}.row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media(max-width:720px){.grid2{grid-template-columns:1fr}}.card{background:#fff;border-radius:var(--radius);padding:1.25rem;box-shadow:0 6px 24px #1f3b4d14;border:1px solid var(--line)}.muted{color:var(--ink-soft)}.small{font-size:.9rem}.center{text-align:center}.tag{display:inline-block;padding:.1em .6em;border-radius:999px;font-size:.8rem;font-weight:700;background:var(--sky-pale);color:var(--sky-deep)}.tag.demo{background:#ffe2cf;color:#9e3f2e}.tag.ok{background:#ddf5e8;color:#1f6f4a}.tag.warn{background:#fff1c9;color:#7a5a00}.tag.bad{background:#fbe0dd;color:#8e2a20}.notice{padding:.8rem 1rem;border-radius:12px;background:#fff1c9;border:1px solid #F3D87A;margin-bottom:1rem}.notice.demo{background:#ffe9dd;border-color:#f2b49a}.notice.info{background:var(--sky-pale);border-color:#b9ddf0}.notice.error{background:#fbe0dd;border-color:#eba39b}.app{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;flex-wrap:wrap}.topbar .brand{font-weight:800;color:var(--navy);text-decoration:none;display:flex;align-items:center;gap:.5rem;margin-right:auto}.topbar nav{display:flex;gap:.25rem;flex-wrap:wrap}.topbar nav a{text-decoration:none;color:var(--ink);padding:.45em .8em;border-radius:10px;font-weight:600}.topbar nav a.active,.topbar nav a:hover{background:var(--sky-pale);color:var(--sky-deep)}.main{flex:1;width:100%;max-width:1200px;margin:0 auto;padding:1rem}.main.wide{max-width:1600px;padding:.5rem}.landing{display:grid;grid-template-columns:1.1fr 1fr;gap:2rem;align-items:start}@media(max-width:860px){.landing{grid-template-columns:1fr}}.hero{background:linear-gradient(180deg,#a9d8f2,#f6efe1);border-radius:20px;padding:1.5rem;overflow:hidden}.hero svg{width:100%;height:auto;border-radius:12px;display:block}.scene-wrap{position:relative;overflow:hidden;border-radius:16px;background:#b9d6e8;box-shadow:0 10px 30px #1f3b4d26;scrollbar-width:thin}.scene-svg{display:block;width:100%;height:auto;max-height:calc(100vh - 150px);margin:0 auto}.scene-scroll{overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.scene-fab{position:absolute;left:12px;bottom:12px;display:none;gap:6px;z-index:5}.scene-fab button{box-shadow:0 2px 8px #00000040}.menu-pop{position:absolute;top:110%;left:0;z-index:30;padding:.5rem}.menu-pop .menu-close{display:none}@media(max-width:760px){.scene-wrap .scene-svg{min-width:1100px;max-height:none}.scene-scroll{height:calc(100vh - 190px);min-height:360px;max-height:720px;overflow:auto}}.sprite{transition:transform .14s linear}.reduced .sprite,.me-sprite{transition:none}.label text{paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}.dpad{position:absolute;right:12px;bottom:12px;display:grid;grid-template-areas:". up ." "left . right" ". down .";gap:4px;touch-action:none}.dpad button{width:48px;height:48px;min-height:0;padding:0;border-radius:10px;background:#ffffffd9;color:var(--ink);font-size:1.2rem;box-shadow:0 2px 6px #0003}.dpad-up{grid-area:up}.dpad-down{grid-area:down}.dpad-left{grid-area:left}.dpad-right{grid-area:right}@media(hover:hover)and (pointer:fine){.dpad{display:none}}@media(hover:none),(pointer:coarse){.scene-fab{display:flex}}.toolbar{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;padding:.5rem 0}.toolbar .spacer{flex:1}.banner{position:sticky;top:64px;z-index:15;display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-radius:12px;background:#ffd78a;color:#4a2e00;font-weight:600;margin-bottom:.5rem;box-shadow:0 6px 18px #0000001f;flex-wrap:wrap}.banner.rehearsal{background:#e63946;color:#fff}.banner.info{background:var(--sky-pale);color:var(--ink)}.banner.error{background:#fbe0dd;color:#8e2a20}.hall-layout{display:grid;grid-template-columns:2fr 1fr;gap:1rem;align-items:start}@media(max-width:980px){.hall-layout{grid-template-columns:1fr}}.hall-scene{border-radius:16px;overflow:hidden;background:#1f4e79;box-shadow:0 10px 30px #1f3b4d33}.panel{background:#fff;border-radius:16px;padding:1rem;border:1px solid var(--line)}.panel h2{font-size:1.2rem}.stage-title{font-size:1.35rem;font-weight:700;color:var(--sky-deep)}.narration{background:var(--cream);border-left:4px solid var(--sky);padding:.75rem 1rem;border-radius:8px;white-space:pre-wrap;font-size:1.05rem}.progress{height:8px;background:var(--line);border-radius:4px;overflow:hidden;margin:.5rem 0}.progress div{height:100%;background:var(--sky)}.big-action{width:100%;font-size:1.25rem;padding:1em;border-radius:16px;background:#e07b4f}.big-action:hover{background:#c96a41}.big-action.done{background:var(--ok)}.media-box video,.media-box audio{width:100%;border-radius:10px;background:#000}.media-box iframe{width:100%;aspect-ratio:16/9;border:0;border-radius:10px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);background:var(--ink);color:#fff;padding:.8rem 1.2rem;border-radius:12px;z-index:50;max-width:92vw;box-shadow:0 10px 30px #0000004d}.host-msg{background:#1f3b4d;color:#fff;padding:.9rem 1.1rem;border-radius:12px;margin-bottom:.75rem}.host-msg .from{font-size:.85rem;opacity:.8}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#1f3b4d8c;display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem}.modal{background:#fff;border-radius:16px;padding:1.5rem;max-width:560px;width:100%;max-height:90vh;overflow:auto}table{width:100%;border-collapse:collapse;font-size:.95rem}th,td{text-align:left;padding:.5rem .6rem;border-bottom:1px solid var(--line);vertical-align:top}th{background:var(--sky-pale);position:sticky;top:0}.table-wrap{overflow:auto;max-height:70vh;border:1px solid var(--line);border-radius:12px}.tabs{display:flex;gap:.25rem;flex-wrap:wrap;border-bottom:2px solid var(--line);margin-bottom:1rem}.tabs a{padding:.6em .9em;text-decoration:none;color:var(--ink);font-weight:600;border-bottom:3px solid transparent;margin-bottom:-2px}.tabs a.active{color:var(--sky-deep);border-bottom-color:var(--sky)}.countdown{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap}.countdown div{background:var(--sky-deep);color:#fff;border-radius:14px;min-width:86px;padding:.6rem;text-align:center}.countdown b{display:block;font-size:2rem;line-height:1}.countdown span{font-size:.85rem;opacity:.9}.avatar-pick{display:flex;gap:.4rem;flex-wrap:wrap}.avatar-pick button{min-height:40px;padding:.3em .7em;background:#fff;color:var(--ink);border:2px solid var(--line);font-weight:600}.avatar-pick button.on{border-color:var(--sky);background:var(--sky-pale);color:var(--sky-deep)}.swatch{width:40px;height:40px;border-radius:50%;border:3px solid var(--line);padding:0;min-height:0}.swatch.on{border-color:var(--ink)}.people-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:.75rem}.person{display:flex;gap:.75rem;align-items:center}.person svg{width:56px;height:68px;flex:none}.list-view ul{padding-left:1.2rem}.list-view li{margin-bottom:.3rem}.stage-list{list-style:none;padding:0;margin:0}.stage-list li{display:flex;gap:.6rem;align-items:center;padding:.5rem .6rem;border-radius:10px;border:1px solid var(--line);margin-bottom:.4rem;background:#fff}.stage-list li.current{border-color:var(--sky);background:var(--sky-pale)}.stage-list li.disabled{opacity:.5}.stage-list .num{width:28px;height:28px;border-radius:50%;background:var(--sky-deep);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;flex:none;font-size:.9rem}.kv{display:grid;grid-template-columns:auto 1fr;gap:.3rem 1rem}.kv dt{font-weight:600;color:var(--ink-soft)}.kv dd{margin:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}@keyframes rise{0%{transform:translateY(0) scale(.9);opacity:0}8%{opacity:1}to{transform:translateY(-520px) scale(.8);opacity:0}}@keyframes sway{0%,to{transform:translate(0)}50%{transform:translate(10px)}}@keyframes flyto{0%{transform:translate(0) scale(1);opacity:1}90%{opacity:1}to{transform:var(--fx) scale(.8);opacity:0}}@keyframes pop{0%{transform:scale(.6);opacity:0}20%{opacity:1}to{transform:scale(1.3);opacity:0}}@keyframes bubble{0%{opacity:0;transform:translateY(6px)}10%,85%{opacity:1;transform:translateY(0)}to{opacity:0}}@keyframes floaty{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.fx-rise{animation:rise 9s ease-out forwards}.fx-fly{animation:flyto 1.4s ease-in forwards}.fx-applause{animation:pop 1.6s ease-out forwards;transform-origin:center;transform-box:fill-box}.fx-bubble{animation:bubble 4s ease forwards}.fx-float{animation:floaty 4s ease-in-out infinite;transform-box:fill-box;transform-origin:center}.fx-static{opacity:.9}@media(prefers-reduced-motion:reduce){.fx-rise,.fx-fly,.fx-applause,.fx-float{animation-duration:.01s;animation-iteration-count:1}.sprite{transition:none}}.reduced .fx-rise,.reduced .fx-fly,.reduced .fx-float,.reduced .fx-applause{animation:none}.slogan{font-style:italic;color:var(--red);font-weight:600}.brand-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.brand-strip img{width:100%;height:180px;object-fit:cover;border-radius:12px;border:1px solid var(--line);background:#fff}.topbar .modeswitch{display:inline-flex;border:2px solid var(--line);border-radius:10px;overflow:hidden}.topbar .modeswitch button{min-height:36px;padding:.3em .7em;border-radius:0;background:#fff;color:var(--ink);font-size:.85rem}.topbar .modeswitch button.on{background:var(--navy);color:#fff}.topbar .modeswitch button.on.rehearsal{background:var(--red)}@media(max-width:760px){body{font-size:16px}.topbar{padding:.4rem .6rem;gap:.3rem}.topbar .brand span{font-size:.95rem}.topbar nav{flex-wrap:nowrap;overflow-x:auto;width:100%;order:3;scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:.15rem}.topbar nav::-webkit-scrollbar{display:none}.topbar nav a{white-space:nowrap;padding:.35em .6em;font-size:.9rem}.topbar .modeswitch button{min-height:32px;padding:.2em .55em;font-size:.8rem}.topbar>button.ghost{min-height:32px;padding:.2em .5em;font-size:.85rem}.main{padding:.5rem}.main.wide{padding:.25rem}.banner{padding:.5rem .75rem;font-size:.9rem;top:0;position:relative}.toolbar{flex-wrap:nowrap;overflow-x:auto;gap:.35rem;padding:.35rem 0;scrollbar-width:none}.toolbar::-webkit-scrollbar{display:none}.toolbar button,.toolbar>span{white-space:nowrap;flex:none}.toolbar .spacer{display:none}.scene-wrap{border-radius:10px}.menu-pop{position:fixed;left:8px;right:8px;top:auto;bottom:8px;max-height:62vh;overflow-y:auto;z-index:60;min-width:0!important;box-shadow:0 -8px 30px #00000040}.menu-pop button{min-height:44px}.board-panel{position:fixed;left:8px;right:8px;bottom:8px;top:auto;max-height:72vh;overflow-y:auto;z-index:60;margin:0!important;box-shadow:0 -8px 30px #00000040}.menu-pop .menu-close{display:block;width:100%;text-align:center;margin-top:.25rem;border-top:1px solid var(--line)}.scene-fab{display:flex}table{display:block;overflow-x:auto;max-width:100%}.big-action{font-size:1.1rem}.countdown div{min-width:70px}.countdown b{font-size:1.5rem}}.chat-panel{background:#fff;border:1px solid var(--line);border-radius:14px;padding:.75rem 1rem;margin-top:.75rem}.chat-log{max-height:200px;overflow-y:auto;margin:.5rem 0;padding-right:.25rem}.chat-msg{padding:.35rem .5rem;border-radius:10px;margin-bottom:.25rem;background:var(--cream)}.chat-msg.mine{background:var(--sky-pale)}.chat-meta{font-size:.85rem;display:inline-flex;gap:.4rem;align-items:center;flex-wrap:wrap}.chat-meta .ghost.small{min-height:24px;padding:0 .4em;font-size:.75rem}@keyframes climb{0%{transform:translate(0) rotate(0)}30%{transform:translate(8px,-46px) rotate(-8deg)}55%{transform:translate(44px,-34px) rotate(10deg)}to{transform:translate(var(--dx),var(--dy)) rotate(0)}}.fx-climb{animation:climb 2.4s cubic-bezier(.4,0,.3,1) forwards}@keyframes note{0%{opacity:0;transform:translateY(0) scale(.8)}15%{opacity:1}to{opacity:0;transform:translateY(-90px) scale(1.1)}}.fx-note{animation:note 2.4s ease-out infinite}.perform-banner{background:#1e2a5a;color:#f6efe1;padding:.6rem 1rem;border-radius:12px;margin-bottom:.5rem;font-weight:600}.reduced .fx-climb{animation-duration:.01s}.reduced .fx-note{animation:none;opacity:.9}.label-dark{paint-order:stroke;stroke:#1e2a5a;stroke-width:4px;stroke-linejoin:round}@keyframes pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.12);opacity:.75}}.fx-pulse{animation:pulse 1.8s ease-in-out infinite}@keyframes sing{0%,to{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}@keyframes dance{0%,to{transform:translateY(0) rotate(-7deg)}25%{transform:translateY(-12px) rotate(0)}50%{transform:translateY(0) rotate(7deg)}75%{transform:translateY(-12px) rotate(0)}}.fx-sing{animation:sing 1.4s ease-in-out infinite}.fx-dance{animation:dance .9s ease-in-out infinite}.reduced .fx-sing,.reduced .fx-dance{animation:none}@keyframes reactUp{0%{opacity:0;transform:translateY(0) scale(.6)}15%{opacity:1;transform:translateY(-20px) scale(1)}to{opacity:0;transform:translateY(-170px) scale(1.05)}}.fx-react{animation:reactUp 2.6s ease-out forwards}@keyframes sway{0%,to{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}.fx-sway{animation:sway 2.2s ease-in-out infinite}.reduced .fx-react{animation-duration:.01s}.reduced .fx-sway{animation:none}.reaction-row{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:.75rem}.reaction-row button{min-height:44px;padding:.3em .8em;font-size:1.2rem;background:#fff;color:var(--ink);border:2px solid var(--line)}.reaction-row button:hover{background:var(--sky-pale)}.cohort-pill{font-size:11px;font-weight:700}
