:root{--ink:#10233f;--muted:#66758a;--line:#dfe6ed;--blue:#1268e8;--mint:#23c49a;--paper:#f5f7f9}*{box-sizing:border-box}body,html{margin:0;min-height:100%}body{color:var(--ink);background:radial-gradient(circle at 72% 8%,rgba(35,196,154,.12),transparent 25rem),linear-gradient(180deg,#fff 0,var(--paper) 62%);font-family:Arial,Noto Sans KR,sans-serif}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}.topbar{height:62px;padding:0 max(28px,calc((100vw - 1240px) / 2));justify-content:space-between;border-bottom:1px solid rgba(16,35,63,.1);background:rgba(255,255,255,.82);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.brand,.topbar{display:flex;align-items:center}.brand{gap:13px}.brandMark{display:grid;place-items:center;width:42px;height:42px;color:#fff;font-weight:900;font-size:23px;background:var(--blue);border-radius:12px 12px 4px 12px}.brand small,.brand strong{display:block}.brand strong{letter-spacing:.08em}.brand small{color:var(--muted);font-size:11px;margin-top:3px}.status{display:flex;align-items:center;gap:8px;padding:9px 13px;border:1px solid var(--line);border-radius:999px;font-size:11px;font-weight:800}.status span{width:7px;height:7px;border-radius:50%;background:#a7b0bc}.status.online{color:#0d8368;border-color:#b8e8dc;background:#effbf8}.status.online span{background:var(--mint);box-shadow:0 0 0 5px rgba(35,196,154,.13)}.hero{display:none}.eyebrow{color:var(--blue);font-size:12px;font-weight:900;letter-spacing:.2em}.hero h1{margin:14px 0 18px;font-size:clamp(44px,6vw,78px);line-height:.98;letter-spacing:-.065em}.hero h1 em{color:var(--blue);font-style:normal}.heroCopy{color:var(--muted);font-size:17px}.workspace{width:80%;max-width:1200px;margin:0 auto;padding:14px 0 40px;display:grid;grid-template-columns:1fr;grid-gap:12px;gap:12px}.controlCard,.stageCard{background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:22px;box-shadow:0 18px 50px rgba(16,35,63,.08)}.controlCard{padding:10px 12px;align-self:start;flex-wrap:wrap;gap:8px}.controlCard,.sectionTitle{display:flex;align-items:center}.sectionTitle{gap:6px;font-size:12px;font-weight:900;margin:0 4px 0 0}.sectionTitle span{color:var(--blue);font-family:Georgia,serif;font-size:18px}.roleTabs{width:210px;display:grid;grid-template-columns:1fr 1fr;grid-gap:5px;gap:5px;margin:0}.roleTabs button{height:40px;padding:5px 8px;border:1px solid var(--line);background:#fff;border-radius:9px;color:var(--muted)}.roleTabs button b,.roleTabs button small{display:block}.roleTabs button small{display:none}.roleTabs button.active{color:var(--blue);border-color:var(--blue);background:#f0f6ff;box-shadow:inset 0 0 0 1px var(--blue)}.controlCard label:not(.uploadButton){display:block;margin:0 0 0 4px;font-size:10px;font-weight:800}.controlCard input,.controlCard select{width:150px;height:40px;padding:0 10px;color:var(--ink);border:1px solid var(--line);border-radius:9px;background:#fbfcfd;outline:none}.controlCard input:focus,.controlCard select:focus{border-color:var(--blue)}.controlCard input:disabled,.controlCard select:disabled{opacity:1;color:var(--ink);-webkit-text-fill-color:var(--ink);background:#f3f6fa}.disconnectButton,.primaryButton{width:auto;min-width:132px;height:40px;margin:0;padding:0 16px;border:0;border-radius:9px;color:#fff;font-size:12px;font-weight:900}.primaryButton{background:var(--blue);box-shadow:0 10px 24px rgba(18,104,232,.25)}.disconnectButton{background:#263b59}.notice{flex:1 1 220px;min-height:0;margin:0 4px;color:var(--muted);font-size:10px;line-height:1.35}.uploadButton{width:auto;min-width:138px;min-height:40px;margin:0;padding:0 12px;display:flex!important;align-items:center;justify-content:center;color:var(--blue);border:1px dashed #8eb8ef;border-radius:10px;background:#f4f8ff;font-size:12px!important;font-weight:900!important;cursor:pointer}.uploadButton input{display:none}.uploadButton.disabled{opacity:.55;cursor:wait}.qrPanel{width:100%;margin-top:2px;padding:8px 12px;text-align:left;display:flex;align-items:center;gap:12px;border:1px solid #cfe0f5;border-radius:14px;background:#f5f9ff}.qrCanvas{width:124px;height:124px;margin:0;padding:7px;display:grid;place-items:center;background:#fff;border-radius:10px}.qrCanvas svg{width:110px;height:110px}.qrPanel b,.qrPanel code,.qrPanel small{display:block}.qrPanel b{font-size:13px}.qrPanel small{margin-top:5px;color:var(--muted);font-size:10px;line-height:1.45}.qrPanel code{margin-left:auto;color:var(--blue);font-size:18px;font-weight:900;letter-spacing:.12em}.stageCard{min-height:555px;overflow:hidden;display:flex;flex-direction:column}.stageHeader{min-height:70px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.roomLabel{margin-right:9px;color:var(--blue);font-size:9px;font-weight:900;letter-spacing:.15em}.stageHeader strong{font-family:Georgia,serif;font-size:18px}.audience{color:var(--muted);font-size:11px}.captionStage{flex:1 1;min-height:390px;max-height:540px;overflow-y:auto;background:#0f223d;color:#fff}.materialSection{background:#e8edf3;border-bottom:1px solid var(--line)}.materialBar{height:42px;padding:0 16px;display:flex;align-items:center;justify-content:space-between;background:#f8fafc;color:var(--ink);font-size:11px}.materialBar strong{max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.materialBar a{color:var(--blue);text-decoration:none;font-weight:800}.materialFrame{display:block;width:100%;height:min(55vh,625px);border:0;background:#dfe4ea}.captionStage.withMaterial{flex:none;min-height:190px;max-height:270px}.captionStage.withMaterial .empty{min-height:190px}.captionStage.withMaterial .empty .soundWave{display:none}.captionStage.withMaterial .empty h2{margin-top:0}.captionStage.withMaterial .captions{padding:20px 26px}.captionStage.withMaterial .captions p{font-size:clamp(18px,2vw,27px)}.receiverMode .materialSection{display:none}.receiverMode .stageCard{min-height:calc(100vh - 145px)}.receiverMode .captionStage{min-height:calc(100vh - 300px);max-height:none}.receiverMode .captions{padding:clamp(26px,5vw,70px);gap:34px}.receiverMode .captions article{padding-left:24px;border-left-width:5px}.receiverMode .captions small{font-size:clamp(12px,1.4vw,17px)}.receiverMode .captions p{font-size:clamp(30px,5vw,64px);line-height:1.3}.receiverMode .empty{min-height:calc(100vh - 300px)}.empty{height:100%;min-height:390px;display:grid;place-content:center;text-align:center;padding:30px}.empty h2{margin:24px 0 8px;font-size:21px}.empty p{color:#96a6ba;margin:0;font-size:13px}.soundWave{height:55px;display:flex;justify-content:center;align-items:center;gap:5px}.soundWave i{width:5px;border-radius:9px;background:var(--mint);animation:wave 1.1s ease-in-out infinite}.soundWave i:first-child,.soundWave i:nth-child(5){height:18px}.soundWave i:nth-child(2),.soundWave i:nth-child(4){height:35px;animation-delay:.12s}.soundWave i:nth-child(3){height:52px;animation-delay:.24s}@keyframes wave{50%{transform:scaleY(.45);opacity:.55}}.captions{padding:30px;display:flex;flex-direction:column;gap:22px}.captions article{padding-left:18px;border-left:3px solid var(--mint)}.captions small{color:#8fa2b9;font-size:12px}.captions p{margin:7px 0 0;font-size:clamp(21px,2.5vw,34px);line-height:1.35;font-weight:700}.captions .interim{opacity:.55;border-left-color:#56708f}.captionEnd{height:1px}.stageControls{min-height:82px;display:flex;align-items:center;justify-content:center;gap:12px;padding:14px}.clearButton,.micButton,.ttsButton{height:46px;padding:0 22px;border-radius:999px;font-weight:800}.micButton,.ttsButton{color:#fff;background:var(--blue);border:0}.micButton span,.ttsButton span{margin-right:8px}.micButton.recording{background:#e53d58;animation:pulse 1.5s infinite}.ttsButton.active{background:#079779}.clearButton{color:var(--muted);background:#fff;border:1px solid var(--line)}@keyframes pulse{50%{box-shadow:0 0 0 8px rgba(229,61,88,.12)}}@media (max-width:820px){.workspace{width:100%;padding:10px 12px 32px;grid-template-columns:1fr}.controlCard{order:1;gap:6px}.stageCard{order:2;min-height:500px}.roleTabs,.sectionTitle{width:100%}.controlCard label:not(.uploadButton){width:70px}.controlCard input,.controlCard select{flex:1 1;width:calc(100% - 84px)}.disconnectButton,.primaryButton,.uploadButton{flex:1 1}.notice{flex-basis:100%}.receiverMode .controlCard .roleTabs,.receiverMode .controlCard .sectionTitle{display:none}.receiverMode .controlCard{display:grid;grid-template-columns:82px minmax(0,1fr);align-items:center;grid-gap:8px;gap:8px;padding:12px}.receiverMode .controlCard label:not(.uploadButton){width:auto;margin:0;font-size:11px;white-space:nowrap}.receiverMode .controlCard input,.receiverMode .controlCard select{width:100%;min-width:0;height:44px;font-size:15px}.receiverMode .controlCard .disconnectButton,.receiverMode .controlCard .notice,.receiverMode .controlCard .primaryButton{grid-column:1/-1;width:100%}.receiverMode .controlCard .notice{display:block;margin:0;padding:2px}.receiverMode .stageCard{min-height:calc(100vh - 185px)}.receiverMode .captionStage,.receiverMode .empty{min-height:calc(100vh - 340px)}.receiverMode .captions{padding:30px 22px}.receiverMode .captions p{font-size:clamp(28px,9vw,46px)}}@media (max-width:520px){.topbar{padding:0 18px}.brand small{display:none}.hero{padding-left:20px;padding-right:20px}.workspace{padding-left:14px;padding-right:14px}.stageHeader{align-items:flex-start;flex-direction:column;justify-content:center;gap:5px}.stageControls{flex-wrap:wrap}}