/* Camera and object interaction stay inside the actual room canvas. */
.campus-scene-world{position:absolute;inset:0;transition:transform .85s cubic-bezier(.22,.8,.24,1);will-change:transform}
.campus-room-art.is-object-focused{height:calc(100dvh - 32px);min-height:620px;max-height:820px;aspect-ratio:auto;isolation:isolate}
.campus-room-layout:has(.is-object-focused){grid-template-columns:1fr}
.campus-room-layout:has(.is-object-focused)>.campus-room-identity{display:none}
.campus-editor-grid:has(.is-object-focused){grid-template-columns:1fr}
.campus-editor-grid:has(.is-object-focused)>.campus-collection-dock{display:none}
.is-object-focused .campus-scene-world{pointer-events:none}
.is-object-focused .is-focus-source{visibility:hidden}.is-object-focused .campus-object-hover{display:none!important}.is-object-focused .campus-scene-items{filter:brightness(.7) saturate(.85)}
.is-object-focused>.campus-scene-hint,.is-object-focused>.campus-scene-edit,.is-object-focused>.campus-scene-caption,.is-object-focused>.campus-open-editor,.is-object-focused>.campus-object-toolbar{display:none!important}
html body .campus-room-art.is-object-focused>.campus-open-editor{display:none!important}
.room-focus-overlay{position:absolute;inset:0;z-index:23000;padding:20px 28px 12px;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;color:#fff3d3;background:linear-gradient(#102a3a99,transparent 22%,transparent 55%,#102b3bc9);animation:focusEnter .6s ease-out;overflow:hidden;container-type:inline-size}
.room-focus-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;position:relative;z-index:4;text-shadow:0 2px 7px #001b2acc}
.room-focus-heading h3{font:700 clamp(20px,2.4vw,30px)/1.15 Georgia;margin:5px 0;color:#fff3d3!important}
.room-focus-heading>div>span{font:10px/1.4 system-ui;letter-spacing:2px;color:#d3e6dc}
.room-focus-overlay button.soft-btn{display:inline-flex;gap:7px;align-items:center;justify-content:center;min-height:40px;color:#fff3d3!important;background:linear-gradient(#ebfbff44,#143f4cd9)!important;border:1px solid #d3bc83!important;box-shadow:inset 0 1px 2px #fff9,0 3px 7px #03233755!important;text-shadow:0 1px 2px #001b2a;border-radius:999px!important;padding:8px 16px!important;font:600 14px/1.2 Georgia;white-space:normal}
.room-focus-overlay button.soft-btn svg{width:19px;height:19px;flex-shrink:0}
.room-focus-overlay button:disabled{opacity:.48;cursor:default}
.room-focus-overlay button:focus-visible{outline:2px solid #a1fff0!important;outline-offset:4px}
.room-focus-stage{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:0;min-width:0;max-width:100%;padding:12px 4px 4px;isolation:isolate}
.room-focus-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:9px;position:relative;z-index:4;margin:12px 0 0}
.room-focus-status{min-height:21px;text-align:center;font:13px/1.45 system-ui;color:#fff3d3!important;margin:8px auto 0;max-width:650px;text-shadow:0 2px 5px #022736}
.focus-caption{color:#fff3d3!important;text-align:center;font:13px/1.5 system-ui;max-width:600px;margin:12px auto 0;text-shadow:0 2px 5px #022736}
.focus-game-hud{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:14px;width:min(100%,680px);font:13px/1.5 system-ui;padding:8px 16px;border-radius:18px;background:#092c40c9;border:1px solid #d8bf7b66;box-shadow:inset 0 1px #ffffff26,0 8px 20px #001c2822}
.focus-game-hud b{font-size:16px;color:#f8e6b5}
.focus-level-track{display:flex;gap:5px}.focus-level-track i{display:grid;place-items:center;width:25px;height:25px;border-radius:50%;font:12px system-ui;border:1px solid #b8cfc766;color:#adc6ca}
.focus-level-track i.current{border-color:#f2dd8e;box-shadow:0 0 10px #e0bd6233;color:#fff4cc}.focus-level-track i.done{background:#d6b570;color:#203f4b;border-color:#ffefb2}
.focus-alchemy-lab{display:flex;align-items:center;justify-content:center;gap:34px;margin:12px 0 0;width:100%;min-height:165px}
.focus-recipe{display:flex;flex-direction:column;align-items:center;color:#fff4d3;width:112px;text-align:center;text-shadow:0 2px 5px #062b3b}.focus-recipe small{font:11px system-ui}.focus-recipe .focus-potion{width:72px;height:92px}.focus-recipe strong{font:600 15px Georgia}
.focus-recipe-note{width:175px;font:14px/1.5 Georgia;color:#fff4d3;text-shadow:0 2px 5px #062b3b}
.focus-cauldron{position:relative;width:200px;height:155px;border-radius:20% 20% 46% 46%;border:3px solid #b7dbe0aa;box-shadow:inset 9px 4px 14px #eaffff77,inset -8px -5px 18px #092c4680,0 15px 12px #00233e40;background:linear-gradient(105deg,#c1f7fa77,#c1f7fa11 29%,#c1f7fa00 70%,#ebffff77);isolation:isolate;transform:perspective(700px) rotateX(-6deg)}
.cauldron-rim{position:absolute;inset:-7px -3px auto;height:20px;border-radius:50%;border:3px solid #dcf8f3bb;box-shadow:0 2px #577e8280,inset 0 3px #faffff99;background:#b6eff322;z-index:3}
.cauldron-liquid{position:absolute;inset:35% 5% 5%;border-radius:50% 50% 45% 45% /12% 12% 60% 60%;background:radial-gradient(ellipse at 30% 25%,#ffffff77,transparent 40%),var(--brew);box-shadow:inset 0 5px 12px #fff6,inset 0 -10px 20px #15394d33;transition:background .6s;animation:brewSway 3s ease-in-out infinite;z-index:-1}
.cauldron-spark{position:absolute;left:10%;top:12%;height:50%;width:7%;border-radius:50%;transform:rotate(8deg);background:linear-gradient(#fff9,#fff0)}
.focus-cauldron>span:last-child{position:absolute;left:50%;top:57%;transform:translate(-50%,-50%);font:38px Georgia;text-shadow:0 2px 8px #13526255;color:#fff8de}
.focus-cauldron.is-solved{box-shadow:inset 9px 4px 14px #eaffff77,inset -8px -5px 18px #092c4680,0 0 40px #a2ffe290}
.focus-vials{display:flex;align-items:end;justify-content:center;gap:20px;max-width:100%;margin-top:5px}
html body .focus-vial{display:flex;flex-direction:column;align-items:center;justify-content:end;background:none!important;border:0!important;box-shadow:none!important;padding:0!important;width:90px;min-height:130px;position:relative;cursor:pointer;color:#fff4d3!important;transition:transform .3s;filter:drop-shadow(0 6px 7px #061f3644)}
.focus-vial:before,.focus-vial:after{display:none!important}.focus-vial .focus-potion{width:80px;height:105px;transition:transform .3s,filter .3s}
.focus-vial:hover .focus-potion,.focus-vial.is-selected .focus-potion{transform:translateY(-6px) rotate(-5deg);filter:drop-shadow(0 0 8px #b4ffe3)}
.focus-vial span{font:13px Georgia;text-shadow:0 2px 4px #062b3b}.focus-vial.is-selected span{color:#9fffe6}
.vial-bubble{fill:#fff9;animation:vialRise 3s ease-in-out infinite}.vial-bubble.vb2{animation-delay:.7s}.vial-bubble.vb3{animation-delay:1.4s}
.focus-time-track{width:min(100%,480px);height:5px;overflow:hidden;border-radius:9px;background:#def1ea33;margin:14px auto 0}.focus-time-track i{display:block;height:100%;background:linear-gradient(90deg,#63d1c6,#f5d48d);transition:width .2s linear}
.focus-star-lens{position:relative;isolation:isolate;width:min(100%,600px);height:340px;margin:14px 0 0;border-radius:50%;overflow:hidden;border:5px solid #c6ab70;outline:1px solid #f9e6ae;box-shadow:inset 0 0 55px #000d,0 8px 25px #03182777;background:radial-gradient(ellipse at 30% 32%,#59679499,transparent 50%),radial-gradient(ellipse at 65% 70%,#764c9866,transparent 55%),#041b32}
.focus-star-lens:before{content:'';position:absolute;inset:0;background-image:radial-gradient(circle,#d7edffcc 1px,transparent 1.5px),radial-gradient(circle,#fbe9a9aa 1px,transparent 1.5px);background-size:49px 61px,79px 37px;background-position:20px 12px,13px 40px;opacity:.6}
.focus-nebula{position:absolute;inset:5%;border-radius:50%;background:conic-gradient(from 70deg,#729dcd00,#7a5cba22,#aadce633,#7a5cba00);filter:blur(20px);animation:skyOrbit 50s linear infinite}
.focus-star-lens>svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.focus-star-lens>svg line{stroke:#a6f7ea;stroke-width:.7;filter:drop-shadow(0 0 2px #fff);stroke-linecap:round}
html body .focus-sky-star{position:absolute;width:46px;height:46px;transform:translate(-50%,-50%);display:grid;place-items:center;border:0!important;box-shadow:none!important;background:none!important;padding:0!important;opacity:1!important;color:#e5f2ff!important;z-index:3;cursor:pointer}
.focus-sky-star:before,.focus-sky-star:after{display:none!important}.focus-sky-star i{display:block;width:16px;height:16px;background:#b0d4e7;clip-path:polygon(50% 0,60% 38%,100% 50%,60% 60%,50% 100%,40% 60%,0 50%,40% 40%);filter:drop-shadow(0 0 6px #eaffff);transition:transform .25s,background .25s;animation:skyTwinkle 4s var(--twinkle) ease-in-out infinite}
.focus-sky-star small{position:absolute;top:34px;font:10px system-ui;color:#b4cfe5}.focus-sky-star.is-flashing i,.focus-sky-star.is-found i{background:#fff7c9;transform:scale(1.8);animation:none}.focus-sky-star.is-flashing{filter:drop-shadow(0 0 12px #fffbd5) drop-shadow(0 0 24px #fffbd5)}
.focus-star-message{position:absolute;bottom:8%;left:10%;width:80%;text-align:center;color:#f5e7be;font:italic 16px Georgia;pointer-events:none}.focus-comet{position:absolute;top:50%;left:50%;width:8px;height:8px;border-radius:50%;background:#fff4c3;box-shadow:0 0 14px 6px #e6c97944;transition:left .7s ease-in-out,top .7s ease-in-out}.focus-comet:after{content:'';position:absolute;right:3px;top:2px;width:45px;height:3px;background:linear-gradient(90deg,transparent,#c0eef5);transform:rotate(-20deg);transform-origin:right}
.focus-dragon-world{position:relative;width:min(90%,390px);aspect-ratio:1;max-height:390px;cursor:grab;touch-action:manipulation;filter:drop-shadow(0 15px 12px #07243855)}
.focus-dragon-atlas{position:absolute;inset:0;background-image:url('/static/student/assets/campus-v15/room-dragon-idle-atlas-clean.png');background-size:400% 200%;background-position:0 100%;background-repeat:no-repeat}
.focus-dragon-world.mood-awake .focus-dragon-atlas{background-position:0 0;animation:dragonBlink 5.5s step-end infinite}
.focus-dragon-world.mood-happy .focus-dragon-atlas{background-position:0 0;animation:dragonPet 2.2s step-end 2}
.focus-dragon-sleep{position:absolute;top:21%;right:16%;font:italic 25px Georgia;animation:dragonDream 3.8s ease-in-out infinite;color:#f1e7c9}.focus-dragon-sleep i{font-size:17px;position:absolute;left:18px;top:-15px}
.focus-dragon-world:not(.mood-sleep) .focus-dragon-sleep{display:none}.focus-dragon-hearts{position:absolute;left:37%;top:5%;font-size:25px;display:none;color:#ffd7e8;letter-spacing:12px}.mood-happy .focus-dragon-hearts{display:block;animation:dragonDream 2.5s ease-in-out infinite}.focus-dragon-hearts i{font-style:normal;display:inline-block;transform:translateY(-10px)}
.focus-living-art{width:min(82%,580px);position:relative;filter:drop-shadow(0 12px 18px #07243877);transition:filter 1.4s}.focus-living-art .campus-item-art{width:100%;max-height:360px;object-fit:contain}.focus-living-art.is-day{filter:drop-shadow(0 12px 18px #07243877) sepia(.3) brightness(1.3)}.focus-living-art .room-living-thumb>i{display:none}
.focus-picture-glow{position:absolute;inset:18% 14% 20%;background:radial-gradient(ellipse at 62% 20%,#ffe8aa44,transparent 30%);mix-blend-mode:screen;pointer-events:none;animation:pictureGlow 5s ease-in-out infinite}
.focus-picture-firefly{position:absolute;top:40%;left:35%;width:4px;height:4px;border-radius:50%;background:#f5ffbb;box-shadow:0 0 12px 4px #eaf99e77;animation:pictureFly 8s ease-in-out infinite}.focus-picture-firefly.second{animation-delay:-4s;left:45%;top:65%}.focus-picture-stars{position:absolute;left:25%;top:21%;width:50%;text-align:center;color:#ffffd9;letter-spacing:18px;text-shadow:0 0 7px white;animation:skyTwinkle 3s infinite}.is-day .focus-picture-stars{opacity:0}
html body button.focus-hourglass{position:relative;display:block;width:300px;max-width:100%;aspect-ratio:1;height:auto;padding:0!important;border:0!important;border-radius:0!important;background:none!important;box-shadow:none!important;cursor:pointer;filter:drop-shadow(0 12px 15px #071b3277);transform-origin:center}
.focus-hourglass:before,.focus-hourglass:after{display:none!important}.focus-hourglass>img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;z-index:2;pointer-events:none}.focus-hourglass.is-inverted>img{transform:rotate(180deg)}.focus-hourglass.is-flipping{animation:hourglassTurn .85s cubic-bezier(.4,0,.3,1) both}
.focus-sand-top,.focus-sand-bottom{position:absolute;left:36%;width:28%;z-index:1;background:radial-gradient(circle,#ffe7a0 0 1px,transparent 1.2px) 0 0/3px 3px,linear-gradient(100deg,#a66b24,#f5c96d 45%,#c08a33);transform-origin:center bottom;transition:transform .1s linear;pointer-events:none}
.focus-sand-top{top:26%;height:22%;clip-path:polygon(0 0,100% 0,96% 35%,82% 62%,50% 100%,18% 62%,4% 35%);transform:scaleY(var(--remaining))}
.focus-sand-bottom{top:52%;height:25%;clip-path:polygon(50% 0,83% 45%,98% 70%,100% 89%,83% 100%,17% 100%,0 89%,2% 70%,17% 45%);transform:scaleY(calc(1 - var(--remaining)))}
.focus-sand-stream{position:absolute;left:49.7%;top:48%;width:.6%;height:27%;z-index:1;opacity:0;background:repeating-linear-gradient(0deg,#eac573 0 2px,#fff0c8 2px 3px,transparent 3px 4px);pointer-events:none}.focus-hourglass.is-running .focus-sand-stream{opacity:1;animation:focusSandFall .35s linear infinite}@keyframes focusSandFall{to{background-position:0 8px}}
.focus-hourglass-readout{text-align:center;color:#fff0ce}.focus-hourglass-readout b{display:block;font:32px Georgia;font-variant-numeric:tabular-nums;text-shadow:0 2px 5px #071e37}.focus-hourglass-readout small{font:12px system-ui}
.focus-music-object,.focus-globe-object,.focus-gift-object,.focus-inspect-object{position:relative;width:min(70%,350px);height:270px;filter:drop-shadow(0 14px 16px #07243866)}
.focus-inspect-object{width:min(76%,560px);height:370px}.focus-music-object .campus-item-art,.focus-globe-object .campus-item-art,.focus-gift-object .campus-item-art,.focus-inspect-object .campus-item-art{width:100%;height:100%;object-fit:contain}.focus-inspect-object>.campus-variant-art,.focus-music-object>.campus-variant-art,.focus-globe-object>.campus-variant-art,.focus-gift-object>.campus-variant-art{display:block;width:100%;height:100%}
.focus-music-object i{position:absolute;right:20%;top:10%;font:38px Georgia;opacity:0;color:#ffeab6}.focus-music-object i:last-child{right:37%;top:25%;animation-delay:.7s}.focus-music-object.is-playing i{animation:musicNote 2s ease-out infinite}
.focus-piano{display:flex;gap:4px;justify-content:center;padding:10px;border-radius:10px;background:linear-gradient(#765b3e,#3e2d25);border:1px solid #c8ac74;box-shadow:0 9px 16px #08283966}
html body .focus-piano button{position:relative;padding:10px 8px!important;background:linear-gradient(#fff4df,#e5d8b6)!important;border:1px solid #9c8864!important;border-radius:3px 3px 8px 8px!important;color:#294a55!important;box-shadow:0 5px #8c785b,inset 1px 1px white!important;min-width:52px;height:65px;font:13px Georgia;display:flex;align-items:end;justify-content:center}
.focus-piano button:before{content:''!important;position:absolute;top:4px;left:35%;right:35%;height:4px;background:var(--note)!important;border-radius:6px}.focus-piano button:active{transform:translateY(4px);box-shadow:0 1px #8c785b!important}.focus-melody{font:12px/1.4 system-ui;max-width:650px;text-align:center;color:#fff3d3;margin:12px 0 0;min-height:17px}
.focus-globe-object{width:min(80%,320px);height:330px}.focus-globe-ring{position:absolute;inset:15% 21% 34%;border:1px solid #fce09e66;border-radius:50%;transform:rotate(var(--turn)) rotateY(65deg);transition:transform .2s}.focus-globe-object>span{position:absolute;top:25%;left:42%;color:#f9e6b1;text-shadow:0 0 14px white;transform:rotate(var(--turn));transition:transform .2s}
.focus-globe-range{display:flex;align-items:center;justify-content:center;gap:14px;font:13px system-ui;color:#fff3d3;max-width:100%}.focus-globe-range input{accent-color:#a0d7cc;max-width:55%}
.focus-room-particle{position:absolute;left:var(--x);top:60%;z-index:25000;color:var(--color);font:22px Georgia;pointer-events:none;animation:focusParticle 2.5s var(--delay) ease-out both;text-shadow:0 0 8px currentColor}
@keyframes focusEnter{from{opacity:0}to{opacity:1}}@keyframes brewSway{0%,100%{transform:rotate(-1deg)}50%{transform:rotate(1deg)}}@keyframes vialRise{0%,100%{transform:translateY(0);opacity:.2}70%{transform:translateY(-24px);opacity:.8}}
@keyframes skyOrbit{to{transform:rotate(360deg)}}@keyframes skyTwinkle{0%,100%{opacity:.55}50%{opacity:1}}@keyframes dragonDream{0%,100%{opacity:.3;transform:translateY(0)}50%{opacity:1;transform:translateY(-10px)}}@keyframes pictureGlow{0%,100%{opacity:.4}50%{opacity:1}}@keyframes pictureFly{0%,100%{transform:translate(0,0);opacity:.3}35%{transform:translate(80px,-30px);opacity:1}70%{transform:translate(140px,15px);opacity:.6}}@keyframes hourglassTurn{from{transform:rotate(0)}to{transform:rotate(180deg)}}@keyframes musicNote{from{opacity:0;transform:translateY(20px)}20%{opacity:1}to{opacity:0;transform:translateY(-60px)}}@keyframes focusParticle{0%{opacity:0;transform:scale(.4)}20%{opacity:1}100%{opacity:0;transform:translate(var(--drift),-200px) scale(1.3) rotate(30deg)}}
@keyframes dragonBlink{0%,69%,100%{background-position:0 0}70%{background-position:100% 0}72%{background-position:0 100%}74%{background-position:100% 0}76%{background-position:0 0}}
@keyframes dragonPet{0%,100%{background-position:0 0}8%{background-position:33.333333% 0}18%,70%{background-position:66.666667% 0}80%{background-position:33.333333% 0}90%{background-position:0 0}}
@media(max-width:700px){.campus-room-art.is-object-focused{min-height:640px;aspect-ratio:auto}.room-focus-overlay{padding:14px 12px 8px}.room-focus-heading h3{font-size:20px}.room-focus-heading button.soft-btn{padding:8px 10px!important;min-width:90px;font-size:12px}.focus-alchemy-lab{gap:15px;min-height:150px}.focus-recipe{width:90px}.focus-recipe-note{display:none}.focus-cauldron{width:160px;height:130px}.focus-vials{gap:8px;width:100%}.focus-vial{width:22%!important}.focus-vial .focus-potion{width:65px;height:90px}.focus-vial span{font-size:11px}.focus-game-hud{gap:8px;padding:8px;font-size:11px}.focus-level-track i{width:22px;height:22px}.focus-star-lens{height:320px;width:100%;border-width:3px}.focus-star-message{font-size:13px}.focus-inspect-object{height:330px;width:90%}.focus-living-art{width:96%}.focus-dragon-world{width:95%;max-height:340px}.room-focus-actions{gap:7px}.room-focus-actions button.soft-btn{font-size:13px;padding:8px 10px!important}.focus-globe-range{flex-wrap:wrap}.focus-piano button{min-width:42px!important}.room-focus-status{font-size:12px}.focus-caption{font-size:12px}}
@media(max-width:420px){.room-focus-heading{gap:8px}.room-focus-heading>div{min-width:0}.room-focus-heading h3{font-size:18px;overflow-wrap:anywhere}html body .room-focus-heading button.soft-btn{flex:0 0 92px;min-width:0;max-width:92px;padding:7px!important;font-size:12px!important;gap:4px}.room-focus-heading>div>span{font-size:8px;letter-spacing:1px}.focus-vial .focus-potion{width:100%;max-width:60px}.focus-vial span{font-size:9px}.focus-alchemy-lab{gap:10px}.focus-recipe{width:80px;flex-shrink:0}.focus-cauldron{width:140px;min-width:0}.focus-game-hud{padding:8px 5px}.room-focus-actions{max-width:100%}.focus-globe-range input{max-width:100%}}
@media(prefers-reduced-motion:reduce){.campus-scene-world,.room-focus-overlay *{animation:none!important;transition:none!important}.focus-room-particle{display:none}.focus-sky-star.is-flashing i{background:#fff7c9;transform:scale(1.8)}}
