/* NƠ CONCERT V2 — map, roaming 3D, chat, experiences */
:root{--amber:#ffb066;--cream:#f6e8de;--glass:rgba(24,16,32,.93)}
body{overflow:hidden}
.app-shell{height:100dvh;min-height:580px}
.layout-v2{grid-template-columns:minmax(0,1fr) 350px;height:calc(100dvh - 71px);min-height:0}
.layout-v2 .venue{height:100%;min-height:0;background:#100a20}
#three-stage{pointer-events:auto;z-index:0}
.world-canvas,.world-css3d{position:absolute;inset:0;width:100%;height:100%}
.world-css3d{pointer-events:none;overflow:hidden}
.venue-vignette{z-index:1;pointer-events:none;background:linear-gradient(180deg,rgba(8,5,17,.5),transparent 26%,transparent 66%,rgba(5,3,13,.76))}
.fallback-scene{z-index:0}
.stage-video-screen{position:absolute;left:33%;top:37%;width:34%;aspect-ratio:16/9;background:#100c17;border:5px solid #e0a4da;box-shadow:0 0 25px #e575bd;overflow:hidden;z-index:1}
.stage-video-screen.in-world{position:relative;left:auto;top:auto;width:1000px;height:562px;aspect-ratio:auto;border:8px solid #e8b8ea;border-radius:3px;box-shadow:0 0 50px #f47ac8aa;overflow:hidden;background:#0b0a15}
#youtube-player{width:100%;height:100%;background:#070510}
#youtube-player iframe{width:100%;height:100%;border:0}
.stage-video-screen .yt-empty{z-index:1;pointer-events:none}
.venue-top{pointer-events:none;position:absolute;top:14px;right:20px;left:auto;z-index:3}
.hero-title-v2{top:6.5%;left:23%;right:2%;opacity:.74}
.hero-title-v2 .hero-eyebrow{font-size:8px}
.hero-title-v2 h1{font-size:clamp(27px,3.4vw,50px)}
.hero-title-v2 p{font-size:9px}
.stage-left-banner{display:none}
.venue-bottom{z-index:3;bottom:16px;left:17px;right:17px}
.song-info{max-width:68%}
.song-info .disk-icon{width:35px;height:35px}
.song-lines strong{font-size:12px}
.crowd-pill{font-size:10px}
.reactions-layer{z-index:5;pointer-events:none}
.map-panel{position:absolute;z-index:7;left:15px;top:15px;width:251px;background:#110f18eb;border:1px solid #5c4a51;border-radius:16px;box-shadow:0 12px 34px #08040e99;backdrop-filter:blur(10px);padding:8px 9px 7px;color:var(--cream)}
.map-heading{display:flex;justify-content:space-between;align-items:center;font:900 10px 'Be Vietnam Pro',sans-serif;letter-spacing:.065em;margin:0 2px 8px}
.map-heading span{display:flex;align-items:center;gap:7px}.map-led{width:8px;height:8px;display:inline-block;background:#ff9d35;box-shadow:0 0 11px #ff8c26;border-radius:50%}
.map-heading button{background:#2c2830;border:1px solid #645057;color:#efc9b6;border-radius:50%;width:26px;height:26px;font-size:17px}
.map-board{position:relative;aspect-ratio:1/1.1;background:#191725;border-radius:12px;border:1px solid #5d4d57;overflow:hidden;background-image:linear-gradient(#4c41551b 1px,transparent 1px),linear-gradient(90deg,#4c41551b 1px,transparent 1px);background-size:20px 20px}
.map-stage{position:absolute;top:2%;left:18%;width:64%;height:15%;border:1px solid #ffbf87;border-radius:9px;background:linear-gradient(90deg,#62372a,#2c2034,#62372a);display:flex;align-items:center;justify-content:center;flex-direction:column;font:900 11px 'Be Vietnam Pro';letter-spacing:.11em;color:#f9c5a1}
.map-stage small{font:700 6px 'Be Vietnam Pro';letter-spacing:.02em;margin-top:2px}
.map-seats{position:absolute;top:22%;left:19%;width:62%;height:42%;display:grid;grid-template-columns:1fr 1fr;gap:6px}
.map-seats div{display:grid;place-items:center;border:1px solid #7689b9;border-radius:6px;font:800 9px 'Be Vietnam Pro';color:#d7d9f5;background:repeating-radial-gradient(circle,#a0b7ebaf 0 1px,transparent 1.5px 6px) #232a44;outline:1px solid #393959;outline-offset:2px}
.map-pin{position:absolute;display:grid;place-items:center;background:#28222f;color:#ffdbcb;border:1px solid #a37b84;border-radius:7px;font:900 8px/1.2 'Be Vietnam Pro';letter-spacing:.015em;width:17%;height:14%;z-index:3;text-align:center;padding:3px;box-shadow:0 0 10px #080411}
.map-pin:hover,.map-gate:hover{filter:brightness(1.35);border-color:#ffd4ad}
.pin-hiphop{top:22%;right:1%}.pin-studio{top:22%;left:1%}.pin-workshop{top:74%;left:1%}.pin-checkin{top:74%;right:1%}
.map-gate{position:absolute;bottom:3%;left:25%;width:50%;height:10%;font:800 9px 'Be Vietnam Pro';border:1px solid #8f7c83;border-radius:7px;background:#36323e;color:#e2c1ac;z-index:4}
.map-avatars{position:absolute;inset:0;pointer-events:none;z-index:5}
.map-user{position:absolute;transform:translate(-50%,-50%);background:#a6d7e6;width:7px;height:7px;border:1px solid #eafaff;border-radius:50%;box-shadow:0 0 5px #06070a;transition:left .17s linear,top .17s linear}
.map-user.me{width:12px;height:12px;background:#ffaf3c;border:2px solid white;box-shadow:0 0 0 3px #ee9b34aa}
.map-legend{margin:6px 3px 0;display:flex;gap:9px;align-items:center;justify-content:space-between;font:700 8px 'Be Vietnam Pro';color:#bba8b9;white-space:nowrap}
.map-legend span:first-child{color:#ffc17a}.map-legend span:nth-child(2){color:#a6d7e6}
.map-panel.collapsed{width:190px}.map-panel.collapsed .map-board,.map-panel.collapsed .map-legend{display:none}
.mode-toolbar{position:absolute;bottom:86px;left:17px;z-index:5;display:flex;align-items:center;gap:7px;flex-wrap:wrap;max-width:calc(100% - 32px)}
.mode-badge{display:flex;flex-direction:column;gap:3px;background:#160e1ccf;padding:9px 11px;border:1px solid #a15e8766;border-radius:9px;backdrop-filter:blur(7px)}
.mode-badge span{font:900 10px 'Be Vietnam Pro';letter-spacing:.08em;color:#f3c3df}.mode-badge small{font-size:9px;color:#cebacd}
.mode-toolbar button{border:1px solid #ac779f;color:#ffdef0;background:#291a35eb;border-radius:9px;padding:10px;font:800 10px 'Be Vietnam Pro';white-space:nowrap}
.zone-interact{position:absolute;left:50%;bottom:165px;transform:translateX(-50%);z-index:10;background:#211623ed;border:1px solid #ffbf78;border-radius:14px;padding:12px 16px;text-align:center;min-width:250px;box-shadow:0 12px 30px #07040a88}
.zone-interact[hidden]{display:none}
.zone-interact span{display:block;color:#efd5cb;font-size:11px;margin-bottom:9px}
.zone-interact button,.primary-action{border:0;border-radius:9px;padding:12px 16px;font-weight:900;letter-spacing:.02em;background:#ff9b42;color:#271522}
.zone-interact button:hover,.primary-action:hover:not(:disabled){background:#ffc16f}
.sidebar-v2{height:100%;min-height:0;background:linear-gradient(150deg,#151019,#17111c 56%,#271b18);border-left:1px solid #826150a1;color:#ffe8d7;z-index:9;overflow:hidden}
.chat-panel-heading{display:flex;align-items:center;justify-content:space-between;padding:16px 15px 12px;gap:8px;flex:none}
.chat-kicker{font:800 8px 'Be Vietnam Pro';color:#c791a4;letter-spacing:.19em}.chat-panel-heading h2{font:900 16px 'Be Vietnam Pro';margin:5px 0 0;letter-spacing:.11em;color:#ead0bc}
.chat-panel-heading button{background:#29242c;border:1px solid #65545a;color:#f1d6c4;border-radius:50%;font-size:23px;width:36px;height:36px}
.playing-card{margin:0 13px 9px;background:linear-gradient(115deg,#4e2619,#281b1b);border:1px solid #bf632c;border-radius:13px;padding:10px 12px;display:flex;flex-direction:column;gap:5px;min-height:103px;flex:none}
.playing-card-kicker{font:900 10px 'Be Vietnam Pro';color:#ffb264;letter-spacing:.12em}.playing-card strong{font-size:13px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#fff0df}
.playing-card #stream-indicator{font-size:9px;color:#d9ad9a}
.playing-card .music-progress{height:4px;margin:0;background:#604547;border-radius:5px;overflow:hidden}.playing-card #music-progress-bar{height:100%;background:#ffb15b}
.playing-bottom{display:flex;justify-content:space-between;gap:7px;color:#e4b89f}.playing-bottom small{font:700 9px 'Be Vietnam Pro'}
.chat-section-v2{flex:1;min-height:50px;padding:0 13px;overflow:hidden}
.chat-section-v2 .chat-messages{height:100%;min-height:0;overflow-y:auto;display:flex;gap:7px;padding:8px 1px}
.sidebar-v2 .chat-row{gap:5px;align-items:flex-start;font-size:11px;line-height:1.46}
.sidebar-v2 .chat-dot{width:18px;height:18px;font-size:9px;background:#ad7654!important;color:#fff4e5}
.sidebar-v2 .chat-content b{display:inline;font:800 11px 'Be Vietnam Pro';margin-right:5px;color:#ffab58}
.sidebar-v2 .chat-content span{display:inline;color:#e9d9c3;overflow-wrap:anywhere}
.chat-side-actions{padding:8px 12px 12px;border-top:1px solid #57414261;flex:none}
.sidebar-v2 .reaction-section{padding:0 0 8px}
.sidebar-v2 .reaction-section #reaction-buttons{display:flex;gap:4px}
.sidebar-v2 .reaction-section button{background:#352836;border:1px solid #594154;border-radius:8px;min-width:38px;padding:6px 3px}
.sidebar-v2 .chat-form{margin:0;display:flex;gap:7px}
.sidebar-v2 .chat-form input{background:#28201e;border:1px solid #6c5549;color:#fff4e9;padding:11px;border-radius:12px;min-width:0;font-size:11px}
.sidebar-v2 .chat-form button{width:56px;background:#ff962e;color:#281525;border-radius:12px;font:900 11px 'Be Vietnam Pro'}
.dj-section-v2{padding:11px 13px 8px;border-top:1px solid #785e5880;flex:none;background:#17121bcc}
.dj-title{font:900 10px 'Be Vietnam Pro';letter-spacing:.11em;color:#e5c7b9;display:flex;align-items:center;gap:8px}.dj-title span{background:#422b42;border-radius:5px;padding:3px 7px;color:#ffb87f;margin-left:auto}
.dj-section-v2 .music-actions{padding:0}
.dj-section-v2 .player-controls{margin:10px 0 7px;justify-content:center;gap:8px}
.dj-section-v2 #enable-sound{max-width:none;flex:1;font-size:10px;padding:10px 5px}
.dj-section-v2 .control-circle{width:34px;height:34px;flex-shrink:0}
.dj-section-v2 .dj-link-row{display:flex;margin-top:5px}
.dj-section-v2 .dj-link-row input{min-width:0;background:#281e29;color:#fff}
.dj-section-v2 .helper{font-size:9px;margin:5px 0;color:#bba1aa;line-height:1.5}
.sidebar-v2 .side-footer{border:0;margin:7px 0 0;padding:0;display:flex;gap:7px}
.sidebar-v2 .side-footer button{font:800 9px 'Be Vietnam Pro';color:#eac9d2;background:#382638;border:1px solid #745571;padding:7px;border-radius:7px;flex:1}
.user-list-v2{display:none}
.sidebar-v2.collapsed{width:53px;position:absolute;right:0;top:70px;bottom:0;height:calc(100dvh - 70px);z-index:10}
.sidebar-v2.collapsed > *:not(.chat-panel-heading){display:none}.sidebar-v2.collapsed .chat-panel-heading{padding:10px 6px}.sidebar-v2.collapsed .chat-panel-heading div{display:none}
.sidebar-v2.collapsed .chat-panel-heading button{display:block}
.welcome-card{width:min(950px,100%)}.mode-options{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:6px 0 13px}
.mode-choice{border:1px solid #77546d;background:#2f223c;border-radius:10px;padding:9px 7px;text-align:left;color:#f9e3f4}
.mode-choice.selected{border-color:#ff99d0;box-shadow:0 0 0 2px #f286c02e;background:#4b2a4c}
.mode-choice strong{font-size:10px;display:block}.mode-choice small{display:block;font-size:8px;color:#c8a7bc;margin-top:3px}
.mode-input-label{margin-top:9px}
.experience-overlay[hidden]{display:none}
.experience-overlay{position:fixed;inset:0;z-index:31;display:grid;place-items:center;padding:14px}
.experience-shade{position:absolute;inset:0;background:#09060ad9;backdrop-filter:blur(8px)}
.experience-card{position:relative;border:1px solid #a16d82;background:linear-gradient(135deg,#211628,#2d202c);border-radius:18px;padding:22px 24px;width:min(980px,100%);max-height:93dvh;overflow:auto;box-shadow:0 25px 90px #000c;color:#fbe8e4}
.experience-heading{display:flex;align-items:center;justify-content:space-between}
.experience-heading span,.overline{font:900 10px 'Be Vietnam Pro';letter-spacing:.15em;color:#ffb49c}
.experience-heading button{width:39px;height:39px;border-radius:50%;background:#483745;color:#ffe4eb;border:1px solid #916e89}
.experience-card h2{font:900 clamp(25px,3vw,42px) 'Be Vietnam Pro';margin:8px 0 14px;color:#fff5f7;letter-spacing:.025em}
.experience-card h3{font:900 18px 'Be Vietnam Pro';margin:9px 0}
.experience-note{font-size:12px;line-height:1.7;color:#c9b4c8;margin:0 0 16px}
.experience-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.directory-card{text-align:left;background:#3b2b40;border:1px solid #9b6c86;border-radius:13px;padding:24px;min-height:120px;color:#ffe6df}
.directory-card b{font:900 18px 'Be Vietnam Pro';display:block}.directory-card span{font-size:11px;line-height:1.5;color:#ddbbce;display:block;margin-top:8px}
.merch-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-bottom:15px}
.merch-small{background:#32293a;border:1px solid #7c667e;border-radius:11px;padding:10px 7px;color:#f1dbe4;text-align:center}
.merch-small.active{border-color:#ffac75;box-shadow:0 0 0 2px #ffb4782b}
.merch-small strong{font-size:10px;display:block;margin-top:6px}
.merch-thumb{font-size:30px;display:grid;place-items:center;height:45px}
.merch-preview{display:grid;grid-template-columns: minmax(210px,1fr) 1fr;gap:20px;background:#201825;padding:16px;border-radius:13px;border:1px solid #5b4563}
.merch-hero-art{display:grid;place-items:center;min-height:290px;border-radius:9px;background:radial-gradient(circle at center,#78576c,#352437 75%)}
.merch-shape{display:grid;place-items:center;text-align:center;white-space:pre-line;font:900 42px 'Be Vietnam Pro';letter-spacing:.08em;color:#ffe3e7;text-shadow:0 2px #371b35}
.merch-hero-art.merch-shirt .merch-shape{clip-path:polygon(25% 0,40% 0,48% 9%,52% 9%,60% 0,75% 0,100% 18%,84% 40%,75% 31%,75% 100%,25% 100%,25% 31%,16% 40%,0 18%);width:240px;height:240px;background:#211b28;font-size:28px;box-shadow:0 10px 12px black}
.merch-hero-art.merch-cap .merch-shape{width:210px;height:130px;background:#352031;border-radius:55% 55% 12% 12%;font-size:43px;border-bottom:16px solid #b86d87}
.merch-hero-art.merch-sticker .merch-shape{width:210px;height:175px;background:#e6b4d4;color:#5c2868;border:14px dashed #fff1ea;border-radius:19px;font-size:38px}
.merch-copy h3{font-size:26px;margin:11px 0}.merch-copy p{font-size:12px;line-height:1.7;color:#cbb4c4}
.merch-copy button{margin-top:13px}
.primary-action:disabled{background:#66505d;color:#e2c4d5}
.muted{color:#c1a8b7;font-size:11px;line-height:1.6;display:block;margin-top:11px}
.studio-layout{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}
.studio-art{min-height:330px;background:linear-gradient(120deg,#212833,#14151e);border:9px solid #705a65;border-radius:13px;padding:20px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:inset 0 0 60px #050307}
.studio-led{font:900 12px 'Be Vietnam Pro';color:#9ef3ca;letter-spacing:.12em}.studio-monitors{display:flex;justify-content:space-between}
.studio-monitors i{display:block;width:90px;height:120px;background:radial-gradient(circle at center,#090d10 0 14px,#55636b 16px 19px,#0a0c10 21px 33px,#454951 35px 40px,#0a1219 41px);border:7px solid #10161b;border-radius:8px}
.studio-desk{padding:14px 6px;background:#2d2c34;border:5px solid #77717a;color:#c3a3af;text-align:center}.studio-keys{background:#ecebe7;color:#1d1722;padding:8px;font-size:24px;letter-spacing:6px;overflow:hidden}
.demo-list{display:flex;flex-direction:column;gap:8px}.demo-row{background:#30283a;border:1px solid #70576d;border-radius:9px;padding:12px;display:flex;flex-direction:column;gap:7px;font-size:12px}.demo-row audio{width:100%;height:34px}
.workshop-layout{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(210px,1fr);gap:20px}
.bow-palette,.sticker-row{display:flex;gap:8px;margin:12px 0;flex-wrap:wrap}
.bow-swatch{height:30px;width:30px;border-radius:50%;border:2px solid #4d3a57}.bow-swatch.active{outline:2px solid white;outline-offset:2px}
.bow-canvas{width:100%;height:auto;aspect-ratio:560/310;border:1px solid #8a6681;border-radius:11px;display:block;touch-action:none;cursor:crosshair}
.bow-sticker{background:#3a293f;border:1px solid #695075;border-radius:9px;padding:7px 10px;font-size:18px}.bow-sticker.active{outline:2px solid #ffa9d7}
.workshop-buttons{display:flex;gap:8px;margin-top:13px;flex-wrap:wrap}.secondary-action{border:1px solid #97718e;background:#3e2c42;color:#ffebf3;border-radius:9px;padding:12px 14px;font-weight:800}
.workshop-gallery{background:#291d2f;padding:12px;border:1px solid #6a4664;border-radius:12px;min-height:280px}
.workshop-gallery h3{font-size:14px;margin:3px 0 12px}.bow-gallery{max-height:455px;overflow-y:auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.gallery-card{background:#442f47;border:1px solid #8b607b;border-radius:8px;overflow:hidden}.gallery-bow{display:block;width:100%;height:auto}.gallery-name{display:block;padding:5px;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.photo-wall{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px;background:#392a38;padding:17px;border-radius:12px}
.photo-frame{background:#cba47c;padding:9px;box-shadow:0 5px 17px #0a050e9a;text-align:center}.photo-art{height:250px;background:radial-gradient(circle,#885974,#3d2b53);display:grid;place-items:center;color:#ffe4d7;font:900 24px 'Be Vietnam Pro';overflow:hidden}.photo-art img{width:100%;height:100%;object-fit:cover}.photo-frame small{color:#3c2631;font:900 9px 'Be Vietnam Pro';display:block;margin-top:7px}
.checkin-footer{display:flex;align-items:center;gap:19px;margin-top:17px;justify-content:space-between}.checkin-footer p{max-width:590px;font-size:11px;line-height:1.7;color:#d9bed0}
@media(max-width:1130px){.layout-v2{grid-template-columns:minmax(0,1fr) 315px}.map-panel{width:205px}.hero-title-v2{display:none}.mode-badge small{max-width:245px}}
@media(max-width:760px){body{overflow:auto}.app-shell{height:auto;min-height:100vh}.layout-v2{display:flex;flex-direction:column;height:auto}.layout-v2 .venue{height:65dvh;min-height:390px;flex:none}.layout-v2 .sidebar-v2{height:530px;flex:none;overflow:hidden}.map-panel{width:168px;top:8px;left:8px;padding:6px}.map-heading{font-size:8px}.map-seats div,.map-pin{font-size:6px}.venue-top{display:none}.mode-toolbar{bottom:80px;gap:3px;left:8px}.mode-badge{padding:6px}.mode-badge span{font-size:8px}.mode-badge small{font-size:7px;max-width:145px}.mode-toolbar button{font-size:8px;padding:7px}.venue-bottom{left:8px;right:8px;bottom:7px}.crowd-pill span:last-child{display:none}.hero-title-v2{display:none}.zone-interact{bottom:144px;min-width:200px;padding:9px}.experience-card{padding:15px;max-height:96dvh}.experience-grid,.studio-layout,.workshop-layout{grid-template-columns:1fr}.merch-preview{grid-template-columns:1fr}.merch-hero-art{min-height:220px}.photo-art{height:140px}.checkin-footer{flex-wrap:wrap}.sidebar-v2.collapsed{position:relative;top:0;height:50px;width:100%}.chat-section-v2{min-height:75px}}
@media(max-width:500px){.welcome-columns{display:block}.mode-options{grid-template-columns:1fr}.map-legend{font-size:7px}.merch-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.merch-small strong{font-size:8px}.photo-wall{gap:7px;padding:6px}.photo-frame{padding:4px}.photo-art{height:108px;font-size:14px}.photo-frame small{font-size:6px}}

/* Final polish */
.brand,.brand-name,.brand-name span,.brand-symbol{color:#fff7fe}
.fallback-scene .singer{transform:scale(.65);transform-origin:center bottom}
.layout-v2.chat-collapsed{grid-template-columns:minmax(0,1fr) 53px}
.sidebar-v2.collapsed{position:relative;top:auto;right:auto;bottom:auto;width:53px;height:100%}
@media(max-width:760px){.sidebar-v2.collapsed{width:100%;height:50px}.layout-v2.chat-collapsed{display:flex}}
.welcome-copy h2{color:#fff4fc}
.welcome-copy h2 em{color:#ff9dd2}
.brand-name span{color:#ff8cba}

.gallery-more{width:100%;margin-top:12px;font-size:10px}
