[hidden]{display:none!important}
.gallery-shell{max-width:1190px;margin:0 auto;padding:30px 34px 40px}
.gallery-top{display:flex;align-items:center;justify-content:space-between;gap:24px;border-bottom:1px solid #b58a5055;padding-bottom:20px}
.gallery-top h1{font:400 clamp(28px,3.2vw,44px)/1.3 KaiTi,STKaiti,serif;color:#fff1cf;margin:7px 0 0;letter-spacing:2px}
.gallery-lead{color:#e2c9a4;line-height:1.8;margin:22px 0}
.stand-tabs{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}
.stand-tabs button{display:flex;flex-direction:column;gap:6px;padding:15px 12px;background:#ffffff08;border:1px solid #b4895055;border-radius:9px;color:#e4c9a5;text-align:left}
.stand-tabs button.active{background:#8f3427;border-color:#eac378;color:#fff4d6;box-shadow:inset 0 0 0 1px #eac37833}
.stand-tabs button span{font-weight:700;font-size:17px}.stand-tabs small{opacity:.8}
.gallery-section-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:26px 0 17px}
.gallery-section-head h2{font-size:23px;margin:0 0 5px;color:#fff0ce}.gallery-section-head p{font-size:13px;color:#cdb695;margin:0}
.gallery-section-head button:disabled{opacity:.45;cursor:wait}
.stand-slots{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.work-slot{margin:0;background:#eed8b0;border:1px solid #d7b37c;border-radius:8px;overflow:hidden;color:#573c29;box-shadow:0 6px 20px #0002}
.slot-picture{aspect-ratio:4/3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:linear-gradient(140deg,#f9edda,#ead2a8);color:#96734f}
.slot-picture img{width:100%;height:100%;object-fit:contain;background:#fbf4e8}.empty-slot-mark{font:34px Georgia,serif;opacity:.45}
.work-slot figcaption{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;font-size:13px}
.work-slot figcaption button{background:none;border:0;border-bottom:1px solid #9b6754;color:#8c3c2d;padding:2px;min-width:36px}
.gallery-note{margin-top:24px;padding-top:18px;border-top:1px solid #b58a503d;color:#cbb08e;font-size:13px;line-height:1.8}.gallery-note strong{color:#e2c393}.gallery-note p{margin:3px 0}
#festivalStands{position:fixed;inset:0;pointer-events:none;z-index:7}
.festival-stand{position:absolute;pointer-events:auto;transform:translate(-50%,-50%);width:clamp(166px,19vw,270px);padding:0 12px 24px;border:0;background:none;color:#fff0c3;filter:drop-shadow(0 14px 14px #16070077);transition:filter .2s}
.festival-stand:hover{filter:drop-shadow(0 0 16px #ffc568aa)}
.stand-crown{display:block;margin:0 10px;padding:9px 4px;background:linear-gradient(#704524,#402514);border:1px solid #edbe6a;border-radius:20px 20px 0 0;font-size:13px;letter-spacing:4px}
.stand-picture{display:flex;align-items:center;justify-content:center;aspect-ratio:4/3;background:#efdbb6;border:8px solid #703c21;outline:2px solid #d8b069;box-shadow:inset 0 0 28px #9b551b44;overflow:hidden}
.stand-picture img{width:100%;height:100%;object-fit:contain}.stand-placeholder{color:#966d45;font:45px Georgia,serif}.stand-placeholder small{display:block;font:12px/1.6 sans-serif;margin:8px 0}
.stand-plaque{display:block;position:relative;background:linear-gradient(#78442b,#3c2216);border:1px solid #b48a4f;margin:5px 10px 0;padding:9px 2px;font-size:14px}.stand-count{display:block;font-size:11px;margin-top:4px;color:#dabc88}
.stand-base{display:block;margin:0 -12px;height:17px;border:1px solid #be9a63;border-radius:50% 50% 8px 8px;background:linear-gradient(#d6b783,#664225);box-shadow:0 10px 10px #16090077}
#festivalStandNav{position:fixed;left:50%;transform:translateX(-50%);bottom:103px;z-index:17;display:flex;gap:6px;padding:6px;border-radius:12px;background:#211009db;border:1px solid #bf96585c}
#festivalStandNav button{border:0;background:transparent;color:#efdab5;padding:5px 9px;font-size:12px;white-space:nowrap}#festivalStandNav button:hover{background:#7d3527;border-radius:7px}#festivalStandNav button span{display:inline-grid;place-items:center;width:20px;height:20px;border:1px solid #b68b4c;border-radius:50%;margin-right:5px}#festivalStandNav small{color:#c3a16d;margin-left:4px}
.festival-scene .view-tools{bottom:153px}.festival-scene .art-stage{display:none!important}
.reply-companion{display:grid;grid-template-columns:90px 1fr;align-items:center;gap:12px;background:#fff4dc;border:1px solid #dbc08e;border-radius:15px;padding:10px;margin:12px 0}
.reply-companion img{width:90px;max-height:120px;object-fit:contain;filter:drop-shadow(0 5px 5px #95502122)}.reply-companion .reply-label{font-size:12px;color:#9a5735;margin-bottom:5px}.reply-companion p{margin:0;line-height:1.65;color:#4e3022}
body.clean-screen .topbar,body.clean-screen #hotspots,body.clean-screen .scene-nav,body.clean-screen .view-tools,body.clean-screen .drag-hint,body.clean-screen #festivalStandNav,body.clean-screen .workshop-dock{display:none!important}
#exitClean{position:fixed;right:16px;bottom:16px;z-index:90;border:1px solid #d9b37788;border-radius:999px;padding:9px 16px;background:#291209a6;color:#ffedc8;font-size:12px;opacity:.65}#exitClean:hover{opacity:1}
@media(max-width:900px){.gallery-shell{padding:20px}.stand-tabs{grid-template-columns:repeat(3,1fr)}.stand-slots{gap:10px}.gallery-top{gap:12px}.festival-stand{width:190px}#festivalStandNav{bottom:85px;max-width:calc(100vw - 20px);overflow:auto}.festival-scene .view-tools{bottom:135px}.gallery-section-head{align-items:flex-start}.gallery-section-head .primary-btn{font-size:13px}.top-actions{flex-wrap:wrap;justify-content:flex-end}.topbar{gap:6px}.top-actions .glass-btn{font-size:12px;padding:7px 9px}}
@media(max-width:580px){.stand-slots{grid-template-columns:repeat(2,1fr)}.gallery-top h1{font-size:27px}.gallery-top .glass-btn{font-size:12px;padding:8px}.gallery-shell{padding:17px}.stand-tabs button{padding:11px}.stand-tabs button span{font-size:15px}.gallery-section-head{flex-wrap:wrap}.reply-companion{grid-template-columns:65px 1fr}.reply-companion img{width:65px}.festival-stand{width:170px}}

/* Artwork is drawn into the panorama paper itself. These are invisible hit areas,
   with small empty-state prompts; no second frame, crown or floating pedestal. */
.festival-stand{transform:none;padding:0;border:0;border-radius:0;background:transparent;filter:none!important;box-shadow:none;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:none;color:#714922}
.festival-stand:hover{background:#fff9e51a}
.in-frame-hint{display:block;font-size:clamp(11px,1.2vw,15px);line-height:1.7;letter-spacing:1px;text-align:center;opacity:.7;text-shadow:0 1px 2px #fff6d4}
.in-frame-hint small{display:block;font-size:11px;letter-spacing:0}.has-artwork .in-frame-hint{opacity:0}.has-artwork:hover .in-frame-hint{opacity:1;background:#fff2cecf;padding:6px 10px;border-radius:5px}
body.clean-screen .in-frame-hint{display:none!important}
#workshopMascot{position:fixed;z-index:9;transform-origin:50% 100%;border:0;background:none;padding:0;cursor:pointer;filter:drop-shadow(0 10px 8px #381d0755);touch-action:manipulation}
#workshopMascot img{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none}
#workshopMascot span{position:absolute;left:50%;bottom:-12px;transform:translateX(-50%);white-space:nowrap;color:#ffe9bc;font-size:12px;letter-spacing:1px;padding:6px 12px;border:1px solid #d9b478aa;border-radius:999px;background:#512817dd}
#workshopMascot:hover{filter:drop-shadow(0 0 14px #ffce7588)}body.clean-screen #workshopMascot span{display:none}
