@import url('https://fonts.googleapis.com/css2?family=Jua&family=Noto+Sans+KR:wght@400;500;600;700;800;900&display=swap');
:root{--ink:#30433e;--green:#3f795d;--muted:#83948a}*{box-sizing:border-box}body{margin:0;background:#fcfaf5;color:var(--ink);font-family:'Noto Sans KR',sans-serif}button,input,select{font:inherit}button,select,.upload{cursor:pointer}button{border:0;border-radius:13px;padding:12px 18px;background:white;color:var(--ink);font-weight:700;transition:transform .2s,background .2s}button:hover{transform:translateY(-2px);background:#eef2e9}button:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid #dc9e39;outline-offset:3px}header{height:94px;display:flex;align-items:center;justify-content:space-between;padding:0 5%;border-bottom:1px solid #eae8df;background:#fffdf9}.brand{text-decoration:none;color:var(--ink);font-family:Jua,sans-serif;font-size:25px;display:flex;align-items:center;gap:10px}.brand span{color:#77a788;font-size:48px}.brand small{font:500 12px 'Noto Sans KR';border-left:1px solid #ddd;padding-left:12px;margin-left:3px;color:#8b978c}header>div{display:flex;gap:8px}header button{font-size:13px;background:transparent}header .edit{background:#eaf0e5;color:#48734e}main{max-width:1500px;margin:auto;padding:33px 4% 20px;text-align:center}.eyebrow{font-size:11px;letter-spacing:2px;color:#82977f;font-weight:700}h1{font-family:Jua,sans-serif;font-size:43px;font-weight:400;margin:12px 0 8px;letter-spacing:-1px}.intro{font-size:13px;color:#8b9489;margin:0}.toolbar{display:flex;justify-content:center;align-items:center;gap:20px;margin:25px 0 16px}.group{display:flex;gap:6px;padding:5px;border:1px solid #e6e8dd;background:#fff;border-radius:16px}.group button{padding:9px 20px;font-size:13px}.selected{background:var(--green)!important;color:white}.group label{display:flex;align-items:center;font-size:12px;padding-right:12px;color:#8b9489}.group input{width:51px;border:0;text-align:center;padding:6px;background:#f6f6f0;border-radius:8px;margin-right:5px}select{border:0;background:transparent;color:#6c7c6c;font-size:12px;padding:10px}.divider{height:22px;border-left:1px solid #ddd}.playground{height:440px;position:relative;overflow:hidden;border-radius:30px;background:linear-gradient(180deg,#e7f1ef,#eff3df);border:1px solid #e0e9dd}.playground:after{content:'';position:absolute;width:120%;height:110px;background:#e6edcf;border-radius:50%;bottom:-85px;left:-10%;pointer-events:none}.cloud{position:absolute;width:140px;height:33px;background:#ffffff70;border-radius:50px}.cloud:before{content:'';position:absolute;width:55px;height:55px;background:inherit;border-radius:50%;left:26px;bottom:0}.cloud1{top:50px;left:10%}.cloud2{top:75px;right:8%;transform:scale(.7)}.clock{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%);width:246px;height:246px;border-radius:50%;background:#fffefa;box-shadow:0 14px 40px #59785a14;z-index:2}.clock svg{width:100%;height:100%;transform:rotate(-90deg)}circle{fill:none;stroke-width:8}.track{stroke:#edf0e5}#progress{stroke:#709779;stroke-linecap:round;stroke-dasharray:678.584;stroke-dashoffset:0;transition:stroke-dashoffset .3s}.clocktext{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;gap:8px}.clocktext span{font-size:11px;color:#91a08a}.clocktext strong{font-size:59px;letter-spacing:-3px;font-weight:800;font-variant-numeric:tabular-nums}.bubble{position:absolute;width:78px;height:78px;border-radius:50%;display:flex;justify-content:center;align-items:center;font-family:Jua,sans-serif;font-size:36px;background:radial-gradient(circle at 30% 24%,#ffffffaa 0,transparent 43%),var(--color);box-shadow:inset 0 -5px 0 #0000000d,0 10px 16px #4c735715;color:#fff;transition:opacity .45s,scale .45s;animation:float 4s ease-in-out infinite alternate;border:3px solid #ffffff40;overflow:hidden}.bubble img{width:100%;height:100%;object-fit:cover}.bubble.popped{scale:1.3;opacity:0;pointer-events:none}.ground{position:absolute;bottom:21px;width:100%;color:#96ac80;font-size:12px}.ground span{margin:0 12px;font-size:10px;letter-spacing:1px}.controls{display:flex;justify-content:center;gap:14px;margin:22px auto 0;align-items:center}.controls button{min-width:145px;border:1px solid #e7e9df;font-size:14px}.primary{background:var(--green)!important;color:white!important;box-shadow:0 5px 0 #2e6048;padding:16px 42px}.controls .primary{min-width:210px;font-size:17px}#finish{background:#f5e8b9;color:#8a7440;border:0}.hint{font-size:10px;color:#a3a89a;margin-top:22px}dialog{border:0;border-radius:25px;width:min(750px,94vw);padding:28px;color:var(--ink);background:#fcfaf5;max-height:90vh}dialog::backdrop{background:#263e3580;backdrop-filter:blur(5px)}.modalhead{display:flex;justify-content:space-between;align-items:center}.modalhead small{color:#8a9c84;font-size:11px}h2{font-family:Jua;font-weight:400;margin:6px 0;font-size:30px}dialog p{font-size:12px;color:#7e8b7b}.titlefield{display:flex;align-items:center;gap:15px;font-size:13px;margin:22px 0}.titlefield input{flex:1;border:1px solid #dce1d4;border-radius:10px;padding:12px;min-width:0}.editorbar{display:flex;gap:8px;align-items:center;margin:18px 0;font-size:12px}.editorbar>span{margin-right:auto}.upload{background:#e6eddf;border-radius:12px;padding:12px}.editorbar button{font-size:12px}#cards{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.card{background:white;border:1px solid #e7e9dd;border-radius:16px;padding:13px;display:flex;flex-direction:column;align-items:center;gap:8px}.thumb{width:65px;height:65px;border-radius:50%;object-fit:cover;display:grid;place-items:center;color:white;font-family:Jua;font-size:30px}.card input[type=text]{width:100%;border:1px solid #e5e7dd;border-radius:7px;padding:6px;text-align:center;font-size:12px}.card .actions{display:flex;gap:8px}.card button,.card label{font-size:10px;padding:5px;color:#6f806a;background:#f4f5ef;border-radius:5px;cursor:pointer}.done{display:block;margin:20px auto 4px}#celebration{position:fixed;inset:0;z-index:9;background:#f5f7e8eF;backdrop-filter:blur(10px);place-items:center;text-align:center}#celebration:not([hidden]){display:grid}#celebration>div{font-size:70px}#celebration h2{font-size:50px}#celebration p{font-size:17px;margin:12px 0 30px}@keyframes float{from{transform:translateY(-5px) rotate(-5deg)}to{transform:translateY(5px) rotate(5deg)}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}@media(min-height:850px){.playground{height:510px}main{padding-top:40px}.toolbar{margin:30px 0 24px}}@media(max-width:700px){header{height:75px;padding:0 15px}.brand{font-size:19px}.brand small{display:none}header button{padding:9px;font-size:11px}#sound{display:none}main{padding:26px 12px}h1{font-size:34px}.intro{font-size:11px}.toolbar{gap:4px;flex-wrap:wrap}.group button{padding:8px 12px}.divider{display:none}.playground{height:470px;border-radius:22px}.clock{width:190px;height:190px}.clocktext strong{font-size:46px}.bubble{width:54px;height:54px;font-size:26px}.controls{gap:8px}.controls button{min-width:0!important;padding:13px;font-size:11px}.controls .primary{font-size:14px;padding:15px 26px}#cards{grid-template-columns:repeat(3,1fr)}dialog{padding:20px}.editorbar{flex-wrap:wrap}.hint{line-height:1.7}}

/* Shared classroom controls */
#syncStatus{font-size:11px;color:#6e896a;margin-bottom:18px;min-height:17px}#syncStatus.error{color:#b65e45}#teacherLogin{max-width:450px}#loginForm label{display:flex;flex-direction:column;gap:8px;font-size:13px;margin:20px 0}#teacherCode{padding:13px;border:1px solid #dce1d4;border-radius:10px}#musicEditor{max-width:570px}.musicUpload{display:block;text-align:center;margin:22px 0 8px;padding:17px}.musicHelp{font-size:11px!important;line-height:1.8}#musicName{font-weight:700;overflow-wrap:anywhere;font-size:14px;color:var(--ink);margin-top:24px}#bgm{width:100%;margin:8px 0 20px}.musicOption{display:flex;gap:12px;align-items:center;margin:18px 0;font-size:13px}.musicOption input[type=range]{flex:1;accent-color:var(--green)}.musicOption input[type=checkbox]{width:18px;height:18px;accent-color:var(--green)}#removeMusic{color:#ae6854;background:#f4e8df;font-size:12px}#musicStatus{min-height:20px}@media(max-width:700px){header button{font-size:10px;padding:7px}header>div{gap:2px}.brand{font-size:16px}.brand span{font-size:34px}#full{font-size:0}#full:first-letter{font-size:18px}}
#codeEditor{max-width:470px}#codeForm label{display:flex;flex-direction:column;gap:8px;font-size:13px;margin:16px 0}#codeForm input{padding:12px;border:1px solid #dce1d4;border-radius:10px}#codeStatus{min-height:20px}#changeCode{font-size:11px;background:transparent;color:#71876b;padding:6px;margin-bottom:7px}
