@font-face{font-family:"Pretendard Variable";src:url("fonts/PretendardVariable.woff2") format("woff2-variations");font-weight:45 920;font-style:normal;font-display:swap}
:root{
  /* ?��???고유 브랜?? 밝�? ?�카??블루 */
  --brand:#0082C8;--brand-strong:#0069A8;--brand-soft:#E8F4FB;--brand-line:#9BD3EE;
  --accent:#0082C8;--accent-soft:#E8F4FB;
  --blue:var(--brand);--blue-soft:var(--brand-soft);
  --text:#0F172A;--sub:#475569;--muted:#64748B;
  --bg:#F8FAFC;--surface:#fff;--line:#E2E8F0;--danger:#E5484D;--danger-soft:#FFF0F1;
  --green:#10B981;--composer:84px;--sidebar:286px;--mpanel:320px;
  --hover:#F1F5F9;--chip:#F1F5F9;--ui-scale:1
}
*{box-sizing:border-box;font-family:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
html,body,#app{margin:0;width:100%;height:100%;height:100dvh;overflow:hidden;-webkit-text-size-adjust:100%;text-size-adjust:100%}
html{background:var(--bg)}
/* 글자 크기 설정 — 화면 전체(모달·토스트 포함)를 같은 비율로 키운다. */
body{--ui-eff:var(--ui-scale,1);background:var(--bg);color:var(--text);zoom:var(--ui-eff);width:calc(100% / var(--ui-eff));height:calc(100dvh / var(--ui-eff))}
/* zoom을 지원하지 않는 브라우저에서는 100% 확대 그대로 두어 검은 여백·잘림이 생기지 않게 한다 */
@supports not (zoom: 1){
  body{width:100%;height:100dvh}
}
body>#app{width:100%;height:100%}
/* 좁은 화면에서는 모달이 화면 밖으로 넘치지 않게 배율 상한을 둔다. */
@media(max-width:820px){body{--ui-eff:min(var(--ui-scale,1),1.06)}}
button,input,textarea,select{font:inherit}button{border:0;background:none;color:inherit;cursor:pointer}input,textarea{color:var(--text)}
body.font-sm{font-size:14px}body.font-lg{font-size:17px}body.font-xl{font-size:19px}body.font-xxl{font-size:21px}
/* ---------- 부??로딩 (Android TV ?��??? 글???�통?�정?�→?�환) ---------- */
.boot{height:100%;display:grid;place-items:center;align-content:center;text-align:center;gap:10px;padding:calc(16px + env(safe-area-inset-top)) 16px 16px;transition:opacity .3s ease,transform .3s ease}
.boot>div{display:flex;flex-direction:column;gap:4px;min-width:0}
.boot-visual{position:relative;width:88px;height:88px;display:grid;place-items:center;margin:0 auto}
.boot-mark{width:60px;height:60px;border-radius:20px;background:linear-gradient(145deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;display:flex;align-items:center;justify-content:center;line-height:1;font-weight:800;font-size:26px;box-shadow:0 14px 30px rgba(0,130,200,.38);animation:bootBreathe 2.6s ease-in-out infinite}
@keyframes bootBreathe{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-3px) scale(1.04)}}
.boot .boot-word{display:flex;flex-direction:row;align-items:flex-end;justify-content:center;gap:4px;margin:2px auto 0;min-height:34px;perspective:500px}
.boot-word span{display:inline-block;font-weight:800;font-size:26px;letter-spacing:.5px;color:var(--brand);opacity:1;transform-origin:center bottom;backface-visibility:visible;animation:bootFlipBounce 1.8s cubic-bezier(.22,1,.36,1) infinite}
.boot-word span:nth-child(2){animation-delay:.09s}
.boot-word span:nth-child(3){animation-delay:.18s}
.boot-word span:nth-child(4){animation-delay:.27s}
.boot-word span:nth-child(5){animation-delay:.36s}
.boot-word span:nth-child(6){animation-delay:.45s}
.boot-word span:nth-child(7){animation-delay:.54s}
@keyframes bootFlipBounce{0%{transform:rotateX(-90deg) translateY(8px) scale(.9);opacity:0}18%{transform:rotateX(0deg) translateY(-10px) scale(1.05);opacity:1}38%{transform:rotateX(0deg) translateY(2px) scale(.98)}58%{transform:rotateX(0deg) translateY(-4px) scale(1.01)}78%{transform:rotateX(0deg) translateY(1px) scale(.99)}100%{transform:rotateX(0deg) translateY(0) scale(1)}}
@keyframes bootLetterSettle{0%{transform:rotateX(0deg) translateY(-6px) scale(1.06)}100%{transform:rotateX(0deg) translateY(0) scale(1)}}
.boot.leaving .boot-word span{animation:bootLetterSettle .45s cubic-bezier(.22,1,.36,1) forwards}
.boot-copy strong{display:block;font-size:17px;color:var(--text);white-space:nowrap;letter-spacing:-.4px}
.boot-copy span{display:block;font-size:12px;color:var(--sub);white-space:nowrap}
.boot-dots{display:flex;flex-direction:row;gap:8px;justify-content:center;margin:4px auto 0}
.boot-dots i{width:8px;height:8px;border-radius:50%;background:var(--brand);opacity:.35;animation:bootDot 1.2s cubic-bezier(.34,1.56,.64,1) infinite}
.boot-dots i:nth-child(2){animation-delay:.12s}.boot-dots i:nth-child(3){animation-delay:.24s}
@keyframes bootDot{0%,100%{transform:translateY(0) scale(.85);opacity:.35}35%{transform:translateY(-7px) scale(1.05);opacity:1}}
@media(prefers-reduced-motion:reduce){.boot-mark,.boot-word span,.boot-dots i{animation:none!important}}
.app{width:100%;height:100%;display:flex;overflow:hidden;background:var(--bg)}
#classicOrgToggle{position:fixed;left:12px;bottom:12px;z-index:70;height:38px;padding:0 14px;border-radius:19px;border:1px solid var(--line);background:var(--surface);color:var(--text);font-size:13px;font-weight:650;box-shadow:0 6px 18px rgba(25,31,40,.12);cursor:pointer}
#classicOrgToggle[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff}
#classicOrg{display:none}
body.classic-org #classicOrg{display:flex;flex-direction:column;position:fixed;left:0;top:0;bottom:0;width:340px;z-index:65;background:var(--surface);border-right:1px solid var(--line)}
body.classic-org #app{margin-left:340px}
.classic-head{padding:14px 12px 10px;border-bottom:1px solid var(--line)}
.classic-school{font-size:12px;color:var(--sub);margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.classic-me{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.classic-name{font-weight:700;font-size:14px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.classic-select{height:32px;border:1px solid var(--line);border-radius:9px;background:var(--bg);font-size:12.5px;max-width:130px}
.classic-tools{display:flex;gap:6px}
.classic-search{flex:1;height:34px;border:1px solid var(--line);border-radius:10px;padding:0 10px;font-size:13px;background:var(--bg);color:var(--text)}
.classic-icon{flex:0 0 34px;height:34px;border:1px solid var(--line);border-radius:10px;background:var(--bg);cursor:pointer;font-size:15px}
.classic-list{flex:1;overflow:auto;padding:8px}
.classic-sep{font-size:11.5px;font-weight:700;color:var(--sub);padding:10px 8px 4px}
.classic-row{display:flex;width:100%;align-items:center;gap:10px;padding:8px;border:0;border-radius:12px;background:transparent;cursor:pointer;text-align:left}
.classic-row:hover{background:var(--brand-soft)}
.classic-av{flex:0 0 auto}
.classic-grow{flex:1;min-width:0}
.classic-title{display:flex;align-items:center;gap:6px;font-size:13.5px;font-weight:650;color:var(--text)}
.classic-meta{font-size:12px;color:var(--sub)}
.classic-tabs{display:flex;gap:6px;margin-top:10px}
.classic-tab{flex:1;height:32px;border:1px solid var(--line);border-radius:9px;background:var(--bg);font-size:12.5px;cursor:pointer;color:var(--sub)}
.classic-tab.active{background:var(--brand-soft);color:var(--brand-strong);border-color:var(--brand-line);font-weight:700}
.classic-setrow{display:flex;align-items:center;gap:8px;margin-top:8px}
.classic-setrow .classic-select{flex:1;max-width:none}
.classic-top{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--sub);white-space:nowrap}
.classic-fav{flex:0 0 30px;height:30px;border:0;background:transparent;color:var(--sub);font-size:15px;cursor:pointer}
.classic-fav.on{color:var(--brand-strong)}
.classic-row.sel{outline:2px solid var(--brand);background:var(--brand-soft)}
.classic-ctx{position:fixed;z-index:120;min-width:160px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px rgba(25,31,40,.16);padding:6px;display:flex;flex-direction:column}
.classic-ctx button{border:0;background:transparent;text-align:left;padding:9px 10px;border-radius:8px;font-size:13px;color:var(--text);cursor:pointer}
.classic-ctx button:hover{background:var(--brand-soft)}
.imp-badge{display:inline-block;font-size:11px;font-weight:750;padding:2px 7px;border-radius:8px;margin-right:6px;vertical-align:1px}
.imp-badge.urgent{background:#FDE8E8;color:#D92D20;border:1px solid #F5C6C6}
.imp-badge.ref{background:#EEF0F4;color:#5B6472;border:1px solid #DDE1E8}
.imp-filter{display:flex;gap:6px;padding:8px 12px;flex-wrap:wrap;position:sticky;top:0;z-index:5;background:rgba(255,255,255,.72);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid var(--line)}
html.dark .imp-filter{background:rgba(19,21,26,.72)}
.imp-filter button{height:28px;padding:0 12px;border-radius:14px;border:1px solid var(--line);background:var(--surface);font-size:12px;color:var(--sub);cursor:pointer}
.imp-filter button.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:700}
.composer-extras{display:flex;gap:6px;align-items:center;margin-right:6px;position:relative}
.composer-extras .icon-btn.open{background:var(--brand-soft);color:var(--brand)}
/* 입력란 폴더 버튼을 누르면 펼쳐지는 도구 모음 */
.tools-folder{position:absolute;left:0;bottom:calc(100% + 10px);min-width:190px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:6px;box-shadow:0 20px 45px rgba(25,31,40,.18);z-index:120;display:flex;flex-direction:column;gap:2px;animation:toolsIn .18s cubic-bezier(.2,.8,.2,1)}
@keyframes toolsIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.tools-row{display:flex;align-items:center;gap:8px;padding:2px}
.tools-label{font-size:12.5px;font-weight:700;color:var(--sub);padding-left:8px}
.tools-row .imp-select{flex:1}
.tools-item{flex:1;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:11px;font-size:13.5px;text-align:left}
.tools-item:hover{background:var(--blue-soft);color:var(--blue)}
.tools-item span:last-child{font-weight:620}
.imp-select{height:32px;border:1px solid var(--line);border-radius:9px;background:var(--bg);font-size:12.5px;color:var(--text)}
.composer-extras .icon-btn.off{opacity:.4}
.memo-dot{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer}
.memo-dot.on{border-color:var(--brand)}
body.masking .message-author,body.masking .author-btn,body.masking .classic-title,body.masking .chat-title,body.masking .room-name,body.masking .classic-name{filter:blur(9px)}
@media (max-width:820px){body.classic-org #app{margin-left:0}body.classic-org #classicOrg{width:min(340px,88vw);box-shadow:0 0 40px rgba(0,0,0,.18)}}
/* ?�치·?�이?��??�일?�드: 로그?�·소�??�면???�단 침범 방�? (PC?�서??0?�라 변???�음) */
.boot{padding-top:env(safe-area-inset-top)}
/* ?�개 ?�면?� 붙박???�단바�? ?�백??먹는??*/
.landing-nav{padding-top:env(safe-area-inset-top)}
/* 카톡??�?밀�?(?�른�? ?�림·?�정 / ?�쪽: ?��?�? */
.room-swipe{position:relative;overflow:hidden;border-radius:12px;background:var(--surface)}
.room-swipe .room:focus{outline:none}
.room-swipe .room:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}
.room-swipe .room{position:relative;z-index:1;background:var(--surface);transition:transform .2s cubic-bezier(.2,.8,.2,1),background .16s}
.room-swipe .room:hover{background:var(--hover)}
.room-swipe .room.active{background:var(--brand-soft)}
html.dark .room-swipe .room.active{background:var(--blue-soft)}
.room-swipe.swiping .room{transition:none}
.room-swipe-bg{position:absolute;top:2px;bottom:2px;display:flex;align-items:stretch;z-index:0;opacity:0;transition:opacity .15s ease}
.room-swipe.open .room-swipe-bg,.room-swipe.swiping .room-swipe-bg{opacity:1}
.room-swipe-bg.left{left:2px}
.room-swipe-bg.right{right:2px}
.room-swipe-bg.left button:first-child{border-radius:10px 0 0 10px}
.room-swipe-bg.right button{border-radius:0 10px 10px 0}
.room-swipe-bg button{border:0;color:#fff;font-size:11.5px;font-weight:700;padding:0 12px;display:flex;align-items:center;white-space:nowrap;touch-action:manipulation}
.room-swipe-bg button:active{filter:brightness(1.12)}
.room-swipe-bg.left button:first-child{background:#8B93A1}
.room-swipe-bg.left button:last-child{background:var(--brand)}
.room-swipe-bg.right button{background:var(--danger)}
/* ?�래�?중에??목록 ?�크롤을 ?��? 방을 ??�� ???�게 ?�다 */
body.room-dragging,body.side-dragging,body.cat-dragging{touch-action:none;overscroll-behavior:none}
body.room-dragging .side-body,body.side-dragging .side-body,body.cat-dragging .side-body{overflow:hidden !important}
body.room-dragging .room{touch-action:none}
.sidebar{width:var(--sidebar);flex:0 0 var(--sidebar);height:100%;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:50}.side-top{height:76px;display:flex;align-items:center;justify-content:space-between;padding:env(safe-area-inset-top) 16px 0 18px;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:750;letter-spacing:-.5px}.brand-mark{width:38px;height:38px;border-radius:12px;background:linear-gradient(145deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;display:flex;align-items:center;justify-content:center;line-height:1;padding-top:2px;font-weight:800}.icon-btn{width:38px;height:38px;border-radius:50%;background:transparent;display:grid;place-items:center;color:var(--sub);transition:background .18s,color .18s,transform .18s}.icon-btn:hover{background:var(--hover);color:var(--text)}.icon-btn:active{transform:scale(.94)}
.profile-card{margin:0;padding:13px 16px 14px;border:0;border-bottom:1px solid var(--line);border-radius:0;text-align:left;background:transparent;transition:background .18s}.profile-card:hover{background:var(--hover)}.profile-row{display:flex;align-items:center;gap:11px}.avatar{width:38px;height:38px;border-radius:50%;background:var(--chip);color:var(--sub);display:grid;place-items:center;font-weight:650;overflow:hidden;flex:0 0 auto}.avatar img{width:100%;height:100%;object-fit:cover}.avatar.large{width:44px;height:44px}.avatar-dot{position:relative;line-height:0}.grow{flex:1;min-width:0}.profile-name{font-size:15px;font-weight:680;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.profile-meta{font-size:12px;color:var(--sub);margin-top:4px}
.side-body{flex:1;min-height:0;overflow:auto;padding:12px}.side-section{margin-bottom:18px}.side-title{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:11.5px;font-weight:700;letter-spacing:.02em;padding:0 8px 8px}.text-btn{font-size:13px;color:var(--brand);font-weight:650}.room{position:relative;width:100%;display:flex;gap:10px;align-items:center;padding:9px 10px;border-radius:12px;text-align:left;transition:background .18s}.room:hover{background:var(--hover)}.room.active{background:var(--brand-soft)}.room.has-unread:before{content:"";position:absolute;left:1px;top:50%;transform:translateY(-50%);width:3px;height:17px;border-radius:3px;background:var(--brand)}.room-icon{width:34px;height:34px;border-radius:50%;background:var(--chip);display:grid;place-items:center;color:var(--sub);flex:0 0 auto;font-size:15px}.room.active .room-icon{background:var(--surface);color:var(--brand)}.room-main{min-width:0}.room-name{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-sub{font-size:11px;color:var(--muted);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-right{display:flex;align-items:center;gap:7px;margin-left:auto}.unread{min-width:0;height:20px;padding:0 7px;border-radius:7px;background:var(--brand-soft);border:1px solid var(--brand-line);color:var(--brand-strong);display:grid;place-items:center;font-size:10.5px;font-weight:750}.side-bottom{border-top:1px solid var(--line);padding:12px}.row{display:flex;gap:8px}.soft-btn{flex:1;height:42px;background:var(--chip);border-radius:12px;font-size:14px;font-weight:620;transition:background .18s,transform .18s}.soft-btn:hover{background:var(--hover)}.soft-btn:active{transform:scale(.98)}
.main{flex:1;min-width:0;height:100%;overflow:hidden;position:relative;display:flex;flex-direction:column}.chat{width:100%;flex:1;min-height:0;display:flex;flex-direction:column;position:relative}.chat-head{height:74px;flex:0 0 74px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:env(safe-area-inset-top) 24px 0;position:relative;z-index:30}.chat-title{font-size:19px;font-weight:720;letter-spacing:-.35px}.chat-desc{font-size:13px;color:var(--sub);margin-top:3px}.head-actions{display:flex;gap:8px;align-items:center}.head-chip{padding:8px 11px;background:#f6f7f8;border-radius:12px;font-size:12px;color:var(--sub)}
.messages-wrap{flex:1;min-height:0;position:relative;background:#FAFAFD}.messages{position:absolute;inset:0;overflow:auto;padding:24px 30px calc(var(--composer) + 26px);overscroll-behavior:contain;scroll-behavior:auto}.message-block{max-width:900px;margin:0 auto 16px}.day-sep{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:12px;margin:2px 0 18px}.day-sep:before,.day-sep:after{content:"";height:1px;background:var(--line);flex:1}.message-row{display:flex;gap:10px;align-items:flex-start;margin:0 0 12px}.message-row.mine{justify-content:flex-end}.message-row.hidden-message{display:none}.message-row.grouped{margin:0 0 4px}.message-content{max-width:min(74%,760px);display:flex;flex-direction:column;min-width:0}.message-row:not(.mine) .message-content{align-items:flex-start}.message-row.mine .message-content{align-items:flex-end}.msg-side{flex:0 0 auto;display:flex;align-items:flex-start;padding-top:2px}.msg-avatar-spacer{display:block;width:38px;flex:0 0 auto}.avatar-btn{border:0;background:none;padding:0;margin:0;cursor:pointer;border-radius:50%;line-height:0}.msg-time{font-size:11px;color:var(--muted);margin-top:3px}.message-row.mine .msg-time{text-align:right}.message-author{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--sub);margin:0 0 5px}.message-row.mine .message-author{justify-content:flex-end}.bubble{padding:11px 14px;border-radius:16px;background:var(--chip);border:0;font-size:15px;line-height:1.52;white-space:pre-wrap;word-break:break-word}.mine .bubble{background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);border:0;color:#fff;border-bottom-right-radius:6px}.message-row:not(.mine) .bubble{border-bottom-left-radius:6px}.bubble{display:inline-block;max-width:100%}
.bubble-time{max-height:0;overflow:hidden;opacity:0;margin-top:0;font-size:11px;color:var(--muted);transition:max-height .28s cubic-bezier(.2,.8,.2,1),opacity .2s ease,margin-top .28s cubic-bezier(.2,.8,.2,1)}
.message-row.show-time .bubble-time{max-height:22px;opacity:1;margin-top:4px}
@media(hover:hover){.message-row .bubble:hover+.bubble-time{max-height:22px;opacity:1;margin-top:4px}}
.message-row.mine .bubble-time{text-align:right}.message-tools{display:flex;gap:8px;justify-content:flex-start;margin-top:4px;opacity:0;transition:opacity .16s}.message-row:hover .message-tools,.message-tools:focus-within{opacity:1}.mine .message-tools{justify-content:flex-end}.message-tools button{font-size:11px;color:var(--sub)}.message-tools button:hover{color:var(--text)}
.composer{position:absolute;left:0;right:0;bottom:0;z-index:60;padding:12px 20px calc(12px + var(--kb,0px));background:linear-gradient(to top,rgba(251,252,253,.99) 72%,rgba(251,252,253,0));pointer-events:none}.composer-inner{width:min(980px,100%);margin:0 auto;min-height:56px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 8px 26px rgba(25,31,40,.09);display:flex;align-items:flex-end;gap:8px;padding:6px 6px 6px 12px;pointer-events:auto}.composer-inner.centered{align-items:center;justify-content:center;padding:0 16px;color:var(--sub);font-size:13px;line-height:1.5;text-align:center}.composer .icon-btn{width:44px;height:44px;flex:0 0 44px;border-radius:50%;font-size:17px;background:var(--chip)}.composer .icon-btn:hover{background:var(--hover)}.composer textarea{flex:1;min-width:0;min-height:44px;max-height:120px;resize:none;outline:none;border:0;padding:11px 2px;font-size:15px;line-height:1.45;background:transparent}.send{width:44px;height:44px;border-radius:50%;background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;display:grid;place-items:center;flex:0 0 auto;transition:transform .16s,filter .16s}.send:hover{filter:brightness(1.06)}.send:active{transform:scale(.95)}.composer-note{text-align:center;position:absolute;left:0;right:0;top:-22px;color:var(--muted);font-size:12px;pointer-events:none}
.char-count{position:absolute;right:20px;top:-19px;font-size:11px;color:var(--muted);pointer-events:none;font-variant-numeric:tabular-nums;opacity:0;transform:translateY(3px);transition:opacity .18s ease,transform .18s ease;text-shadow:0 1px 6px var(--bg),0 0 2px var(--bg)}
.char-count.show{opacity:1;transform:none}
.char-count.over{color:var(--danger);border-color:var(--danger);font-weight:700}
/* 메시지 검?�창 (?�력창을 ?�체하지 ?�고 목록 ?�에 ?�시) */
.search-top{display:flex;align-items:center;gap:6px;padding:8px 16px;background:var(--surface);border-bottom:1px solid var(--line);flex:0 0 auto}
body.offline .send{opacity:.55;filter:saturate(.5)}
body.offline .composer-inner{border-style:dashed}
.new-banner{position:absolute;z-index:80;top:12px;left:50%;width:min(640px,calc(100% - 36px));padding:12px 16px;border-radius:16px;background:#191f28;color:#fff;box-shadow:0 15px 36px rgba(25,31,40,.2);transform:translate(-50%,-130%);opacity:0;pointer-events:none;transition:transform .46s cubic-bezier(.2,.8,.2,1),opacity .24s ease}.new-banner.show{transform:translate(-50%,0);opacity:1;pointer-events:auto}.new-banner .title{font-size:13px;font-weight:650}.new-banner .text{font-size:12px;margin-top:4px;opacity:.82;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.new-banner .progress{height:2px;background:rgba(255,255,255,.18);margin-top:10px;border-radius:2px;overflow:hidden}.new-banner .progress i{display:block;height:100%;width:100%;background:#fff;transform-origin:left;transition:transform 5s linear}.new-banner.show .progress i{transform:scaleX(0)}
/* 채팅�???고정 ?�림 (?�력�?바로 ?? 계속 ?��?) */
.new-banner.bottom-pill{top:auto;bottom:calc(var(--composer) + 12px + var(--kb,0px));transform:translate(-50%,130%)}
.new-banner.bottom-pill.show{transform:translate(-50%,0)}
.new-banner.sticky .progress{display:none}
.banner-go{flex:0 0 auto;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.16);color:#fff;display:grid;place-items:center;font-size:13px}
/* ?�래??채팅 ?�단 �?+ ?�래�??�로???�살??*/
.old-chat-bar{flex:0 0 auto;text-align:center;font-size:11.5px;color:var(--sub);background:var(--chip);border-bottom:1px solid var(--line);padding:5px 8px}
.load-more-wrap{display:flex;justify-content:center;padding:6px 0 14px}
.load-more{height:36px;padding:0 18px;border-radius:999px;background:var(--surface);border:1px solid var(--line);box-shadow:0 4px 14px rgba(25,31,40,.08);font-size:13px;font-weight:650;color:var(--sub);transition:background .16s,color .16s,transform .16s}
.load-more:hover{background:var(--hover);color:var(--text)}
.load-more:active{transform:scale(.96)}
.load-more:disabled{opacity:.6;cursor:default;transform:none}
.old-chat-bar.hidden{display:none}
.jump-bottom-fab{position:absolute;right:16px;bottom:calc(var(--composer) + 18px + var(--kb,0px));width:42px;height:42px;border-radius:50%;background:var(--surface);border:1px solid var(--line);box-shadow:0 8px 22px rgba(25,31,40,.16);font-size:17px;color:var(--text);z-index:70;cursor:pointer}
.jump-bottom-fab.hidden{display:none}
.jump-bottom-fab:active{transform:scale(.94)}
.new-banner .banner-row{display:flex;align-items:flex-start;gap:10px}.new-banner .banner-main{flex:1;min-width:0}.banner-x{flex:0 0 auto;width:26px;height:26px;border-radius:50%;background:rgba(255,255,255,.16);color:#fff;display:grid;place-items:center;font-size:11px;line-height:1;transition:background .18s ease,transform .18s ease}.banner-x:hover{background:rgba(255,255,255,.3)}.banner-x:active{transform:scale(.86)}.new-banner.closing{transform:translate(-50%,0) scale(.94);opacity:0;transition:transform .26s ease,opacity .22s ease}
.empty-chat{height:100%;display:grid;place-items:center;text-align:center;color:var(--sub);padding:40px}.empty-chat h2{margin:0 0 8px;color:var(--text);font-size:23px}.empty-chat p{margin:0;font-size:14px}
.auth{height:100%;overflow:auto;display:flex;padding:calc(22px + env(safe-area-inset-top)) 22px 22px;background:radial-gradient(58% 60% at 6% 0%,rgba(0,130,200,.22) 0%,transparent 62%),radial-gradient(52% 58% at 99% 100%,rgba(59,169,224,.20) 0%,transparent 62%),radial-gradient(42% 48% at 86% 4%,rgba(124,92,255,.13) 0%,transparent 64%),linear-gradient(158deg,#F8FBFF 0%,#EEF4FD 46%,#F6FAFF 100%)}.auth-shell{margin:auto;width:min(1020px,100%);height:min(700px,calc(100dvh - 44px));display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,1fr);background:var(--surface);border:1px solid var(--line);border-radius:28px;overflow:hidden;box-shadow:0 30px 80px rgba(25,31,40,.14)}.auth-hero{position:relative;overflow:hidden;padding:34px 32px;color:#fff;background:linear-gradient(152deg,#3AA9E0 0%,#0082C8 46%,#0A3A5A 100%);display:flex;flex-direction:column;gap:20px}.auth-hero-top{display:flex;align-items:center;gap:10px;font-size:19px;font-weight:750;position:relative;z-index:1}.auth-hero-top .brand-mark{width:36px;height:36px;border-radius:12px;background:rgba(255,255,255,.22);box-shadow:none}.auth-hero-body{position:relative;z-index:1;margin-top:24px;flex:1;display:flex;flex-direction:column}.auth-hero-body h2{margin:0 0 12px;font-size:29px;line-height:1.36;letter-spacing:-.8px}.auth-hero-body p{margin:0;font-size:14.5px;line-height:1.65;color:rgba(255,255,255,.88)}.auth-hero-body b{color:#fff}.auth-points{list-style:none;margin:auto 0;padding:0;display:grid;gap:9px;position:relative;z-index:1}.auth-points li{display:flex;gap:9px;align-items:center;font-size:13.5px;color:rgba(255,255,255,.95);background:rgba(255,255,255,.14);padding:10px 13px;border-radius:13px}.auth-hero-foot{position:relative;z-index:1;margin-top:auto;padding-top:18px;font-size:12px;color:rgba(255,255,255,.72)}.auth-blob{position:absolute;border-radius:50%;filter:blur(30px);opacity:.5;pointer-events:none}.auth-blob.b1{width:230px;height:230px;right:-70px;top:-50px;background:#BFE6F8}.auth-blob.b2{width:180px;height:180px;left:-50px;bottom:70px;background:#7FC9EE}.auth-blob.b3{width:130px;height:130px;right:34px;bottom:-36px;background:#A6DAF4}.roll{display:inline-flex;align-items:flex-start;justify-content:center;overflow:hidden;vertical-align:bottom;background:rgba(255,255,255,.17);border-radius:999px;padding:0 16px;height:1.42em}.roll-track{display:block;transition:transform .62s cubic-bezier(.22,.8,.2,1)}.roll-track i{display:block;height:1.42em;line-height:1.42em;font-style:normal;white-space:nowrap}.auth-card{padding:30px 32px;display:flex;flex-direction:column;overflow:auto;overscroll-behavior:contain}.auth-card-inner{margin:auto 0;width:100%}.auth-title{font-size:27px;line-height:1.25;letter-spacing:-.7px;margin:0}.auth-desc{margin:9px 0 24px;color:var(--sub);font-size:13.5px}.form-error{margin:0 0 14px;padding:11px 13px;border-radius:12px;background:var(--danger-soft);color:var(--danger);font-size:13px;line-height:1.55;word-break:break-word}.form-error.hidden{display:none}.field{margin-bottom:14px}.field label{display:block;font-size:13px;color:var(--sub);margin-bottom:7px}.input{width:100%;height:50px;border:1px solid var(--line);border-radius:14px;background:#fff;padding:0 14px;outline:none;font-size:15px;transition:border .16s,box-shadow .16s}.input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,130,200,.20)}textarea.input{height:auto;min-height:110px;padding:13px;resize:vertical}.primary,.secondary{width:100%;height:50px;border-radius:13px;font-weight:660}.primary{background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;margin-top:7px}.secondary{background:var(--chip);margin-top:10px;color:var(--text)}.auth-foot{display:flex;justify-content:space-between;margin-top:16px}.auth-foot .text-btn{color:var(--sub);font-weight:560}
.overlay{position:fixed;inset:0;background:rgba(12,16,22,.36);backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px);z-index:300;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .22s ease,backdrop-filter .26s ease,-webkit-backdrop-filter .26s ease}.overlay.show{opacity:1;pointer-events:auto;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.overlay.closing{opacity:0;pointer-events:none;backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px)}.modal{position:relative;width:min(620px,calc(100vw - 28px));max-height:min(820px,calc(100dvh - 30px));overflow:auto;background:#fff;border-radius:22px;padding:24px;box-shadow:0 30px 90px rgba(0,0,0,.2);transition:transform .24s cubic-bezier(.2,.8,.2,1),opacity .2s ease}.overlay.show .modal{animation:modalIn .3s cubic-bezier(.2,.8,.2,1)}.overlay.closing .modal{opacity:0;transform:translateY(10px) scale(.985)}@keyframes modalIn{from{opacity:0;transform:translateY(16px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
/* 예쁜 스크롤바 (전역) — 얇고 둥글게, 다크모드 대응 */
:root{ --scroll-thumb:#C9D2DE; --scroll-thumb-hover:#A9B6C7; --scroll-track:transparent; }
html.dark, .dark{ --scroll-thumb:#3A414D; --scroll-thumb-hover:#4B5563; }
*{ scrollbar-width:thin; scrollbar-color:var(--scroll-thumb) var(--scroll-track); }
*::-webkit-scrollbar{ width:10px; height:10px; }
*::-webkit-scrollbar-track{ background:var(--scroll-track); }
*::-webkit-scrollbar-thumb{ background:var(--scroll-thumb); border-radius:999px; border:3px solid transparent; background-clip:content-box; min-height:40px; }
*::-webkit-scrollbar-thumb:hover{ background:var(--scroll-thumb-hover); background-clip:content-box; border:3px solid transparent; }
*::-webkit-scrollbar-corner{ background:transparent; }
.side-body::-webkit-scrollbar-thumb, .messages::-webkit-scrollbar-thumb, .modal::-webkit-scrollbar-thumb{ border-width:3px; }
/* 모달 등 얇은 영역은 기존 숨김 대신 예쁜 바 유지 */
.modal,.modal .modal-scroll,.select-menu,.sound-list,.snap-list{ scrollbar-width:thin; -ms-overflow-style:auto; }
.modal::-webkit-scrollbar,.modal .modal-scroll::-webkit-scrollbar,.select-menu::-webkit-scrollbar,.sound-list::-webkit-scrollbar,.snap-list::-webkit-scrollbar{ display:block; width:10px; }
/* 할인율 뱃지 (요금제 프로모션 앵커링) */
.discount-badge{ display:inline-block; font-size:11.5px; font-weight:800; padding:2px 8px; border-radius:999px; background:#FFF0F1; color:#D92D20; border:1px solid #F5C6C6; margin-left:6px; vertical-align:1px; }
.anchor-orig{ color:var(--muted); }
.anchor-promo{ color:var(--brand-strong); }
/* 수업중 뱃지 (시간표 자동 상태) */
.class-now-badge{ display:inline-block; font-size:11px; font-weight:800; padding:2px 8px; border-radius:999px; background:#E8F4FB; color:#0069A8; border:1px solid #9BD3EE; margin-left:6px; vertical-align:1px; }
/* 사이드바 접기/펼치기 (채팅 관리·전체 설정·로그아웃 포함) */
.side-section .side-section-body{ overflow:hidden; max-height:2000px; transition:max-height .28s ease, opacity .2s ease; opacity:1; }
.side-section.collapsed .side-section-body{ max-height:0 !important; opacity:0; pointer-events:none; }
.side-section .side-caret{ display:inline-block; transition:transform .2s ease; }
.side-section.collapsed .side-caret{ transform:rotate(-90deg); }
.side-bottom.side-section.collapsed .side-section-body{ display:none; }
/* 교사 전용 중요도 필터바 정리 (학생 화면엔 렌더 자체를 안 함) */
.imp-filter.teacher-only{ border-bottom:1px solid var(--line); }
/* ?�업 ?�단 ?�목·?�단 버튼 고정 (중간 ?�용�??�크�? */
.modal:has(.modal-actions){padding-bottom:0}
.modal.has-actions{padding-bottom:0}
.modal .desc,.modal h2{overflow-wrap:anywhere}
.modal-head{position:sticky;top:-24px;z-index:5;display:flex;align-items:flex-start;gap:10px;background:var(--surface);margin:-24px -24px 0;padding:24px 14px 12px 24px}
.modal-head-text{flex:1;min-width:0}
.modal .modal-head-text h2{margin:0;padding:0}
.modal .modal-head-text .desc{margin:6px 0 0}
.modal-head .modal-close{position:static;flex:0 0 auto;margin:0}
.modal .modal-actions{position:sticky;bottom:0;z-index:5;background:var(--surface);margin:22px -24px 0;padding:14px 24px 24px;border-top:0}
@media(max-width:820px){.modal-head{top:-20px;margin:-20px -20px 0;padding:20px 12px 12px 20px}.modal .modal-actions{bottom:0;margin:22px -20px 0;padding:14px 20px 20px}}.modal.small{width:min(450px,calc(100vw - 28px))}.modal h2{margin:0 0 8px;font-size:22px;letter-spacing:-.5px;padding-right:34px}.modal-close{position:absolute;top:14px;right:14px;width:34px;height:34px;border-radius:50%;background:transparent;color:var(--sub);display:grid;place-items:center;font-size:13px;line-height:1;z-index:2;transition:background .18s,transform .18s}.modal-close:hover{background:var(--hover);color:var(--text)}.modal-close:active{transform:scale(.94)}.desc{color:var(--sub);font-size:14px;line-height:1.6;margin:0 0 20px}.modal-actions{display:flex;gap:10px;margin-top:22px}.modal-actions>*{flex:1;height:46px;border-radius:13px}.cancel{background:var(--chip)}.confirm{background:var(--brand);color:#fff}.danger-btn{background:var(--danger-soft);color:var(--danger);font-weight:650}
.custom-select{position:relative}.select-button{width:100%;height:50px;border:1px solid var(--line);border-radius:14px;background:#fff;padding:0 14px;display:flex;align-items:center;justify-content:space-between;outline:none}.select-menu{position:fixed;z-index:1000;min-width:180px;max-width:calc(100vw - 24px);background:#fff;border:1px solid var(--line);border-radius:16px;padding:6px;box-shadow:0 20px 45px rgba(25,31,40,.16);opacity:0;transform-origin:top left;transform:translateY(-6px) scale(.985);pointer-events:none;transition:opacity .18s ease,transform .22s cubic-bezier(.2,.8,.2,1);max-height:min(300px,44dvh);overflow:auto}.select-menu.open{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}.select-menu.drop-up{transform-origin:bottom left;transform:translateY(6px) scale(.985)}.select-menu.drop-up.open{transform:translateY(0) scale(1)}.select-menu.closing{opacity:0;transform:translateY(-6px) scale(.985);pointer-events:none}.select-menu.drop-up.closing{transform:translateY(6px) scale(.985)}.select-option{width:100%;text-align:left;padding:11px 12px;border-radius:11px;font-size:14px}.select-option:hover,.select-option.active{background:var(--blue-soft);color:var(--blue)}
.tabs{display:flex;gap:6px;background:var(--chip);padding:4px;border-radius:12px;margin-bottom:18px}.modal>.tabs{margin-right:40px}.tab{height:38px;flex:1;border-radius:9px;color:var(--sub);font-size:13px;font-weight:620}.tab.active{background:var(--surface);color:var(--text);box-shadow:0 2px 8px rgba(25,31,40,.06)}.settings-list{display:grid;gap:10px}.setting-row{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line)}.setting-row:last-child{border-bottom:0}.setting-label strong{display:block;font-size:15px}.setting-label span{display:block;font-size:12px;color:var(--sub);margin-top:4px}.choice-row{display:flex;gap:6px}.choice{padding:8px 10px;border-radius:9px;background:var(--chip);font-size:12px}.choice.active{background:var(--brand-soft);color:var(--brand);font-weight:650}.check-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.check-chip{height:40px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--sub);font-size:13px}.check-chip.on{border-color:var(--brand-line);background:var(--brand-soft);color:var(--brand);font-weight:650}.list{display:flex;flex-direction:column;gap:8px}.list-item{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:14px;background:var(--surface);text-align:left}.list-item .meta{font-size:12px;color:var(--sub);margin-top:3px}.empty-side{padding:24px 12px;color:var(--muted);font-size:13px;text-align:center}
.drawer{position:fixed;inset:0;pointer-events:none;z-index:250}.drawer-back{position:absolute;inset:0;background:rgba(0,0,0,.26);opacity:0;transition:opacity .22s}.drawer-panel{position:absolute;left:0;top:0;bottom:0;width:min(320px,88vw);background:#fff;transform:translateX(-100%);transition:transform .28s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;box-shadow:10px 0 35px rgba(0,0,0,.08);padding-top:env(safe-area-inset-top)}.drawer.open{pointer-events:auto}.drawer.open .drawer-back{opacity:1}.drawer.open .drawer-panel{transform:none}
.modal-scroll{max-height:54dvh;overflow:auto}.muted{color:var(--muted)}.mini{font-size:12px}.divider{height:1px;background:var(--line);margin:16px 0}.right{margin-left:auto}.hidden{display:none!important}.status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--green);margin-right:5px}
@media(max-width:820px){:root{--composer:80px}.sidebar{display:none}.chat-head{padding:env(safe-area-inset-top) 16px 0;height:66px;flex-basis:66px}.messages{padding:20px 14px calc(var(--composer) + 20px + var(--kb,0px))}.message-content{max-width:84%}.composer{padding:10px 10px calc(10px + var(--kb,0px));z-index:240}.composer textarea{font-size:16px}.new-banner{width:calc(100% - 24px);top:8px}.modal{padding:20px}.check-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:520px){.auth-card{padding:24px;border-radius:20px}.auth-title{font-size:26px}.message .bubble{font-size:15px}.message-tools{opacity:1}.side-top{height:68px}.select-menu{max-height:42dvh}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
.mobile-only{display:none}
.global-banner{position:absolute;z-index:120;top:14px;left:50%;transform:translate(-50%,-130%);}
.global-banner.show{transform:translate(-50%,0)}
@media(max-width:820px){.mobile-only{display:grid}.global-banner{width:calc(100% - 24px);top:8px}}

.font-sm .chat-title,.font-sm .bubble,.font-sm .composer textarea{font-size:13px}.font-lg .chat-title,.font-lg .bubble,.font-lg .composer textarea{font-size:17px}.font-xl .chat-title,.font-xl .bubble,.font-xl .composer textarea{font-size:19px}.font-lg .room-name,.font-xl .room-name{font-size:16px}.font-xl .room-name{font-size:17px}
.font-sm .modal,.font-sm .admin-card{font-size:13px}.font-lg .modal,.font-lg .admin-card{font-size:16px}.font-xl .modal,.font-xl .admin-card{font-size:18px}
.send:disabled{opacity:.55;filter:saturate(.6)}
.send.sending{animation:sendPulse .7s ease infinite}
@keyframes sendPulse{0%,100%{transform:scale(1)}50%{transform:scale(.9)}}

/* ?�이??공�? 배너 */
.site-banner{flex:0 0 auto;padding:11px 20px;background:var(--blue-soft);color:var(--blue);font-size:14px;line-height:1.55;border-bottom:1px solid var(--line);z-index:40;position:relative}
.site-banner.hidden{display:none}
.site-banner-inner{width:min(980px,100%);margin:0 auto;word-break:break-word}
.site-banner a,.site-banner .site-banner-link{color:inherit;text-decoration:underline;font-weight:650;background:none;cursor:pointer}
.site-banner .site-banner-link{margin-left:8px}

/* 관리자 ?�이지 */
.admin-page{width:100%;height:100%;display:flex;flex-direction:column;background:var(--bg)}
.admin-head{height:64px;flex:0 0 64px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:env(safe-area-inset-top) 16px 0;position:relative;z-index:20}
.admin-head .icon-btn{flex:0 0 38px}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
/* 관리자: ?�내 ?�이지 ?�집 */
.page-edit{border:1px solid var(--line);border-radius:16px;padding:16px;margin:0 0 14px;background:var(--bg)}
.page-edit-head{display:flex;align-items:center;gap:10px;margin:0 0 12px}
.page-edit-head strong{font-size:15px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.page-btn-list{display:grid;gap:8px;margin-top:12px}
.page-btn-row{display:flex;gap:8px}
.page-btn-row .input{flex:1;min-width:0;height:44px}
/* ?�원 ?�퇴 ?�내 */
.danger-box{border:1px solid var(--danger-soft);background:var(--danger-soft);border-radius:14px;padding:14px 16px}
.danger-box p{margin:0 0 7px;font-size:13px;line-height:1.6;color:var(--text)}
.danger-box p:last-child{margin-bottom:0}
.danger-box b{color:var(--danger)}
/* ?�고 관�? ?�고 ?�점 ?�???�냅??*/
.report-detail{background:var(--chip);border-radius:12px;padding:12px 14px;font-size:13.5px;line-height:1.65;color:var(--text);white-space:pre-wrap;word-break:break-word}
.snap-list{max-height:min(42dvh,380px);overflow:auto;border:1px solid var(--line);border-radius:14px;padding:8px;background:var(--bg);overscroll-behavior:contain}
.snap-row{padding:8px 10px;border-radius:11px;margin-bottom:6px;background:var(--surface);border:1px solid var(--line)}
.snap-row:last-child{margin-bottom:0}
.snap-row.hit{border-color:var(--danger);background:var(--danger-soft)}
.snap-head{font-size:11.5px;color:var(--sub);margin-bottom:3px}
.snap-text{font-size:13.5px;line-height:1.55;color:var(--text);white-space:pre-wrap;word-break:break-word}
.admin-title{font-size:18px;font-weight:730;letter-spacing:-.3px}
.admin-sub{font-size:12px;color:var(--sub);margin-top:2px}
.admin-body{flex:1;min-height:0;overflow:auto;padding:18px}
.admin-wrap{width:min(1000px,100%);margin:0 auto}
.admin-tabs{display:flex;gap:6px;background:#f1f3f5;padding:4px;border-radius:13px;margin-bottom:18px;overflow-x:auto;scrollbar-width:thin}
.admin-tabs::-webkit-scrollbar{height:8px}
.admin-tabs .tab{flex:0 0 auto;padding:0 15px;white-space:nowrap}
.admin-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px;margin-bottom:16px}
.admin-card>h3{margin:0 0 4px;font-size:16px}
.admin-toolbar{display:flex;gap:8px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.admin-toolbar .input{flex:1;min-width:160px;height:44px}
.admin-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.admin-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.admin-chip{padding:3px 8px;border-radius:8px;background:#f2f4f6;color:var(--sub);font-size:11px}
.admin-chip.warn{background:var(--danger-soft);color:var(--danger)}
.list-item.tappable{transition:background .16s,border-color .16s,transform .16s}
.list-item.tappable:hover{background:#fbfcfe;border-color:#dbe1e8}
.list-item.tappable:active{transform:scale(.995)}

/* ?�식 ?�집�?*/
.rich-toolbar{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.re-btn{width:34px;height:32px;border-radius:9px;background:#f2f4f6;display:grid;place-items:center;font-size:13px;color:var(--text)}
.re-btn:hover{background:#e9ecf0}
.re-color{width:34px;height:32px;border-radius:9px;background:#f2f4f6;display:grid;place-items:center;overflow:hidden}
.re-color input{width:46px;height:46px;border:0;background:none;padding:0;cursor:pointer}
.rich-editor{min-height:84px;border:1px solid var(--line);border-radius:14px;padding:12px 14px;font-size:15px;line-height:1.6;outline:none;background:#fff;word-break:break-word}
.rich-editor:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,130,200,.20)}
.rich-editor:empty:before{content:attr(data-placeholder);color:var(--muted)}
.preview-banner{margin-top:10px;border:1px dashed var(--line);border-radius:14px;padding:12px 14px;min-height:46px;background:var(--blue-soft);word-break:break-word}
.preview-label{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--sub);margin:14px 0 6px}
.live-badge{padding:3px 9px;border-radius:9px;background:#f2f4f6;color:var(--sub);font-size:11px;font-weight:650}
.live-badge.on{background:var(--blue-soft);color:var(--blue)}
.seg{display:flex;gap:4px;background:#f1f3f5;padding:4px;border-radius:11px}
.seg-btn{flex:1;height:32px;border-radius:8px;font-size:12px;color:var(--sub)}
.seg-btn.active{background:#fff;color:var(--text);font-weight:650;box-shadow:0 1px 4px rgba(25,31,40,.08)}

/* ?�로??꾸�?�?*/
.avatar-opt{width:40px;height:40px;border-radius:50%;background:var(--chip);display:grid;place-items:center;font-size:19px;border:2px solid transparent;transition:border-color .16s,background .16s}
.avatar-opt.on{border-color:var(--blue);background:var(--blue-soft)}
.color-opt{width:30px;height:30px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px var(--line);transition:box-shadow .16s,transform .16s}
.color-opt.on{box-shadow:0 0 0 2px var(--blue)}
.color-opt:active{transform:scale(.94)}
.bio-text{color:var(--sub);font-size:14px;line-height:1.65;white-space:pre-wrap;word-break:break-word;margin:0}
.user-head{display:flex;gap:14px;align-items:center;margin-bottom:14px}
.user-head .avatar{width:56px;height:56px;font-size:22px}
.consent{display:flex;gap:10px;align-items:flex-start;padding:12px 13px;border:1px solid var(--line);border-radius:14px;background:#fbfcfe;font-size:12.5px;color:var(--sub);line-height:1.6;margin-bottom:10px}
.consent input{margin:3px 0 0;flex:0 0 16px;width:16px;height:16px;accent-color:var(--brand);cursor:pointer}
.consent b{color:var(--text)}
.consent span{flex:1;min-width:0}
.consent .text-btn{flex:0 0 auto;height:28px;padding:0 10px;font-size:12px;border-radius:9px}

/* ?�고 ?�???�동 강조 */
@keyframes flashMsg{0%,60%{background:rgba(0,130,200,.20)}100%{background:transparent}}
.message-row.flash{border-radius:14px;animation:flashMsg 1.8s ease}
.message-author .author-btn{font:inherit;color:var(--sub);font-weight:650}
.message-author .author-btn:hover{color:var(--blue)}

@media(max-width:820px){
  .admin-body{padding:14px}
  .admin-head{height:58px;flex-basis:58px}
  .admin-card{padding:15px;border-radius:16px}
  .site-banner{padding:10px 14px;font-size:13px}
}

/* ?�스??*/
.toast{position:fixed;left:50%;top:calc(10px + env(safe-area-inset-top));transform:translate(-50%,-160%);z-index:900;max-width:min(560px,calc(100vw - 24px));padding:12px 16px;border-radius:14px;background:#101828;color:#fff;font-size:14px;font-weight:600;line-height:1.5;box-shadow:0 14px 36px rgba(25,31,40,.45),0 0 0 1.5px rgba(148,163,184,.45);opacity:1;pointer-events:none;display:inline-flex;align-items:center;gap:9px;visibility:hidden;transition:transform .32s cubic-bezier(.2,.8,.2,1),visibility 0s linear .35s}
.toast.show{transform:translate(-50%,0);pointer-events:auto;visibility:visible;transition:transform .32s cubic-bezier(.2,.8,.2,1)}
.toast--info{box-shadow:0 14px 36px rgba(25,31,40,.45),0 0 0 1.5px rgba(148,163,184,.45)}
.toast--success{box-shadow:0 14px 36px rgba(25,31,40,.45),0 0 0 1.5px rgba(52,211,153,.85)}
.toast--error{box-shadow:0 14px 36px rgba(25,31,40,.45),0 0 0 1.5px rgba(248,113,113,.9)}
.toast-ico{flex:0 0 auto;display:grid;place-items:center;color:#34D399}
.toast-ico--success{color:#34D399}
.toast-ico--error{color:#F87171}
.toast-ico svg{width:15px;height:15px;display:block}
.toast-msg{flex:0 1 auto;text-align:center;word-break:keep-all}
.toast-x{flex:0 0 auto;background:transparent;border:0;color:rgba(255,255,255,.7);font-size:12px;line-height:1;padding:2px}
.toast-x:hover{color:#fff}
@media(prefers-reduced-motion:reduce){.toast{transition:none}}

/* ?�원가??로그???�면 반응??*/
@media(max-width:880px){
  .auth{padding:0;overflow:auto}
  .auth-shell{grid-template-columns:1fr;height:auto;min-height:100%;border:0;border-radius:0;box-shadow:none;margin:0}
  .auth-hero{padding:calc(26px + env(safe-area-inset-top)) 22px 24px;gap:0;border-radius:0}
  .auth-hero-body{margin-top:14px}
  .auth-hero-body h2{font-size:22px;margin-bottom:8px}
  .auth-hero-body p{font-size:13px}
  .auth-points{display:none}
  .auth-card{padding:24px 20px 32px;overflow:visible}
  .auth-title{font-size:23px}
  .auth-desc{margin-bottom:18px}
}

/* ?�이?�바 ??조절 */
.sb-resizer{flex:0 0 5px;width:5px;cursor:col-resize;position:relative;z-index:60}
.sb-resizer:after{content:"";position:absolute;left:2px;top:0;bottom:0;width:1px;background:var(--line);transition:background .16s,width .16s}
.sb-resizer:hover:after,.sb-resizer.dragging:after{background:var(--blue);width:2px}
body.resizing{cursor:col-resize;user-select:none}
body.resizing *{cursor:col-resize!important;user-select:none!important}
/* 프로필 옆 작은 접기 버튼 + 접힌 사이드바를 다시 여는 손잡이 */
.side-collapse-btn{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;flex:0 0 auto;color:var(--muted);background:var(--chip);border:1px solid var(--line);font-size:18px;line-height:1;transition:background .16s,color .16s,transform .16s}
.side-collapse-btn:hover{background:var(--hover);color:var(--text)}
.side-collapse-btn:active{transform:scale(.92)}
.sidebar{transition:width .24s cubic-bezier(.2,.8,.2,1),flex-basis .24s cubic-bezier(.2,.8,.2,1),opacity .16s ease,transform .24s cubic-bezier(.2,.8,.2,1)}
body.sidebar-collapsed .sidebar{width:0!important;flex-basis:0!important;border-right:0;opacity:0;transform:translateX(-10px);pointer-events:none;overflow:hidden}
body.sidebar-collapsed .sb-resizer{opacity:0;pointer-events:none}
.side-reopen{position:fixed;left:9px;top:14px;z-index:90;width:28px;height:40px;border-radius:0 12px 12px 0;background:var(--surface);border:1px solid var(--line);border-left:0;box-shadow:0 4px 14px rgba(15,23,42,.12);color:var(--brand);font-size:19px;font-weight:800;display:grid;place-items:center;opacity:0;pointer-events:none;transform:translateX(-8px);transition:opacity .18s ease,transform .24s cubic-bezier(.2,.8,.2,1),background .16s}
body.sidebar-collapsed .side-reopen{opacity:1;pointer-events:auto;transform:none}
.side-reopen:hover{background:var(--brand-soft)}
@media(max-width:820px){.sb-resizer{display:none}.side-collapse-btn,.side-reopen{display:none}body.sidebar-collapsed .sidebar{width:var(--sidebar)!important;flex-basis:var(--sidebar)!important;opacity:1;transform:none;pointer-events:auto;border-right:1px solid var(--line);overflow:visible}}
@media(max-width:820px){
  .input, textarea.input, .rich-editor, .select-button, input.input, textarea, select{font-size:16px !important}
  .lock-card .input{font-size:16px !important}
  /* Prevent iOS auto-zoom on focus - ensure all text inputs are 16px */
  input[type="text"], input[type="password"], input[type="email"], input[type="search"], input[type="tel"], input[type="url"]{font-size:16px !important}
  /* Extra: ensure auth and settings inputs are 16px */
  .auth-card .input, .admin-card .input, .modal .input, .settings-page .input{font-size:16px !important}
}

/* ??메시지 말풍???�장 모션?� Web Animations API�?처리 (app.js) */

/* 비�?번호 찾기 ?�내 문구 */
.reset-msg{margin:12px 0 0;font-size:12.5px;line-height:1.6;color:var(--sub);word-break:break-word}
.reset-msg.warn{color:var(--danger)}
.reset-msg.ok{color:var(--green)}
.reset-msg:empty{display:none}

/* ?�림 ?�정 */
.notify-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.sound-list{display:grid;gap:6px;max-height:200px;overflow:auto;padding:2px}
.sound-item{display:flex;align-items:center;gap:8px;padding:9px 11px;border:1px solid var(--line);border-radius:12px;background:var(--surface);text-align:left}
.sound-item.on{border-color:var(--blue);background:var(--blue-soft)}
.sound-item .grow{min-width:0}
.sound-item .title{font-size:13.5px}
.perm-badge{padding:3px 9px;border-radius:9px;font-size:11px;font-weight:650;background:#f2f4f6;color:var(--sub)}
.perm-badge.on{background:var(--blue-soft);color:var(--blue)}
.perm-badge.warn{background:var(--danger-soft);color:var(--danger)}

/* ??��??메시지 ?�시 */
.message-row.center{justify-content:center}
.message-row.center .message-content{align-items:center}
.deleted-pill{display:inline-block;padding:8px 15px;border-radius:999px;border:1px dashed var(--line);background:#f2f4f6;color:var(--muted);font-size:13px}
/* ?�퇴???�스??메시지 (??�� 메시지?� 구분?�는 ?�약 ?�자?? */
.system-pill{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:999px;font-size:13px;font-weight:600;border:1px solid transparent}
.system-pill.join{background:#e8f5e9;color:#1b7a3d;border-color:#bfe3c9}
.system-pill.leave{background:#eef1f4;color:#5b6470;border-color:#d8dde3}
.system-pill .sys-ico{font-size:13px}
.edited-badge{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;background:var(--brand-soft);color:var(--brand-strong);border:1px solid var(--brand-line);font-size:10.5px;font-weight:700;vertical-align:middle}
.mine .edited-badge{background:var(--brand-soft);color:var(--brand-strong);border:1px solid var(--brand-line)}
/* 메시지 ?�정 모드 �?*/
.edit-bar{display:flex;align-items:center;gap:8px;width:min(980px,100%);margin:0 auto 8px;padding:8px 12px;border-radius:12px;background:#fff8e1;border:1px solid #f0d48a;color:#7a5b00;font-size:12.5px}
.edit-bar .grow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.edit-bar button{flex:0 0 auto;height:30px;padding:0 12px;border-radius:9px;font-size:12.5px;font-weight:700}

/* ---------- ?�동 검??카드 · ?�의 ?�청 ---------- */
.mod-card{display:flex;flex-direction:column;gap:7px;max-width:min(430px,86vw);padding:11px 13px;border-radius:15px;border:1px dashed var(--line);background:#f7f8fa;text-align:left}
.mod-head{font-size:12px;font-weight:700;color:var(--sub)}
.mod-text{font-size:13.5px;line-height:1.55;color:var(--text);white-space:pre-wrap;word-break:break-word}
.mod-meta{font-size:11.5px;color:var(--muted)}
.mod-state{font-size:12px;color:var(--sub);padding:6px 10px;border-radius:10px;background:var(--surface);border:1px solid var(--line);text-align:center}
.mod-state.ok{color:var(--green);border-color:var(--green)}
.mod-appeal-btn{align-self:flex-start;height:32px;padding:0 14px;font-size:12.5px;border-radius:10px}
.mod-quote{margin:10px 0 0;padding:10px 12px;border-radius:12px;background:var(--bg);border:1px solid var(--line);font-size:13.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:var(--text)}
.admin-card .meta.mod-quote{margin:0;padding:8px 10px}
html.dark .mod-card{background:var(--dark-chip)}

/* ?�크 모드 */
html.dark{
  color-scheme:dark;
  --brand:#72BBFF;--brand-strong:#9DD2FF;--brand-soft:#132C44;--brand-line:#2F5F8C;
  --accent:#63CDFF;--accent-soft:#132C44;
  --blue:var(--brand);--blue-soft:var(--brand-soft);
  --text:#EDEFF6;--sub:#A3AABC;--muted:#7C8496;
  --bg:#101119;--surface:#1A1B26;--line:#2A2C3D;--danger:#FF6B6B;--danger-soft:#3A2124;--green:#34D399;
  --dark-soft:#141520;--dark-chip:#24263A;--dark-chip-hover:#2F3149;--dark-hover:#1D1F2E;
  --hover:#22243A;--chip:#24263A
}
html.dark .sidebar,html.dark .profile-card,html.dark .chat-head,html.dark .room-settings-head,html.dark .chat-manage-head,html.dark .bubble,html.dark .composer-inner,html.dark .modal,html.dark .input,html.dark textarea.input,html.dark .select-button,html.dark .select-menu,html.dark .list-item,html.dark .drawer-panel,html.dark .admin-head,html.dark .admin-card,html.dark .rich-editor,html.dark .check-chip,html.dark .auth-card,html.dark .auth-shell{background:var(--surface)}
html.dark .messages-wrap{background:var(--dark-soft)}
html.dark .composer{background:linear-gradient(to top,rgba(24,27,31,.99) 72%,rgba(24,27,31,0))}
html.dark .composer-inner,html.dark .modal{box-shadow:0 8px 30px rgba(0,0,0,.45)}
html.dark .modal{box-shadow:0 30px 90px rgba(0,0,0,.6)}
html.dark .icon-btn,html.dark .soft-btn,html.dark .modal-close,html.dark .re-btn,html.dark .re-color,html.dark .choice,html.dark .cancel,html.dark .avatar,html.dark .room-icon,html.dark .avatar-opt,html.dark .tabs,html.dark .admin-tabs,html.dark .seg,html.dark .secondary{background:var(--dark-chip)}
html.dark .icon-btn{color:var(--sub)}
html.dark .primary{background:#2E86D6}html.dark .primary:hover{background:#3E95DF}
/* ?�크모드: ??글?��? ?�라가??브랜??채�??� ???�계 진하�?(본문 ?��??�보) */
html.dark .brand-mark,html.dark .boot-mark,html.dark .send,html.dark .mine .bubble,html.dark .message-row.mine.report-target .bubble{background:linear-gradient(140deg,#2E86D6 0%,#17538F 100%)}
html.dark .icon-btn:hover,html.dark .soft-btn:hover,html.dark .modal-close:hover{background:var(--dark-chip-hover)}
html.dark .room:hover,html.dark .profile-card:hover{background:var(--dark-hover);border-color:#333a42}
html.dark .room.active{background:var(--blue-soft)}
html.dark .room.active .room-icon{background:#17456B;color:var(--brand)}
html.dark .room-icon{color:var(--sub)}
html.dark .tab.active,html.dark .seg-btn.active{background:#2f343b;box-shadow:none}
html.dark .list-item.tappable:hover{background:#252a31;border-color:#333a42}
html.dark .side-top,html.dark .side-bottom{border-color:var(--line)}
html.dark .consent{background:#1b1f24;border-color:var(--line)}
html.dark .drawer-back{background:rgba(0,0,0,.55)}
html.dark .new-banner{background:#2b3138;box-shadow:0 15px 36px rgba(0,0,0,.5)}
html.dark .overlay{background:rgba(0,0,0,.55)}
html.dark .site-banner{border-bottom-color:var(--line)}
html.dark .preview-banner{border-color:#39404a}
html.dark .settings-list,html.dark .setting-row{border-color:var(--line)}
html.dark .avatar img{filter:brightness(.95)}
html.dark .auth{background:radial-gradient(58% 60% at 6% 0%,rgba(0,130,200,.24) 0%,transparent 62%),radial-gradient(52% 58% at 99% 100%,rgba(59,169,224,.16) 0%,transparent 62%),radial-gradient(42% 48% at 86% 4%,rgba(124,92,255,.18) 0%,transparent 64%),linear-gradient(158deg,#0B1119 0%,#0E2033 46%,#090D14 100%)}
html.dark .auth-shell{border-color:var(--line);box-shadow:0 30px 80px rgba(0,0,0,.55)}
html.dark .toast{background:#2f343b;color:#fff}
html.dark .deleted-pill{background:var(--dark-chip);border-color:var(--line)}
html.dark .boot-ripple{border-color:#3AA9E0}
html.dark .boot-dots i{background:#3AA9E0}

/* ---------- 목록 ??카테고리) + ?�어????���?---------- */
.room-group{margin-bottom:12px;border-radius:14px;padding:2px 0;transition:background .16s ease,box-shadow .16s ease}
.room-group>.side-title{padding:0 8px 8px}
.room-group .group-count{margin-left:auto;font-size:11px;font-weight:700;color:var(--muted);background:#f2f4f6;border-radius:999px;min-width:20px;padding:1px 7px;text-align:center}
.room-group.empty{display:none}
body.room-dragging .room-group.empty{display:block}
body.room-dragging .room-group{background:rgba(0,130,200,.08)}
.room-group .group-drop-hint{margin:2px 8px 8px;padding:12px;border:1.5px dashed var(--line);border-radius:12px;font-size:12px;color:var(--muted);text-align:center}
body.room-dragging .room-group.drop-over{background:var(--blue-soft);box-shadow:inset 0 0 0 2px var(--blue)}
body.room-dragging .room-group.drop-over .group-count{background:var(--blue);color:#fff}
.room.drag-src{opacity:.32}
.room-drag-clone{position:fixed;z-index:9999;pointer-events:none;margin:0;background:#fff;border-radius:14px;transform:rotate(-1.5deg) scale(1.03);box-shadow:0 18px 40px rgba(15,23,42,.28)}
.group-row-btns{display:flex;gap:6px;flex:0 0 auto;margin-left:10px}.group-row-btns .soft-btn{flex:0 0 auto;min-width:38px;padding:0 10px;height:34px}
.group-row-btns .soft-btn:disabled{opacity:.35;cursor:default}
body.room-dragging{cursor:grabbing;user-select:none;-webkit-user-select:none}
html.dark .room-group .group-count{background:var(--dark-chip)}
html.dark body.room-dragging .room-group{background:rgba(59,169,224,.14)}
html.dark body.room-dragging .room-group.drop-over{background:#17456B}
html.dark .room-drag-clone{background:#22262c}

/* ---------- 초�? 코드 ---------- */
.code-row{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:#f8fafc}
.code-row .grow{flex:1;min-width:0}
.code-label{font-size:12px;color:var(--sub);margin-bottom:5px}
.code-value,.code-chip{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:750;letter-spacing:2.5px;color:var(--text)}
.code-value{font-size:19px}
.code-chip{font-size:14px;background:#f2f4f6;border-radius:10px;padding:7px 12px;letter-spacing:2px}
.code-input{letter-spacing:3px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:700;text-transform:uppercase}
.code-box{margin:0 0 4px;padding:16px;border-radius:14px;background:#f2f4f6;text-align:center;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:26px;font-weight:800;letter-spacing:6px;color:var(--text);user-select:all;-webkit-user-select:all}
html.dark .code-row{background:#1b1f24;border-color:var(--line)}
html.dark .code-chip,html.dark .code-box{background:var(--dark-chip)}

/* ---------- 고정 ?�림 (초�? 거절 ??· X로만 ?�힘) ---------- */
.sticky-root{position:fixed;left:50%;top:calc(12px + env(safe-area-inset-top));transform:translateX(-50%);z-index:880;display:flex;flex-direction:column;gap:10px;align-items:center;pointer-events:none;width:min(420px,calc(100vw - 32px))}
.sticky-card{pointer-events:auto;display:flex;align-items:flex-start;gap:12px;width:100%;padding:14px 14px 14px 16px;border-radius:16px;background:#191f28;color:#fff;box-shadow:0 18px 42px rgba(25,31,40,.28);opacity:0;transform:translateY(-18px) scale(.97);transition:transform .28s cubic-bezier(.2,.8,.2,1),opacity .22s ease}
.sticky-card.show{opacity:1;transform:translateY(0) scale(1)}
.sticky-card.closing{opacity:0;transform:translateY(-10px) scale(.96);transition:transform .24s ease,opacity .2s ease}
.sticky-card .grow{flex:1;min-width:0}
.sticky-card .title{font-size:13.5px;font-weight:700}
.sticky-card .text{font-size:12px;margin-top:4px;opacity:.85;line-height:1.5;word-break:break-word}
html.dark .sticky-card{background:#2f343b}
.sticky-card .sticky-actions{margin-top:12px}
.sticky-btns{display:flex;gap:12px;align-items:center}
.sticky-btn{margin:0;width:auto;flex:0 0 auto;white-space:nowrap;height:34px;padding:0 16px;border-radius:11px;font-size:13px;font-weight:650;transition:background .16s ease,transform .16s ease,filter .16s ease}
.sticky-btn.primary{background:var(--blue);color:#fff}
.sticky-btn.primary:hover{filter:brightness(1.07)}
.sticky-btn.ghost{background:rgba(255,255,255,.14);color:#fff}
.sticky-btn.ghost:hover{background:rgba(255,255,255,.24)}
.sticky-btn:active{transform:scale(.96)}
.sticky-check{display:flex;align-items:center;gap:7px;margin-top:11px;font-size:12px;color:rgba(255,255,255,.82);cursor:pointer;user-select:none}
.sticky-check input{width:15px;height:15px;margin:0;accent-color:var(--blue);cursor:pointer}
html.dark .sticky-btn.ghost{background:rgba(255,255,255,.12)}
.pair-btns{display:flex;gap:14px;flex:0 0 auto;align-items:center}

/* ---------- 공유 범위 ?�시(?�른 ?�교 / ?�른 ?�급) ---------- */
.share-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-left:6px;vertical-align:middle;transform:translateY(-1px);box-shadow:0 0 0 2px #fff}
.share-dot.cross-school{background:#f5b400}
.share-dot.cross-class{background:#12b980}
.share-pill{display:inline-flex;align-items:center;gap:5px;margin-left:8px;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:700;vertical-align:middle;white-space:nowrap}
.share-pill.cross-school{background:#fff3cd;color:#8a6100}
.share-pill.cross-class{background:#dcf6e8;color:#0b6b42}
.icon-count{font-size:10px;font-weight:750;margin-left:1px;color:var(--sub)}
.icon-btn.icon-count-btn{display:flex;align-items:center;justify-content:center;gap:1px;padding:0 4px;font-size:14px}
.icon-btn.icon-count-btn .icon-count{margin-left:0}

/* ---------- 메시지 골라????번에 ??�� ---------- */
.select-bar{display:flex;align-items:center;gap:8px;padding:9px 16px;background:var(--brand-soft);border-bottom:1px solid var(--line);flex:0 0 auto}
.select-bar .grow{flex:1;min-width:0;font-size:13px;font-weight:650;color:var(--brand-strong)}
.select-bar .soft-btn{flex:0 0 auto;height:34px;padding:0 12px;font-size:13px;border-radius:13px}
.msg-pick{flex:0 0 auto;width:22px;height:22px;border-radius:50%;border:1.5px solid var(--line);background:#fff;color:transparent;font-size:11px;line-height:1;display:grid;place-items:center;align-self:center;transition:background .15s ease,border-color .15s ease,color .15s ease}
.msg-pick.on{background:var(--blue);border-color:var(--blue);color:#fff}
.msg-pick.blank{border-color:transparent;background:transparent}

/* ---------- ?�용 ?��? ?�내 / ?�의 ?�기 ---------- */
.suspend-box{margin-top:4px;padding:16px;border-radius:16px;background:var(--danger-soft);border:1px solid #ffd7da}
.suspend-label{font-size:12px;font-weight:750;color:var(--danger);margin-bottom:6px}
.suspend-text{font-size:14.5px;line-height:1.65;color:var(--text);white-space:pre-wrap;word-break:break-word}
.suspend-meta{margin-top:10px;font-size:12px;color:var(--sub)}
.admin-btns{display:flex;gap:8px;margin-top:12px}
.admin-btns .soft-btn{flex:1;height:38px;font-size:13px;border-radius:13px}
.appeal-text{margin-top:8px;padding:10px 12px;border-radius:12px;background:#f7f8fa;border:1px solid var(--line);font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.appeal-btns{display:flex;gap:8px;flex:0 0 auto;margin-left:10px}
html.dark .share-dot{box-shadow:0 0 0 2px #16191d}
html.dark .share-pill.cross-school{background:#4a3c12;color:#ffd873}
html.dark .share-pill.cross-class{background:#123a2a;color:#7ee2b3}
html.dark .select-bar{background:var(--brand-soft);border-color:var(--line)}
html.dark .msg-pick{background:var(--dark-chip);border-color:var(--line)}
html.dark .suspend-box{background:#3a2224;border-color:#5a2f33}
html.dark .appeal-text{background:#1b1f24;border-color:var(--line)}

/* ---------- 모바?? 목록 기�? + 채팅�??�른쪽에???�라?�드 진입 ---------- */
@media(max-width:820px){
  #chat{position:fixed;inset:0;z-index:260;background:var(--bg);transform:translateX(100%);transition:transform .3s cubic-bezier(.2,.8,.2,1)}
  body.m-chat-open #chat{transform:none}
  .drawer-panel{width:100vw!important}
  .mobile-back{display:none!important}
  body.m-chat-open .mobile-back{display:grid!important}
  body.m-chat-open .chat-head [data-action="open-drawer"]{display:none!important}
}

/* ---------- 좁�? ?�면?�서 채팅�?목록 ?�기 ---------- */
.drawer-fab{display:none}
@media(max-width:820px){
  .drawer-fab{display:inline-flex;position:fixed;top:calc(10px + env(safe-area-inset-top));left:12px;z-index:230;align-items:center;gap:7px;height:42px;padding:0 16px;border-radius:14px;background:#fff;border:1px solid var(--line);box-shadow:0 8px 24px rgba(25,31,40,.12);font-size:13.5px;font-weight:650;color:var(--text)}
  .drawer-fab span{font-size:16px;line-height:1}
  .drawer-fab:active{transform:scale(.97)}
}
html.dark .drawer-fab{background:var(--surface);border-color:var(--line);box-shadow:0 8px 24px rgba(0,0,0,.45)}

/* ---------- 채팅 ?�금 ?�내 (?�?�아??· 채팅 ?��? · ?�배 ?�한 · 경고) ---------- */
.compose-lock{flex-direction:column;align-items:center;gap:4px;padding:14px 16px;text-align:center;color:var(--sub)}
.compose-lock b{color:var(--danger);font-variant-numeric:tabular-nums}
.compose-lock .lock-reason{font-size:11.5px;color:var(--muted)}
.warn-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;background:var(--danger-soft);color:var(--danger);font-size:11px;font-weight:700}
/* ---------- 알약(Pill) 태그: 네트워크·공유 상태 ---------- */
.tagpill{display:inline-flex;align-items:center;gap:4px;margin-left:6px;padding:2px 9px;border-radius:999px;font-size:10.5px;font-weight:800;vertical-align:middle;white-space:nowrap;letter-spacing:-.2px}
.tagpill.net-internal{background:#2563EB;color:#fff}
.tagpill.net-external{background:#16A34A;color:#fff}
.tagpill.share-other-class{background:#ede9fe;color:#6d28d9}
.tagpill.share-other-school{background:#ffedd5;color:#c2410c}
.tagpill.muted-pill{background:var(--chip);color:var(--muted)}
html.dark .tagpill.share-other-class{background:#2e2a5a;color:#c4b5fd}
html.dark .tagpill.share-other-school{background:#4a2c12;color:#fdba74}
.chat-title .tagpill{margin-left:8px}
/* ---------- 조직도 트리 ---------- */
.org-dep{margin-bottom:2px}
.org-dep-head{display:flex;align-items:center;gap:6px;width:100%;padding:8px 6px;font-size:13.5px;font-weight:750;color:var(--text);border-radius:9px}
.org-dep-head:hover{background:var(--hover)}
.org-dep-body{padding-left:6px;border-left:2px solid var(--line);margin-left:8px}
.org-user{display:flex;align-items:center;gap:8px;width:100%;padding:7px 6px;border-radius:9px;font-size:13px;color:var(--text);text-align:left}
.org-user:hover{background:var(--hover)}
.org-user .grow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-badge{font-size:10.5px;font-weight:800;padding:2px 8px;border-radius:999px;white-space:nowrap}
.st-badge.ok{background:#dcfce7;color:#15803d}
.st-badge.busy{background:#fee2e2;color:#b91c1c}
.st-badge.trip{background:#ffedd5;color:#c2410c}
.st-badge.away{background:#fef9c3;color:#a16207}
.st-badge.off{background:#e2e8f0;color:#64748b}

/* ---------- ?�일 · ?�진 ?�송 ---------- */
.attach-img{display:block;max-width:min(300px,68vw);max-height:320px;border-radius:12px;cursor:zoom-in}
.bubble .attach-img+.attach-text{margin-top:8px}
.attach-text{white-space:pre-wrap;word-break:break-word}
.attach-card{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:12px;background:rgba(0,0,0,.05);min-width:180px;text-align:left}
.mine .attach-card{background:rgba(255,255,255,.16)}
.attach-card .attach-ico{flex:0 0 auto;width:34px;height:34px;border-radius:10px;background:rgba(0,0,0,.06);display:grid;place-items:center;font-size:16px}
.mine .attach-card .attach-ico{background:rgba(255,255,255,.2)}
.attach-card .attach-name{font-size:13px;font-weight:650;word-break:break-all;line-height:1.35}
.attach-card .attach-size{font-size:11px;color:var(--muted)}
.mine .attach-card .attach-size{color:rgba(255,255,255,.75)}
.attach-view{display:block;width:100%;max-height:70dvh;object-fit:contain;border-radius:14px;margin-top:6px}
.composer-progress{position:absolute;left:0;right:0;bottom:0;height:3px;background:transparent}
.attach-hint{position:absolute;left:50%;transform:translateX(-50%);top:-26px;padding:4px 12px;border-radius:999px;background:#191f28;color:#fff;font-size:11.5px;white-space:nowrap}

/* ---------- 관리자 · 채팅 관�?---------- */
.word-box{width:100%;min-height:92px;resize:vertical;font-family:inherit}
.word-preview{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.word-chip{padding:4px 10px;border-radius:999px;background:#f2f4f6;color:var(--sub);font-size:12px}
.word-chip.block{background:var(--danger-soft);color:var(--danger)}
.word-chip.warn{background:#fff3cd;color:#8a6100}
.timeout-chip{padding:3px 8px;border-radius:8px;background:var(--danger-soft);color:var(--danger);font-size:11px}
html.dark .word-chip{background:var(--dark-chip);color:var(--muted)}
html.dark .word-chip.warn{background:#4a3c12;color:#ffd873}

/* ---------- 채팅 ?�더 버튼 (?��? ?�면) ---------- */
.wide-only{display:flex}
.narrow-only{display:none!important}
.head-btn{display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 12px;border-radius:999px;background:transparent;border:1px solid transparent;color:var(--sub);font-size:13.5px;font-weight:620;transition:background .18s,color .18s,transform .18s;white-space:nowrap}
.head-btn:hover{background:var(--hover);color:var(--text)}
.head-btn:active{transform:scale(.97)}
.head-btn .hb-ico{font-size:15px;line-height:1}
.head-btn .hb-label{font-size:13.5px}
.head-btn .hb-count{padding:1px 7px;border-radius:999px;background:var(--chip);color:var(--sub);font-size:11.5px;font-weight:750}
.head-btn .hb-plus{color:var(--brand);font-weight:800;font-size:12px}
html.dark .head-btn{background:transparent;color:var(--sub)}
html.dark .head-btn:hover{background:var(--dark-chip)}
html.dark .head-btn .hb-count{background:var(--dark-chip)}
.manage-btn{width:100%;margin-bottom:8px;display:flex;align-items:center;justify-content:center;gap:7px;background:var(--blue-soft)!important;color:var(--blue)!important;font-weight:700}
html.dark .manage-btn{background:var(--brand-soft)!important;color:var(--brand)!important}

/* ---------- 채팅�?검??---------- */
.search-inner{gap:6px;padding:6px 8px 6px 14px}
.search-ico{font-size:15px;color:var(--sub)}
.search-input{flex:1;min-width:0;border:0;outline:none;background:transparent;font-size:15px;padding:11px 2px;color:var(--text)}
.search-count{font-size:12px;color:var(--sub);font-weight:650;white-space:nowrap;font-variant-numeric:tabular-nums}
.icon-btn.sm{width:38px;height:38px;flex:0 0 38px;border-radius:50%;font-size:12px}
.message-row.msg-hit .bubble{box-shadow:0 0 0 3px rgba(245,180,0,.4)}
.message-row.msg-hit-current .bubble{box-shadow:0 0 0 3px var(--blue)}

/* ---------- 참여???�널 (채팅창을 밀�??�어?�다) ---------- */
.chat-body{flex:1;min-height:0;display:flex}
.chat-main{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;position:relative}
.member-panel{flex:0 0 auto;width:0;overflow:hidden;background:#fff;border-left:0 solid var(--line);transition:width .28s cubic-bezier(.2,.8,.2,1),border-left-width .28s;display:flex}
.member-panel.open{width:var(--mpanel);border-left-width:1px}
.member-panel-inner{width:var(--mpanel);flex:0 0 var(--mpanel);display:flex;flex-direction:column;min-height:0;opacity:0;transform:translateX(14px);transition:opacity .22s ease,transform .3s cubic-bezier(.2,.8,.2,1)}
.member-panel.open .member-panel-inner{opacity:1;transform:none}
.mp-resizer{flex:0 0 7px;width:7px;cursor:col-resize;position:relative;z-index:5;display:none}
.chat-body.panel-open .mp-resizer{display:block}
.mp-resizer:after{content:"";position:absolute;left:3px;top:0;bottom:0;width:1px;background:var(--line);transition:background .16s,width .16s}
.mp-resizer:hover:after,.mp-resizer.dragging:after{background:var(--brand);width:2px}
body.resizing-panel{cursor:col-resize;user-select:none}
body.resizing-panel *{cursor:col-resize!important;user-select:none!important}
.member-panel-head{height:64px;flex:0 0 64px;display:flex;align-items:center;justify-content:space-between;padding:0 14px 0 18px;border-bottom:1px solid var(--line)}
.member-panel-head strong{font-size:15px}
.member-list{flex:1;min-height:0;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:8px}
html.dark .member-panel{background:var(--surface)}

/* ---------- 말풍??메뉴 / 공감 ---------- */
.float-menu{position:fixed;z-index:800;min-width:170px;padding:6px;border-radius:14px;background:#fff;border:1px solid var(--line);box-shadow:0 16px 40px rgba(25,31,40,.18);opacity:0;transform:translateY(6px) scale(.98);transition:opacity .14s,transform .16s}
.float-menu.open{opacity:1;transform:none}
.float-menu.closing{opacity:0;transform:translateY(6px) scale(.98);pointer-events:none}
.float-menu .float-title{padding:6px 10px 8px;font-size:11.5px;color:var(--muted);border-bottom:1px solid var(--line);margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px}
.float-menu button{display:block;width:100%;text-align:left;padding:9px 10px;border-radius:9px;font-size:13.5px;color:var(--text)}
.float-menu button:hover{background:#f2f4f6}
.float-menu button.danger{color:var(--danger)}
.float-menu .rx-picker{display:flex;gap:3px;padding:2px}
.float-menu .rx-picker button{width:38px;height:38px;display:grid;place-items:center;font-size:19px;padding:0;text-align:center}
html.dark .float-menu{background:var(--surface);border-color:var(--line)}
html.dark .float-menu button:hover{background:var(--dark-chip)}
html.dark .float-menu .float-title{border-color:var(--line)}
.rx-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.message-row.mine .rx-row{justify-content:flex-end}
.rx-chip{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 9px;border-radius:999px;background:#f2f4f6;border:1px solid var(--line);font-size:13px}
.rx-chip .rx-n{font-size:11px;font-weight:750;color:var(--sub)}
.rx-chip.mine{background:var(--brand-soft);border-color:var(--brand-line)}
.rx-chip.mine .rx-n{color:var(--blue)}
.rx-add{height:26px;padding:0 8px;border-radius:999px;background:#f2f4f6;border:1px solid var(--line);font-size:12px;color:var(--sub);display:inline-flex;align-items:center}
.rx-add span{font-size:10px;margin-left:1px}
.rx-add:hover{background:#e9ecf0}
html.dark .rx-chip,html.dark .rx-add{background:var(--dark-chip);border-color:var(--line)}
html.dark .rx-chip.mine{background:var(--brand-soft);border-color:var(--brand-line)}

/* ---------- ?�기까�? ?�었?�요 ---------- */
.read-divider{display:flex;align-items:center;gap:10px;margin:16px 0 10px;color:var(--blue);font-size:11.5px;font-weight:700}
.read-divider:before,.read-divider:after{content:"";height:1px;flex:1;background:currentColor;opacity:.35}

/* ---------- ?�고??메시지 강조 ---------- */
.message-row.report-target{border-radius:14px;animation:flashMsg 1.8s ease}
.message-row.report-target .bubble{box-shadow:0 0 0 3px var(--danger);background:#fff5f5}
.message-row.mine.report-target .bubble{background:var(--blue)}
.report-badge{margin-left:6px;padding:2px 7px;border-radius:999px;background:var(--danger-soft);color:var(--danger);font-size:10.5px;font-weight:750}
html.dark .message-row.report-target .bubble{background:#3a2224}

/* ---------- ?�속 ?�태 ??---------- */
.avatar{position:relative}
.presence-dot{position:absolute;right:1px;bottom:1px;width:10px;height:10px;border-radius:50%;border:1.5px solid #fff;background:#b0b8c1;z-index:2}
.presence-dot.online{background:#12b980}
.presence-dot.away{background:#f5b400}
.presence-dot.dnd{background:var(--danger)}
.presence-dot.offline{background:#b0b8c1}
.presence-dot.hidden{background:transparent;border-color:transparent;box-shadow:none}
.presence-dot.inline{position:static;width:9px;height:9px;flex:0 0 9px;border-width:1.5px}
html.dark .presence-dot{border-color:#16191d}
html.dark .presence-dot.inline{border-color:var(--surface)}
/* ?�이?�바 ?�로???�태 ??(??�� ?�래???�재 ?�태 + ?�롭?�운 ?�살?? */
.profile-card{text-align:left}
.profile-open{background:none;border:0;padding:0;cursor:pointer;color:inherit;text-align:left}
button.profile-open.avatar-dot{line-height:0;border-radius:50%}
.profile-name.profile-open{font-size:15px;font-weight:680;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;width:100%}
.presence-row{display:flex;align-items:center;gap:6px;margin-top:5px;min-width:0}
.profile-meta-line{display:flex;align-items:center;gap:6px;margin-top:3px;min-width:0;font-size:12px;color:var(--sub)}
.profile-meta-line .profile-meta{margin-top:0;flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.profile-meta-line .presence-dot{flex:0 0 auto}
.profile-meta-line .presence-text{flex:0 0 auto}
.presence-row.static{margin-top:6px}
.presence-text{font-size:12px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.presence-btn,.presence-menu-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:0;padding:3px 6px;margin:-3px -6px;border-radius:7px;color:var(--sub);font-size:12px;cursor:pointer;transition:background .16s,color .16s}
.presence-btn:hover,.presence-menu-btn:hover{background:var(--hover);color:var(--text)}
.presence-btn:active,.presence-menu-btn:active{transform:scale(.96)}
.presence-menu-btn .presence-text{color:inherit}
.presence-caret{font-size:13px;line-height:1;color:var(--muted)}
.presence-menu-btn:hover .presence-caret{color:var(--text)}
/* ?�교 ??�� �?(반장·부반장 ??· 중복 ?�시 가?? */
.role-chips{display:inline-flex;flex-wrap:wrap;gap:4px;vertical-align:middle}
.member-panel .role-chips,.user-head .role-chips{display:flex;margin-top:6px}
.role-chip{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;background:var(--brand-soft);color:var(--brand-strong);font-size:11px;font-weight:700;white-space:nowrap}
html.dark .role-chip{background:var(--brand-soft);color:var(--brand)}
.select-menu .select-option{display:flex;align-items:center;gap:9px}
.select-menu .select-option .presence-dot{position:static;flex:0 0 9px;width:9px;height:9px}

/* ---------- ?�로???�진 ---------- */
.photo-row{display:flex;gap:12px;align-items:center}
.photo-preview{width:78px;height:78px;flex:0 0 78px;border-radius:50%;overflow:hidden;background:#eef2f6;display:grid;place-items:center;color:var(--muted);font-size:11px;text-align:center}
.photo-preview img{width:100%;height:100%;object-fit:cover}
.avatar-pick{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:8px}

/* ---------- 좁�? ?�면 (모바?? ---------- */
@media(max-width:820px){
  .wide-only{display:none!important}
  .narrow-only{display:grid!important}
  .chat-head{gap:8px;padding:0 12px}
  .chat-head .icon-btn{flex:0 0 auto}
  .chat-head-left{flex:1;min-width:0}
  .chat-title{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .chat-desc{display:none}
  /* 좁�? ?�면?�서??참여???�널 ??�� ?�면??맞춰 ?�한?�다 */
  .member-panel.open{width:min(var(--mpanel),72vw)}
  .member-panel-inner{width:min(var(--mpanel),72vw);flex:0 0 min(var(--mpanel),72vw)}
}
@media(hover:none){
  .messages{-webkit-touch-callout:none}
  .bubble{user-select:none;-webkit-user-select:none}
}

/* ---------- ?�로???�진 ???�속 ?�태 ??(?�그?��????�짝 ?�힘) ---------- */
.avatar{overflow:visible}
.avatar-face{width:100%;height:100%;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:inherit;color:inherit;font-size:inherit;font-weight:650}
.presence-dot{right:-2px;bottom:-2px;width:11px;height:11px;border:2px solid #fff;box-shadow:0 0 0 1px rgba(25,31,40,.06)}
.avatar.large .presence-dot{width:13px;height:13px;right:-1px;bottom:-1px}

/* ---------- 채팅 목록 · ??---------- */
.side-title-btns{display:flex;gap:10px;align-items:center}
.cat-caret{display:inline-block;transition:transform .22s ease;font-size:10px;color:var(--muted);margin-right:2px}
.room-group.collapsed .cat-caret{transform:rotate(-90deg)}
.side-title[data-action]{cursor:pointer;user-select:none}
.side-title[data-sidetitle]{cursor:grab;user-select:none;touch-action:none}
.side-title[data-sidetitle]:active{cursor:grabbing}
.room-list-body{display:grid;grid-template-rows:1fr;transition:grid-template-rows .28s cubic-bezier(.2,.8,.2,1)}
.room-list-body>.rl-inner{overflow:hidden;min-height:0}
.room-group.collapsed .room-list-body{grid-template-rows:0fr}
body.cat-dragging .room-group.empty{display:block}
.room-group.cat-lift>.side-title{background:var(--blue-soft);border-radius:11px;color:var(--blue)}
html.dark .room-group.cat-lift>.side-title{background:var(--brand-soft);color:var(--brand)}
/* ---------- ????채팅·친구·?�정 ?? ?�래�???채팅�?카테고리?� ?�일??모션 ---------- */
.side-section{margin-bottom:12px;border-radius:14px;padding:2px 0;transition:background .16s ease,box-shadow .16s ease}
.side-section-body{display:grid;grid-template-rows:1fr;transition:grid-template-rows .28s cubic-bezier(.2,.8,.2,1)}
.side-section-body>.side-section-inner{overflow:hidden;min-height:0}
.side-section.collapsed .side-section-body{grid-template-rows:0fr}
body.side-dragging{cursor:grabbing;user-select:none;-webkit-user-select:none}
body.side-dragging .side-section{opacity:.92}
body.side-dragging .side-section.side-lift{opacity:1;background:var(--blue-soft);box-shadow:0 18px 40px rgba(15,23,42,.22);transform:rotate(-1.2deg) scale(1.02);z-index:5}
body.side-dragging .side-section.side-lift .side-title{background:var(--blue-soft);border-radius:11px;color:var(--brand-strong)}
html.dark body.side-dragging .side-section.side-lift{background:#1e2d44;box-shadow:0 18px 40px rgba(0,0,0,.38)}
html.dark body.side-dragging .side-section.side-lift .side-title{background:#233a5a;color:var(--brand)}
.pin-mark{font-size:10px;margin-right:4px;vertical-align:1px}
.room-icon-img{width:100%;height:100%;object-fit:cover;border-radius:11px;display:block}
.room-icon-inline{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;font-size:14px;vertical-align:middle}
.room-icon-inline img{width:100%;height:100%;object-fit:cover;border-radius:7px}
.cm-check{flex:0 0 auto;display:grid;place-items:center;width:24px}
.cm-check input{width:17px;height:17px;accent-color:var(--blue);cursor:pointer}

/* ---------- 채팅�?만들�?2?�계 ---------- */
.room-pane{position:relative}
.room-pane.pane-in-right{animation:paneInRight .34s cubic-bezier(.2,.8,.2,1)}
.room-pane.pane-in-left{animation:paneInLeft .34s cubic-bezier(.2,.8,.2,1)}
@keyframes paneInRight{from{opacity:0;transform:translateX(64px)}to{opacity:1;transform:none}}
@keyframes paneInLeft{from{opacity:0;transform:translateX(-64px)}to{opacity:1;transform:none}}
.share-choices{display:flex;flex-direction:column;gap:8px}
.share-choice{display:flex;align-items:center;gap:11px;padding:12px 13px;border:1px solid var(--line);border-radius:14px;background:#fff;text-align:left;transition:border-color .16s,background .16s,transform .16s}
.share-choice:hover{background:#fbfcfe;border-color:#dbe1e8}
.share-choice:active{transform:scale(.995)}
.share-choice.on{border-color:var(--brand-line);background:var(--brand-soft)}
.share-choice .sc-ico{font-size:19px}
.share-choice .sc-title{display:block;font-size:14.5px;font-weight:650;color:var(--text)}
.share-choice .sc-sub{display:block;font-size:12px;color:var(--sub);margin-top:3px}
html.dark .share-choice{background:var(--surface);border-color:var(--line)}
html.dark .share-choice.on{background:var(--brand-soft);border-color:var(--brand-line)}

/* 로그???�면 배경: ?�?�???�로??+ ?�래�??�라지???�트 그리??(반복 벽�? ?�낌 ?�이) */
.auth{position:relative}
.auth:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(rgba(0,130,200,.20) 1px,transparent 1px);background-size:22px 22px;-webkit-mask-image:radial-gradient(80% 64% at 50% 0%,#000 0%,transparent 74%);mask-image:radial-gradient(80% 64% at 50% 0%,#000 0%,transparent 74%)}
.auth:after{content:"";position:absolute;left:50%;top:50%;width:min(1240px,132vw);height:min(920px,132vh);transform:translate(-50%,-50%);pointer-events:none;background:radial-gradient(closest-side,rgba(255,255,255,.78),rgba(255,255,255,0) 74%)}
.auth-shell{position:relative;z-index:1}
html.dark .auth:before{background-image:radial-gradient(rgba(59,169,224,.18) 1px,transparent 1px)}
html.dark .auth:after{background:radial-gradient(closest-side,rgba(59,169,224,.10),rgba(59,169,224,0) 74%)}

/* ---------- 로그??/ ?�원가???�환 모션 ---------- */
/* 좁�? ?�면 ?�용: ??문구가 ?�이?�로 바뀌고 ?�약 ??�� 글?�에 맞춰 부?�럽�??�어?�다 */
.auth-hero-mobile{display:none;width:max-content;max-width:100%;align-items:center;gap:8px;margin-top:14px;font-size:13px;color:#fff;font-weight:650;background:rgba(8,42,74,.32);border:1px solid rgba(255,255,255,.28);padding:8px 14px;border-radius:999px;overflow:hidden;transition:width .34s cubic-bezier(.22,1,.36,1)}
.auth-hero-mobile:before{content:"";width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:#7FC9EE;box-shadow:0 0 0 3px rgba(127,201,238,.28)}
.auth-hero-mobile span{display:inline-block;flex:0 0 auto;white-space:nowrap;transition:opacity .26s ease,transform .26s ease}
.auth-hero-mobile span.out{opacity:0;transform:translateY(5px)}
.auth-points .pt-ico{flex:0 0 auto;font-size:14px;line-height:1}
/* 로그???�면 ?�내 링크 (개인?�보 처리방침 · 문의?�기 · ?�교 ?�록) */
.auth-links{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.auth-link{font-size:12px;color:#fff;font-weight:600;text-decoration:underline;text-underline-offset:3px;transition:color .16s}
.auth-link:hover{color:#fff}
.auth-sep{font-size:12px;color:rgba(255,255,255,.5)}
.card-links{display:none;margin-top:18px;justify-content:center}
.card-links .auth-link{color:var(--sub)}
.card-links .auth-link:hover{color:var(--brand)}
.card-links .auth-sep{color:var(--muted)}
/* ?�내 ?�이지 본문 */
.auth-page-body{margin:14px 0 0;font-size:14px;line-height:1.75;color:var(--sub);max-height:min(46dvh,420px);overflow:auto;overscroll-behavior:contain}
.auth-page-body p{margin:0 0 12px}
.auth-page-body b,.auth-page-body strong{color:var(--text)}
.auth-page-body h1{font-size:19px;line-height:1.4;color:var(--text);margin:2px 0 10px}
.auth-page-body h2{font-size:17px;line-height:1.4;color:var(--text);margin:16px 0 8px}
.auth-page-body h3{font-size:15px;line-height:1.45;color:var(--text);margin:14px 0 6px}
.auth-page-body ul,.auth-page-body ol{margin:0 0 12px;padding-left:22px}
.auth-page-body li{margin:3px 0}
.auth-page-body blockquote{margin:0 0 12px;padding:10px 12px;border-left:3px solid var(--brand-line);background:var(--brand-soft);border-radius:0 12px 12px 0;color:var(--text)}
.auth-page-body hr{border:0;border-top:1px solid var(--line);margin:14px 0}
.auth-page-body img{max-width:100%;height:auto;border-radius:14px;display:block;margin:8px auto}
.auth-page-body figure{margin:0 0 12px;text-align:center}
.auth-page-body figcaption{font-size:12px;color:var(--muted);margin-top:6px}
.auth-page-body table{width:100%;border-collapse:collapse;margin:0 0 12px;font-size:13px}
.auth-page-body th,.auth-page-body td{border:1px solid var(--line);padding:8px 10px;text-align:left}
.auth-page-body th{background:var(--chip);color:var(--text)}
.auth-page-body pre{background:var(--chip);border:1px solid var(--line);border-radius:12px;padding:10px 12px;overflow:auto;font-size:12.5px;line-height:1.6}
.auth-page-body a{color:var(--brand-strong);text-decoration:underline;word-break:break-all}
.rich-editor img{max-width:100%;height:auto;border-radius:12px}
.rich-editor h2{font-size:17px;margin:10px 0 6px}
.rich-editor ul,.rich-editor ol{padding-left:22px;margin:6px 0}
.auth-page-btns{display:grid;gap:8px;margin-top:18px}
.auth-page-btns .soft-btn{height:46px}

/* ---------- 부????로그???�면 ?�환 ---------- */
/* 로딩바�? 문구가 ?�짝 ?�라�???로그???�면???�린??*/
.boot.leaving .boot-visual,.boot.leaving .boot-copy,.boot.leaving .boot-dots,.boot.leaving>strong,.boot.leaving>div,.boot.leaving>span{opacity:0;transition:opacity .22s ease}
/* ---------- ?�면 ?�환 (바깥?�안 ?��? �? ?�어????0.985??, ?�갈 ??1??.02) ---------- */
.screen-enter{animation:screenZoomIn .45s cubic-bezier(0.2,0,0,1) both;transform-origin:center center;will-change:transform,opacity}
.screen-exit{animation:screenZoomOut .28s ease both;transform-origin:center center;pointer-events:none}
@keyframes screenZoomIn{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:scale(1)}}
@keyframes screenZoomOut{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.02)}}
/* 로그???�면 ?�장: 바깥?�서 ?��??�며 ?�이?�인 */
.auth-shell.enter .auth-hero{animation:authFadeIn .6s ease both}
.auth-shell.enter .auth-card{animation:authRiseIn .66s cubic-bezier(.2,.8,.2,1) .1s both}
@keyframes authFadeIn{from{opacity:0}to{opacity:1}}
@keyframes authRiseIn{from{opacity:0;transform:translateY(26px) scale(.97)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
  .auth-shell.enter .auth-hero,.auth-shell.enter .auth-card{animation:none}
}
.back-btn{width:38px;height:38px;border-radius:50%;background:transparent;color:var(--text);font-size:17px;display:grid;place-items:center;margin-bottom:12px;transition:background .16s,transform .16s}
.back-btn:hover{background:var(--hover)}
.back-btn:active{transform:scale(.95)}
.auth-anim-left{animation:authInLeft .32s cubic-bezier(.2,.8,.2,1)}
.auth-anim-right{animation:authInRight .32s cubic-bezier(.2,.8,.2,1)}
@keyframes authInLeft{from{opacity:0;transform:translateX(52px)}to{opacity:1;transform:none}}
@keyframes authInRight{from{opacity:0;transform:translateX(-52px)}to{opacity:1;transform:none}}
html.dark .back-btn{background:transparent}
html.dark .back-btn:hover{background:var(--dark-chip)}

/* ---------- 외부 계정 로그인 버튼 ---------- */
.ext-login-btn{width:100%;height:48px;margin-top:10px;display:flex;align-items:center;justify-content:center;gap:10px;background:#fff;border:1px solid #747775;border-radius:8px;color:#1f1e1e;font-family:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:14px;font-weight:500;letter-spacing:.01em;transition:background .16s ease,box-shadow .16s ease,border-color .16s ease}
.ext-login-btn:hover{background:#F8FAFD;box-shadow:0 1px 2px rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}
.ext-login-btn:active{background:#F1F3F4}
.ext-login-mark{display:grid;place-items:center;width:19px;height:19px;flex:0 0 19px;border-radius:6px;background:var(--brand-soft);color:var(--brand-strong);font-size:11px;font-weight:800}
.ext-login-btn span{white-space:nowrap}
html.dark .ext-login-btn{background:#131314;border-color:#8E918F;color:#E3E3E3}
html.dark .ext-login-btn:hover{background:#1F1F20;box-shadow:0 1px 2px rgba(0,0,0,.5)}
html.dark .ext-login-btn:active{background:#2A2A2B}
@media(max-width:880px){
  .auth{padding:0;overflow:hidden}
  .auth-shell{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);height:100dvh;min-height:0;margin:0;border:0;border-radius:0;box-shadow:none}
  .auth-hero{padding:calc(18px + env(safe-area-inset-top)) 20px 16px;gap:10px;border-radius:0}
  .auth-hero-body{margin-top:6px}
  .auth-hero-body h2{font-size:18px;line-height:1.5;margin-bottom:4px}
  .auth-hero-body>p{display:none}
  .auth-points{display:none}
  .auth-hero-mobile{display:flex;font-size:12.5px;margin-top:10px;padding:7px 13px}
  .card-links{display:flex}
  .auth-card{padding:16px 20px 24px;overflow:auto;overscroll-behavior:contain}
  .auth-card-inner{margin:0;width:100%}
  .auth-title{font-size:22px}
  .auth-desc{margin:7px 0 16px}
}

/* 로그?? ?�이??기억?�기 */
.remember-check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--sub);margin:2px 0 12px;cursor:pointer;user-select:none}
.remember-check input{width:16px;height:16px;margin:0;accent-color:var(--brand);cursor:pointer}
.pw-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pw-row .field{min-width:0}
@media(max-width:560px){.pw-row{grid-template-columns:1fr}}

/* @ 멘션 (?�력�?목록 + 메시지 ???�그 강조) */
.mention-box{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(100% + 8px);width:min(520px,calc(100% - 32px));background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:0 18px 42px rgba(25,31,40,.18);padding:6px;z-index:70;pointer-events:auto;max-height:44dvh;overflow:auto;overscroll-behavior:contain}
@media(max-width:820px){.mention-box{max-height:30dvh}}
.mention-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border-radius:11px;text-align:left;font-size:14px;font-weight:560;color:var(--text);transition:background .14s,color .14s}
.mention-item:hover,.mention-item.on{background:var(--brand-soft);color:var(--brand-strong)}
.mention-item .ma{width:28px;height:28px;border-radius:50%;background:var(--chip);display:grid;place-items:center;font-size:13px;font-weight:650;overflow:hidden;flex:0 0 auto}
.mention-item .ma img{width:100%;height:100%;object-fit:cover}
.mention{font-weight:700;color:var(--brand-strong)}
.bubble .mention{background:var(--brand-soft);border-radius:7px;padding:1px 6px}
.mine .bubble .mention{background:rgba(255,255,255,.24);color:#fff}
html.dark .mention{color:var(--brand)}
html.dark .mine .bubble .mention{background:rgba(255,255,255,.24);color:#fff}

/* 로그?????�개(?�딩) ?�이지 */
.landing{height:100%;overflow-y:auto;overflow-x:hidden;background:linear-gradient(180deg,#F7FAFF 0%,#FFFFFF 44%,#F4F9FF 100%);scroll-padding-top:66px}
.landing-nav{position:sticky;top:0;z-index:100;background:rgba(255,255,255,.86);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid var(--line)}
.landing-nav-inner{width:100%;margin:0 auto;height:66px;display:flex;align-items:center;gap:16px;padding:0 22px}
.landing-brand{display:flex;align-items:center;gap:10px;font-size:19px;font-weight:750;letter-spacing:-.5px;color:var(--text);flex:0 0 auto}
.landing-brand .brand-mark{width:36px;height:36px;border-radius:12px}
.landing-menu{display:flex;align-items:center;gap:2px;flex:1;min-width:0}
.landing-menu-btn{height:36px;padding:0 12px;border-radius:10px;font-size:14px;font-weight:560;color:var(--sub);white-space:nowrap;transition:background .18s,color .18s}
.landing-menu-btn:hover{background:var(--hover);color:var(--text)}
/* 마우?��? ?�리�??�위 ??��??차라???�려?�다 */
.landing-drop{position:relative}
.landing-menu-btn.drop{display:flex;align-items:center;gap:5px}
.drop-caret{font-size:11px;line-height:1;transition:transform .22s ease}
.landing-drop.open .drop-caret{transform:rotate(180deg)}
.landing-drop.open .landing-menu-btn{background:var(--hover);color:var(--text)}
.landing-drop-menu{position:absolute;top:calc(100% + 10px);left:50%;min-width:196px;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:0 20px 45px rgba(25,31,40,.16);opacity:0;transform:translateX(-50%) translateY(-10px);pointer-events:none;transition:opacity .2s ease,transform .26s cubic-bezier(.2,.8,.2,1);z-index:5}
.landing-drop-menu:before{content:"";position:absolute;left:0;right:0;top:-12px;height:12px}
.landing-drop.open .landing-drop-menu{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}
.landing-drop-item{display:block;width:100%;text-align:left;padding:10px 12px;border-radius:11px;font-size:13.5px;font-weight:560;color:var(--text);white-space:nowrap;transition:background .16s,color .16s}
.landing-drop-item:hover{background:var(--brand-soft);color:var(--brand-strong)}
.landing-nav-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex:0 0 auto}
/* 좁�? ?�면???�버�?메뉴 (?�르�??�에???�면??�?채우�??�려?�다) */
.landing-burger{display:none;width:38px;height:38px;border-radius:11px;background:var(--chip);align-items:center;justify-content:center;flex-direction:column;gap:4px;flex:0 0 auto}
.landing-burger i{display:block;width:17px;height:2px;border-radius:2px;background:var(--text)}
.landing-sheet{display:none;position:fixed;inset:0;z-index:210}
.landing.sheet-open{overflow:hidden}
.landing-sheet-back{position:absolute;inset:0;background:rgba(12,16,22,.42)}
.landing-sheet-panel{position:absolute;left:0;right:0;top:0;height:100dvh;background:var(--surface);display:flex;flex-direction:column;box-shadow:0 24px 60px rgba(25,31,40,.28)}
.landing-sheet.open .landing-sheet-panel{animation:landingSheetDown .34s cubic-bezier(.2,.8,.2,1) both}
.landing-sheet.open .landing-sheet-back{animation:landingSheetFade .26s ease both}
.landing-sheet.closing .landing-sheet-panel{animation:landingSheetUp .24s cubic-bezier(.4,0,.6,1) both}
.landing-sheet.closing .landing-sheet-back{animation:landingSheetFadeOut .22s ease both}
@keyframes landingSheetDown{from{opacity:.35;transform:translateY(-100%)}to{opacity:1;transform:none}}
@keyframes landingSheetUp{from{opacity:1;transform:none}to{opacity:.35;transform:translateY(-100%)}}
@keyframes landingSheetFade{from{opacity:0}to{opacity:1}}
@keyframes landingSheetFadeOut{from{opacity:1}to{opacity:0}}
.landing-sheet-head{height:62px;flex:0 0 62px;display:flex;align-items:center;gap:10px;padding:0 14px;border-bottom:1px solid var(--line)}
.landing-sheet-head .brand-mark{width:32px;height:32px;border-radius:11px}
.landing-sheet-head strong{font-size:17px;font-weight:750;letter-spacing:-.4px}
.landing-sheet-head .sheet-close{margin-left:auto;width:38px;height:38px;border-radius:50%;background:var(--chip);display:grid;place-items:center;font-size:14px;color:var(--sub)}
.landing-sheet-body{flex:1;min-height:0;overflow:auto;padding:10px 12px 20px}
.landing-sheet-item{display:flex;align-items:center;width:100%;padding:15px 12px;border-radius:14px;font-size:16px;font-weight:650;color:var(--text);text-align:left;transition:background .16s}
.landing-sheet-item:active{background:var(--hover)}
.landing-sheet-item .acc-caret{margin-left:auto;font-size:12px;color:var(--muted);transition:transform .24s ease}
.landing-acc.open .landing-sheet-item .acc-caret{transform:rotate(180deg)}
.landing-acc-body{max-height:0;overflow:hidden;transition:max-height .3s cubic-bezier(.2,.8,.2,1)}
.landing-acc.open .landing-acc-body{max-height:420px}
.landing-sheet-sub{display:block;width:100%;padding:13px 12px 13px 22px;border-radius:12px;font-size:14.5px;font-weight:560;color:var(--sub);text-align:left}
.landing-sheet-sub:active{background:var(--hover);color:var(--text)}
html.dark .landing-sheet-back{background:rgba(0,0,0,.6)}
.landing-btn{height:42px;padding:0 18px;border-radius:12px;font-size:14.5px;font-weight:660;transition:transform .16s,filter .16s,background .18s}
.landing-btn:active{transform:scale(.97)}
.landing-btn.solid{background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;box-shadow:0 8px 20px rgba(0,130,200,.28)}
.landing-btn.solid:hover{filter:brightness(1.05)}
.landing-btn.ghost{background:var(--chip);color:var(--text)}
.landing-btn.ghost:hover{background:var(--hover)}
.landing-breezecore-link{text-decoration:none;white-space:nowrap}
.landing-partner-links{margin-top:8px;justify-content:flex-start}
@media(max-width:760px){.landing-breezecore-link{display:none}}
.landing-btn.xl{height:54px;padding:0 26px;font-size:16px;border-radius:15px}
.landing-hero{padding:64px 22px 34px}
.landing-hero-inner{width:min(1120px,100%);margin:0 auto;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:46px;align-items:center}
.landing-hero-inner.solo{grid-template-columns:minmax(0,1fr);max-width:780px}
.landing-badge{display:inline-block;padding:7px 13px;border-radius:999px;background:var(--brand-soft);color:var(--brand-strong);font-size:12.5px;font-weight:700}
.landing-hero h1{margin:16px 0 14px;font-size:clamp(28px,4.1vw,45px);line-height:1.24;letter-spacing:-1.2px}
/* ?�째 �? 로그???�면 ?�어로�? 같�? ?�전 문구 ?�약 */
.landing-hero .roll{background:var(--brand-soft);color:var(--brand-strong);padding:0 20px}
.landing-hero .lead{margin:0;font-size:clamp(14.5px,1.4vw,16.5px);line-height:1.78;color:var(--sub)}
.landing-cta{display:flex;gap:10px;flex-wrap:wrap;margin-top:28px}
.landing-mock{background:var(--surface);border:1px solid var(--line);border-radius:24px;box-shadow:0 26px 60px rgba(25,31,40,.12);padding:16px;display:flex;flex-direction:column;gap:12px}
.mock-head{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:650;color:var(--sub);padding:2px 4px 12px;border-bottom:1px solid var(--line)}
.mock-list{display:flex;flex-direction:column;gap:12px;min-height:136px;transition:opacity .3s ease,transform .3s ease}
.mock-list.mock-out{opacity:0;transform:translateY(-5px)}
/* ???�리?�의 메시지가 ??줄씩 ?�라?�듯 ?�장?�다 (--d �??�서�?준?? */
.mock-list.mock-in .mock-row{animation:mockIn .52s cubic-bezier(.2,.8,.2,1) both;animation-delay:var(--d,0s)}
@keyframes mockIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.mock-dot{width:9px;height:9px;border-radius:50%;background:var(--green)}
.mock-row{display:flex;gap:9px;align-items:flex-end;margin-top:2px}
.mock-row.mine{justify-content:flex-end}
.mock-av{width:30px;height:30px;border-radius:50%;background:var(--brand-soft);color:var(--brand-strong);display:grid;place-items:center;font-size:13px;font-weight:700;flex:0 0 auto}
.mock-bub{max-width:78%;padding:10px 13px;border-radius:15px;border-bottom-left-radius:6px;background:var(--chip);font-size:13.5px;line-height:1.5}
.mock-row.mine .mock-bub{background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;border-radius:15px;border-bottom-right-radius:6px}
.mock-input{height:42px;border-radius:13px;background:var(--chip);display:flex;align-items:center;padding:0 14px;color:var(--muted);font-size:13px}
.mock-caption{margin-top:10px;text-align:center;font-size:13px;color:var(--sub);line-height:1.6}
.landing-sec{width:min(1120px,100%);margin:0 auto;padding:74px 22px}
.landing-head{text-align:center;margin-bottom:36px}
.landing-head h2{margin:0 0 10px;font-size:clamp(22px,2.6vw,31px);letter-spacing:-.8px}
.landing-head p{margin:0;color:var(--sub);font-size:15px;line-height:1.7}
.landing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}
.landing-anchor{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0 16px;padding:12px 16px;border:1px dashed var(--line);border-radius:14px;background:var(--brand-soft)}
.landing-anchor .anchor-orig{text-decoration:line-through;color:var(--sub);font-size:15px}
.landing-anchor .anchor-arrow{opacity:.6}
.landing-anchor .anchor-promo{font-size:19px;color:var(--brand-strong)}
.landing-anchor .anchor-note{font-size:12.5px;color:var(--sub)}
.landing-card{background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:22px}
.landing-card .ico{width:46px;height:46px;border-radius:14px;background:var(--brand-soft);display:grid;place-items:center;font-size:21px;margin-bottom:14px}
.landing-card h3{margin:0 0 7px;font-size:16.5px;letter-spacing:-.3px}
.landing-card p{margin:0;color:var(--sub);font-size:13.8px;line-height:1.68}
.landing-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px}
.landing-step{background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:24px 22px}
.landing-step .num{width:32px;height:32px;border-radius:50%;background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);color:#fff;display:grid;place-items:center;font-weight:750;font-size:14px;margin-bottom:14px}
.landing-step h3{margin:0 0 7px;font-size:16px;letter-spacing:-.3px}
.landing-step p{margin:0;color:var(--sub);font-size:13.8px;line-height:1.68}
.landing-end{display:flex;flex-direction:column}
.landing-cta-sec{width:min(1120px,100%);margin:0 auto;padding:6px 22px 74px;flex:1 1 auto;display:flex;align-items:center}
.landing-cta-box{flex:1;background:linear-gradient(152deg,#3AA9E0 0%,#0082C8 46%,#0A3A5A 100%);border-radius:26px;padding:48px 28px;text-align:center;color:#fff;box-shadow:0 24px 60px rgba(46,143,230,.28)}
.landing-cta-box h2{margin:0 0 12px;font-size:clamp(21px,2.5vw,30px);letter-spacing:-.7px}
.landing-cta-box p{margin:0 auto 24px;max-width:640px;font-size:15px;line-height:1.72;color:rgba(255,255,255,.92)}
.landing-cta-box .landing-btn{background:#fff;color:#17538F;box-shadow:0 10px 26px rgba(6,32,60,.22)}
.landing-cta-box .landing-btn:hover{background:#F0F7FF}
.landing-foot{border-top:1px solid var(--line);background:rgba(255,255,255,.72)}
.landing-foot-inner{width:min(1120px,100%);margin:0 auto;padding:28px 22px;display:flex;gap:14px;align-items:center;flex-wrap:wrap;justify-content:space-between}
.landing-foot p{margin:0;color:var(--sub);font-size:13px;line-height:1.6}

/* ---------- ?�진 ?�동 검???�시 ---------- */
.warn-box{margin-top:12px;padding:12px 14px;border-radius:14px;border:1px solid var(--danger-soft);background:var(--danger-soft);color:var(--danger);font-size:13px;font-weight:650;line-height:1.6}
.attach-guard{position:relative;display:block;max-width:min(300px,68vw);border-radius:12px;overflow:hidden;cursor:pointer;background:var(--chip)}
.attach-guard .attach-img{display:block;width:100%;max-height:320px;object-fit:cover;filter:blur(18px);transform:scale(1.08);cursor:pointer;transition:filter .32s ease,transform .32s ease}
.attach-guard-note{position:absolute;inset:0;display:flex;flex-direction:column;gap:3px;align-items:center;justify-content:center;padding:12px;text-align:center;font-size:12px;line-height:1.5;color:#fff;background:rgba(14,19,28,.52)}
.attach-guard-note b{font-size:12.5px;text-decoration:underline}
.attach-risk-chip{display:inline-block;margin-top:6px;padding:2px 9px;border-radius:999px;background:var(--danger-soft);color:var(--danger);font-size:11px;font-weight:700}
.avatar-warn{position:absolute;top:-2px;left:-2px;width:16px;height:16px;border-radius:50%;background:var(--danger);color:#fff;font-size:11px;font-weight:800;line-height:1;display:grid;place-items:center;border:2px solid var(--surface);box-sizing:content-box}

/* ---------- 브랜???�름 ?�전 ---------- */
.brand-name{display:inline-block;transform-origin:left center}
.brand-name.roll-in{animation:brandRollIn .5s cubic-bezier(.2,.8,.2,1)}
@keyframes brandRollIn{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.brand-name.roll-out{animation:brandRollOut .26s ease both}
@keyframes brandRollOut{to{opacity:0;transform:translateY(-7px)}}

/* ---------- ?�력 �??�시 (?�도처럼 ?�직이???? ---------- */
.typing-row{display:flex;align-items:center;gap:8px;margin:2px 0 14px;padding-left:2px}
.typing-avatars{display:flex;align-items:center;flex:0 0 auto}
.typing-av{width:26px;height:26px;border-radius:50%;background:var(--chip);color:var(--sub);display:grid;place-items:center;font-size:12px;font-weight:650;overflow:hidden;border:2px solid var(--surface);margin-left:-9px;box-shadow:0 1px 3px rgba(25,31,40,.12)}
.typing-av:first-child{margin-left:0}
.typing-av img{width:100%;height:100%;object-fit:cover}
.typing-bubble{padding:10px 13px;border-radius:16px;border-bottom-left-radius:6px;display:inline-flex;align-items:center}
.typing-dots{display:inline-flex;align-items:center;gap:4px;height:14px}
.typing-dots i{width:6px;height:6px;border-radius:50%;background:var(--sub);display:block;animation:typingWave 1.2s infinite ease-in-out}
.typing-dots i:nth-child(2){animation-delay:.16s}
.typing-dots i:nth-child(3){animation-delay:.32s}
@keyframes typingWave{0%,60%,100%{transform:translateY(0);opacity:.45}30%{transform:translateY(-5px);opacity:1}}
.typing-label{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html.dark .typing-av{border-color:var(--surface)}
@media(max-width:520px){.typing-label{max-width:38vw}}

/* ---------- ?�음 ?�시 ---------- */
.read-receipt{margin-top:4px;text-align:right;font-size:11.5px;color:var(--brand-strong);font-weight:600}
html.dark .read-receipt{color:var(--brand)}

/* ---------- 부?�러???�크롤용 ?�시 ?�백 ---------- */
.msg-scroll-spacer{flex:0 0 auto;pointer-events:none}
.photo-caution{margin:12px 0 0;padding:11px 13px;border-radius:12px;background:var(--danger-soft);color:var(--danger);font-size:12.5px;font-weight:650;line-height:1.6}
/* ?�른�??�이지 ?�디케?�터 (?��? ??줄로, ?�름?� ???�쪽?? */
.landing-dots{position:fixed;right:14px;top:50%;transform:translateY(-50%);z-index:95;display:flex;flex-direction:column;gap:9px;align-items:flex-end}
.landing-dot{position:relative;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0}
.landing-dot i{width:10px;height:10px;border-radius:50%;background:rgba(125,135,155,.45);transition:background .2s,transform .2s}
.landing-dot span{position:absolute;right:22px;top:50%;transform:translate(8px,-50%);font-size:12px;font-weight:600;color:var(--sub);opacity:0;transition:opacity .22s ease,transform .22s ease;white-space:nowrap;padding:4px 9px;border-radius:999px;background:var(--surface);box-shadow:0 4px 14px rgba(25,31,40,.12);pointer-events:none}
.landing-dot:hover i{background:var(--brand)}
.landing-dot.active i{background:var(--brand);transform:scale(1.3)}
.landing-dot.active span,.landing-dots:hover .landing-dot span{opacity:1;transform:translate(0,-50%)}
.landing-dot.active span{color:var(--brand-strong)}

/* ???�씩 ?�어가???�크�?(?�면?????�어?�는 ?�션?�만 ?�용, ?�동?� app.js가 부?�럽�?처리) */
.landing.snap .snap-ok{min-height:calc(100dvh - 66px)}
.landing.snap .landing-hero.snap-ok{display:flex;align-items:center;padding-top:26px;padding-bottom:22px}
.landing.snap .landing-sec.snap-ok{display:flex;flex-direction:column;justify-content:center;padding-top:30px;padding-bottom:30px}
.landing.snap .landing-end.snap-ok .landing-cta-sec{flex:1 1 auto;padding-top:38px;padding-bottom:38px}
.landing-sub-list{margin-top:10px;padding-left:12px;border-left:2px solid var(--brand-line)}
html.dark .landing-dot i{background:#3B4356}
html.dark .landing{background:linear-gradient(180deg,#0B1119 0%,#0E141C 44%,#0A0F16 100%)}
html.dark .landing-nav{background:rgba(19,23,28,.86)}
html.dark .landing-foot{background:transparent}
html.dark .landing-mock{box-shadow:0 26px 60px rgba(0,0,0,.5)}
@media(max-width:900px){
  .landing-hero-inner{grid-template-columns:1fr;gap:32px}
  .landing-menu{display:none}
  .landing-burger{display:flex}
  .landing-sheet.open{display:block}
  .landing-hero{padding:38px 18px 26px}
  .landing-sec{padding:54px 18px}
  .landing-cta-sec{padding:0 18px 54px}
  .landing-dots{right:8px;gap:7px}
  .landing-dot span{font-size:11px}
}
@media(max-width:560px){
  .landing-dot span{display:none}
  .landing-nav-inner{height:60px;padding:0 14px;gap:10px}
  .landing-brand{font-size:17px;gap:8px}
  .landing-brand strong{display:none}
  .landing-brand .brand-mark{width:32px;height:32px;border-radius:11px}
  .landing-btn{height:38px;padding:0 13px;font-size:13.5px;border-radius:11px}
  .landing-btn.xl{height:50px;padding:0 20px;font-size:15px;width:100%}
  .landing-cta{flex-direction:column;align-items:stretch}
  .landing-mock{padding:13px;border-radius:20px}
  .mock-list{min-height:124px}
  .landing-foot-inner{padding:22px 16px;flex-direction:column;align-items:flex-start}
}

/* ---------- 마이?�로 ?�터?�션 (?�름 · ?�버 ?�드백을 60fps ?�랜지?�으�??�일) ---------- */
.room,.list-item,.profile-card,.side-section .room{transition:background .18s ease,transform .18s cubic-bezier(.2,.8,.2,1),box-shadow .18s ease;will-change:transform}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:8px}
.chat-main.room-enter #messages{animation:roomFadeIn .28s cubic-bezier(.2,.8,.2,1)}
.chat-main.room-enter .composer-inner{animation:roomFadeUp .3s cubic-bezier(.2,.8,.2,1)}
@keyframes roomFadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes roomFadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.primary,.secondary,.confirm,.cancel,.soft-btn,.ext-login-btn,.danger-btn,.text-btn,.choice,.check-chip,.tab{transition:transform .14s cubic-bezier(.2,.8,.2,1),background .16s ease,color .16s ease,filter .16s ease,box-shadow .16s ease}
@media (hover:hover){
  .room:hover,.list-item:hover{transform:translateY(-1px)}
  .soft-btn:hover,.check-chip:hover,.choice:hover{box-shadow:0 4px 14px rgba(25,31,40,.07)}
}
.primary:active,.secondary:active,.confirm:active,.cancel:active,.soft-btn:active,.ext-login-btn:active,.danger-btn:active,.choice:active,.check-chip:active,.tab:active{transform:scale(.975)}
.modal-actions>*:active{transform:scale(.978)}
/* 고유 로고(SVG 말풍??: 글???�???�형???�어가??박스·?�리??맞게 */
.brand-mark:has(svg),.boot-mark:has(svg){padding-top:0}
.brand-mark svg{width:100%;height:100%;display:block;border-radius:inherit}
.boot-mark svg{width:100%;height:100%;display:block;border-radius:inherit}
.auth-hero-top .brand-mark:has(svg){background:none;box-shadow:none}
@media (prefers-reduced-motion:reduce){
  .room,.list-item,.profile-card,.primary,.secondary,.confirm,.cancel,.soft-btn,.ext-login-btn,.danger-btn,.choice,.check-chip,.tab,.modal-actions>*{transition:none}
  .room:hover,.list-item:hover{transform:none}
  .primary:active,.secondary:active,.confirm:active,.cancel:active,.soft-btn:active,.ext-login-btn:active,.danger-btn:active,.choice:active,.check-chip:active,.tab:active,.modal-actions>*:active{transform:none}
}

/* ---------- 개발???�구 차단 ?�버?�이 ---------- */
#devGuard{position:fixed;inset:0;z-index:9999;display:grid;place-items:center;background:rgba(12,16,22,.72);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;pointer-events:none;transition:opacity .2s ease;padding:20px}
#devGuard.show{opacity:1;pointer-events:auto}
.dev-guard-card{background:#fff;border-radius:20px;padding:28px 26px;max-width:380px;width:100%;text-align:center;box-shadow:0 30px 90px rgba(0,0,0,.35)}
.dev-guard-mark{width:52px;height:52px;border-radius:50%;background:var(--danger-soft);color:var(--danger);font-size:26px;font-weight:800;display:grid;place-items:center;margin:0 auto 14px}
.dev-guard-card h2{margin:0 0 8px;font-size:20px;letter-spacing:-.4px}
.dev-guard-card p{margin:0 0 18px;color:var(--sub);font-size:14px;line-height:1.6}
.dev-guard-sub{display:inline-block;margin-top:6px;font-size:12.5px;color:var(--muted)}
.dev-guard-card .confirm{width:100%;height:46px;border-radius:13px;background:var(--brand);color:#fff;font-weight:700;font-size:15px}
html.dark .dev-guard-card{background:#1A1B26}

/* ---------- 채팅 로딩 ?�켈?�톤 (반짝?�는 말풍???�) ---------- */
.message-row .sk-bubble{background:var(--chip);min-width:190px;max-width:min(62%,430px)}
.mine .sk-bubble{background:var(--chip)}
.sk-line{display:block;height:12px;border-radius:7px;margin:5px 0;background:linear-gradient(90deg,var(--line) 25%,#fff 50%,var(--line) 75%);background-size:200% 100%;animation:skShimmer 1.15s linear infinite}
.sk-line.short{width:44%}
html.dark .sk-line{background:linear-gradient(90deg,var(--line) 25%,#343746 50%,var(--line) 75%);background-size:200% 100%}
@keyframes skShimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.sk-line{animation:none}}
/* 목록??로딩 ?�켈?�톤 (급식·건의·?�인·참여???? */
.sk-rows{display:grid;gap:8px;padding:2px}
.sk-row{height:52px;border-radius:13px;background:linear-gradient(90deg,var(--line) 25%,#fff 50%,var(--line) 75%);background-size:200% 100%;animation:skShimmer 1.15s linear infinite}
.sk-row.short{height:38px}
html.dark .sk-row{background:linear-gradient(90deg,var(--line) 25%,#343746 50%,var(--line) 75%);background-size:200% 100%}
@media(prefers-reduced-motion:reduce){.sk-row{animation:none}}

/* ---------- ?�정 캘린??---------- */
.cal-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.cal-head strong{flex:1;text-align:center;font-size:16px;letter-spacing:-.3px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-week{margin-bottom:4px;color:var(--muted);font-size:11.5px;font-weight:700;text-align:center}
.cal-day{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:12px;font-size:13px;transition:background .15s ease,transform .15s ease}
.cal-day:not(.empty):hover{background:var(--hover)}
.cal-day:active{transform:scale(.94)}
.cal-day.empty{visibility:hidden}
.cal-day.today .cal-num{text-decoration:underline;text-underline-offset:3px;font-weight:800}
.cal-day.sel{background:var(--brand-soft);box-shadow:inset 0 0 0 2px var(--brand)}
.cal-num{line-height:1}
.cal-dots{display:flex;gap:3px;height:6px}
.cal-dots .dot{width:6px;height:6px;border-radius:50%}
.cal-dots .dot.p{background:var(--brand)}
.cal-dots .dot.s{background:var(--danger)}
/* ---------- ?�진·?�일??---------- */
.file-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.file-thumb{aspect-ratio:1;border-radius:12px;overflow:hidden;background:var(--chip);padding:0;transition:transform .15s ease}
.file-thumb:hover{transform:scale(1.03)}
.file-thumb:active{transform:scale(.97)}
.file-thumb img{width:100%;height:100%;object-fit:cover;display:block}
/* ---------- ????---------- */
.todo-check{flex:0 0 auto;width:26px;height:26px;border-radius:50%;border:2px solid var(--line);background:#fff;color:transparent;font-size:13px;line-height:1;display:grid;place-items:center;align-self:center;transition:background .18s ease,border-color .18s ease,color .18s ease,transform .18s cubic-bezier(.34,1.56,.64,1)}
.todo-check.on{background:var(--brand);border-color:var(--brand);color:#fff}
.todo-check:active{transform:scale(.85)}
.todo-item.done .title{text-decoration:line-through;color:var(--muted)}
/* ---------- 출석 pill ---------- */
.attend-pill{width:min(980px,100%);margin:0 auto 8px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 16px;border-radius:14px;background:linear-gradient(135deg,#FFF8E1,#FFECB3);border:1px solid #F0D48A;color:#7a5b00;font-size:13.5px;font-weight:650;animation:attendIn .3s cubic-bezier(.2,.8,.2,1)}
.attend-pill b{color:#fff;background:#E8A100;border-radius:9px;padding:6px 14px;font-size:13px}
@keyframes attendIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.attend-pill,.todo-check,.cal-day,.file-thumb{animation:none;transition:none}}

/* ---------- ?�용�?만료 배너 (?�로??채팅 ?�이, 빨간 강조) ---------- */
.license-banner{padding:0 12px 10px;background:var(--surface);border-bottom:1px solid var(--line)}
.license-banner.hidden{display:none}
.license-banner-btn{width:100%;display:flex;align-items:center;gap:9px;padding:11px 12px;border-radius:13px;background:var(--danger-soft);border:1px solid var(--brand-line);color:var(--danger);font-size:13px;font-weight:700;line-height:1.5;text-align:left;cursor:pointer}
.license-banner-btn .lb-dot{flex:0 0 20px;width:20px;height:20px;border-radius:50%;background:var(--danger);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:800}
.license-banner-btn .grow{flex:1}
html.dark .license-banner-btn{background:#3A1D20;border-color:#7A2E33;color:#FFB4AB}
/* ---------- ?�용�??�결 채팅�?---------- */
.compose-lock.license-lock{background:#FFF0F1;border:1px dashed #FFC9CD;color:#C81E2B;font-weight:650}
/* ---------- 5�??�라?�드 카운??버튼 (?�플�?�� 건너?�기?? ---------- */
.confirm.countdown,.modal-actions .confirm.countdown{position:relative;overflow:hidden;opacity:.92}
.confirm .cd-fill{position:absolute;inset:0;width:var(--cd-p,0%);background:rgba(255,255,255,.35);transition:width 1s linear}
.confirm .cd-text{position:relative;z-index:1}
.confirm.countdown-ready{box-shadow:0 0 0 3px rgba(0,130,200,.25)}
.confirm:disabled{cursor:not-allowed;filter:saturate(.7)}
.confirm-phrase{padding:10px 12px;border-radius:12px;background:var(--chip);font-weight:750;letter-spacing:.3px;margin-bottom:10px}
/* ---------- 채팅 링크 + 미리보기 (그라?�이??경계??카드) ---------- */
.chat-link{color:var(--brand-strong);text-decoration:underline;word-break:break-all;font-weight:600}
.mine .chat-link{color:#fff}
.lp-wrap{display:block;margin-top:8px}
.link-preview{display:flex;gap:10px;align-items:center;width:min(340px,100%);margin-top:8px;padding:2px;text-align:left;border-radius:15px;background:linear-gradient(135deg,#0082C8,#8B5CF6,#EC4899);cursor:pointer}
.link-preview .grow{flex:1;min-width:0;background:#fff;border-radius:13px;padding:10px 12px;display:flex;flex-direction:column;gap:3px}
.lp-domain{font-size:11px;color:var(--muted);font-weight:700;letter-spacing:.2px;text-transform:lowercase;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-title{font-size:13.5px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-desc{font-size:12px;color:var(--sub);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.lp-img{flex:0 0 64px;width:64px;height:64px;border-radius:11px;overflow:hidden;background:#fff;margin-right:2px}
.lp-img img{width:100%;height:100%;object-fit:cover;display:block}
.mine .link-preview .grow{background:#F6F9FF}
html.dark .link-preview .grow{background:#1A1B26}
.warn-box{padding:12px 14px;border-radius:13px;background:#FFF8E1;border:1px solid #F0D48A;color:#7A5B00;font-size:13px;line-height:1.6;margin:12px 0}
/* 8�? ?�력�?부?�럽�?*/
.composer textarea{transition:height .22s cubic-bezier(.2,.8,.2,1)!important;will-change:height;overflow-y:auto}
/* 1�? 채팅�??�서 모션 - transform 0.18s�??�일 (?�버?� ?�서 ?�동 모션 충돌 방�?) */
.room{transition:background .18s,transform .18s cubic-bezier(.2,.8,.2,1),opacity .25s ease}
.room.room-enter{animation:roomListIn .38s cubic-bezier(.2,.8,.2,1)}
@keyframes roomListIn{from{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:none}}
/* 13�? ?�음 목록 버튼 */
.read-receipt.clickable{background:none;border:0;cursor:pointer;padding:2px 4px;border-radius:8px}
.read-receipt.clickable:hover{background:var(--brand-soft)}
/* 6�? 검???�시 */
.file-thumb{position:relative}
.file-thumb.flagged img{filter:blur(14px) brightness(.7)}
.flag-badge{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.65);color:#fff;font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px}
.attach-card.flagged{opacity:.85;border-style:dashed}
/* 3�? ?�로???�롭 */
.crop-box{position:relative;width:240px;height:240px;margin:0 auto;overflow:hidden;border-radius:24px;background:#f1f2f7;touch-action:none;cursor:grab}
.crop-box:active{cursor:grabbing}
.crop-box img{width:100%;height:100%;object-fit:cover;pointer-events:none;will-change:transform}
.crop-mask{position:absolute;inset:0;pointer-events:none;border-radius:50%;box-shadow:0 0 0 999px rgba(255,255,255,.72);border:2px dashed var(--brand);margin:18px}
/* 7�? 메인 ?�단 ?�마??*/
.main-bottom{flex:0 0 auto;margin:0 20px 8px;padding:9px 14px;border-radius:14px;line-height:1.55;z-index:55;position:relative;resize:vertical;overflow:auto;min-height:38px;max-height:220px}
.main-bottom.hidden{display:none}
.main-bottom-inner{width:min(980px,100%);margin:0 auto;word-break:break-word}
/* 9�? 모션 ?�는 ?�소 보강 */
.list-item{transition:background .16s ease,transform .18s cubic-bezier(.2,.8,.2,1)}
.list-item:hover{background:var(--hover)}
.list-item:active{transform:scale(.995)}
.soft-btn,.danger-btn,.primary,.confirm,.cancel{transition:background .16s ease,transform .16s ease,filter .16s ease}
.soft-btn:active,.danger-btn:active,.primary:active,.confirm:active,.cancel:active{transform:scale(.97)}
.bubble{transition:transform .18s ease,box-shadow .18s ease}
.attach-card,.file-thumb{transition:transform .15s ease,box-shadow .15s ease}
.attach-card:hover{transform:translateY(-1px)}
.tab,.choice,.sound-item{transition:background .16s ease,transform .16s ease}
.tab:active,.choice:active{transform:scale(.96)}
.side-title .text-btn{transition:color .16s,transform .16s}
.side-title .text-btn:hover{transform:translateY(-1px)}
/* 1�??�규): 관리자 ??�� 문구 */
.deleted-pill.staff{background:#FFF7E6;border:1px solid #F5C518;color:#8a6d1a}
.deleted-pill.blind{background:#FFF7E6;border:1px solid #F5C518;color:#6b5a1e}
.blind-btns{display:flex;gap:8px;margin-top:8px}
.blind-btns .soft-btn,.blind-btns .danger-btn{height:40px;font-size:13px}
/* 5�? ?�내 링크 pill 그리??*/
.card-links{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:560px;margin:18px auto 0}
.card-links .auth-link{border:1px solid var(--line);border-radius:999px;padding:7px 14px;text-decoration:none;background:#fff;white-space:nowrap}
.card-links .auth-link:hover{background:var(--brand-soft)}
.card-links .auth-sep{display:none}
.auth-links:not(.card-links){flex-wrap:wrap;row-gap:6px}
/* 로그?�창 ?�랫부�??��? 링크 (?��? ?�널???�니??카드 ?�래) */
.auth-links.under-card{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 10px;margin-top:16px}
.auth-links.under-card .auth-link{font-size:12px;color:var(--sub);font-weight:500;text-decoration:underline;text-underline-offset:3px}
.auth-links.under-card .auth-link:hover{color:var(--brand-strong)}
.auth-links.under-card .auth-sep{color:var(--muted);font-size:12px}
/* 6�??�규): ?�업???�보 */
.landing-foot-inner{flex-direction:column;align-items:flex-start}
.biz-info{white-space:pre-line;font-size:12px;color:var(--muted);line-height:1.7}
/* 주의·경고 ?�업 ?�이�?(?�에 ?�는 ?�단 ?�시 · ?�림 방�? ?�백) */
.notice-ico{display:flex;justify-content:center;margin:10px 0 14px;padding-top:4px;overflow:visible}
.notice-ico span{display:grid;place-items:center;font-weight:800}
.notice-ico.warn span{width:46px;height:46px;border-radius:50%;background:#FEF3C7;color:#92400E;font-size:24px;box-shadow:0 0 0 6px #FDE68A}
.notice-ico.danger span{width:0;height:0;border-left:26px solid transparent;border-right:26px solid transparent;border-bottom:44px solid #DC2626;position:relative;filter:drop-shadow(0 0 0 #FECACA)}
.notice-ico.danger span::after{content:'!';position:absolute;left:50%;top:12px;transform:translateX(-50%);color:#fff;font-size:22px;font-weight:800}
html.dark .notice-ico.warn span{background:#45300A;color:#FCD34D;box-shadow:0 0 0 6px #57400F}
/* 급식·?�간???�젯 */
.meal-box{padding:4px 8px}
.meal-title{font-size:12px;font-weight:700;color:var(--sub);margin-bottom:4px}
.meal-text{font-size:12.5px;line-height:1.65;color:var(--text)}
.meal-loading{padding:6px 8px 2px;font-size:13px;color:var(--sub);display:flex;align-items:center;gap:8px}
.meal-loading .shimmer-text{display:inline-block;font-weight:700;background:linear-gradient(90deg, var(--line) 25%, #fff 50%, var(--line) 75%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:skShimmer 1.15s linear infinite}
html.dark .meal-loading .shimmer-text{background:linear-gradient(90deg, var(--line) 25%, #343746 50%, var(--line) 75%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text}
/* ?�표 */
.poll-card{min-width:220px;max-width:340px}
.poll-q{font-weight:700;font-size:14px;margin-bottom:8px}
.poll-opt{position:relative;display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:1px solid var(--line);border-radius:11px;padding:8px 10px;margin-top:6px;overflow:hidden;background:var(--surface)}
.poll-opt:disabled{cursor:default;opacity:.85}
.poll-opt.on{border-color:var(--brand);font-weight:700}
.poll-bar{position:absolute;left:0;top:0;bottom:0;background:var(--brand-soft);pointer-events:none}
.poll-label{position:relative;flex:1;min-width:0}
.poll-n{position:relative;font-size:12px;color:var(--sub);white-space:nowrap}
.poll-foot{margin-top:8px;font-size:12px;color:var(--sub)}
/* ?�?�량 ?�일 불러?�기 */
.attach-loading{padding:12px 14px;border-radius:14px;background:var(--chip);color:var(--sub);font-size:13px}
.file-thumb.loading{background:var(--chip);display:grid;place-items:center}
.file-thumb.loading img{opacity:0}
/* ?�일 보�? 기한 */
.attach-expired{padding:12px 14px;border-radius:14px;background:var(--chip);color:var(--sub);font-size:13px}
/* ?�로???�래 ?�합 배너 (?�랫�?구분?�만 ?�끝까�? · ?�른�??�형 ?�이�?+ ?�단 ?�이?�) */
#bannerPager{padding:0 0 10px}
#bannerPager.hidden{display:none}
#bannerPager:empty{display:none}
.banner-pager{position:relative;border-bottom:1px solid var(--line);padding:12px 16px 8px}
.bp-x{position:absolute;top:6px;right:8px;width:24px;height:24px;border-radius:50%;background:transparent;color:var(--muted);font-size:11px;display:grid;place-items:center;line-height:1}
.bp-x:hover{background:var(--hover);color:var(--text)}
.bp-main{width:100%;display:flex;align-items:center;gap:12px;min-width:0;padding:4px 6px;font-size:15px;text-align:left;cursor:pointer;background:none;border:0}
.bp-main .grow{flex:1;min-width:0;text-align:left}
.bp-main .title{display:block;font-weight:800;font-size:17px;letter-spacing:-.3px}
.bp-main .meta{display:block;font-size:13.5px;color:var(--sub);margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bp-ico{flex:0 0 58px;width:58px;height:58px;border-radius:50%;background:#E8EEF7;display:grid;place-items:center;font-size:24px;font-weight:800;color:#3E5B7E;box-shadow:0 0 18px rgba(0,130,200,.25),0 6px 16px rgba(25,31,40,.18);animation:bpSoft 2.6s ease-in-out infinite}
.bp-ico.warn{background:#FBE9E9;color:#C81E2B}
.bp-ico.cal{background:#E8F4FB;color:#0069A8}
.bp-ico.duty{background:#E8F4FB;color:#0069A8}
.bp-ico.chat{background:#E8F7EF;color:#0E7A4F}
.bp-ico.todo{background:#FFF4DF;color:#9A6200}
html.dark .bp-ico{background:#000;color:#fff;box-shadow:0 0 20px rgba(255,255,255,.28),0 6px 16px rgba(0,0,0,.5)}
html.dark .bp-ico.warn{background:#2A1215;color:#FF6B6B}
.bp-foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:6px}
.bp-arrow{min-width:26px;height:24px;padding:0 6px;border-radius:7px;background:transparent;color:var(--sub);font-size:15px;display:grid;place-items:center;line-height:1}
.bp-arrow:disabled{opacity:.3}
.bp-arrow:hover{background:var(--hover)}
.bp-count{font-size:12.5px;color:var(--sub);font-variant-numeric:tabular-nums}
.bp-slide-right{animation:bpInRight .28s cubic-bezier(.2,.8,.2,1)}
.bp-slide-left{animation:bpInLeft .28s cubic-bezier(.2,.8,.2,1)}
@keyframes bpInRight{from{opacity:0;transform:translateX(26px)}to{opacity:1;transform:none}}
@keyframes bpInLeft{from{opacity:0;transform:translateX(-26px)}to{opacity:1;transform:none}}
@keyframes bpSoft{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
@media(prefers-reduced-motion:reduce){.bp-ico{animation:none}.bp-slide-right,.bp-slide-left{animation:none}}

/* ---------- ?�이?????�기 (목록??복구) ---------- */
.side-title-left{display:flex;align-items:center;gap:6px;min-width:0}
.side-caret-btn{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;background:transparent;color:var(--muted);font-size:11px;transition:background .16s,transform .16s}
.side-caret-btn:hover{background:var(--hover);color:var(--text)}
.side-caret{display:inline-block;transition:transform .22s ease}
.side-section.collapsed .side-caret{transform:rotate(-90deg)}
.side-section.collapsed .side-caret-btn{color:var(--sub)}

/* ---------- 배너 접기: 채팅 탭처럼 바짝 접어 얇은 띠만 남긴다 ---------- */
.banner-pager.mini{padding:3px 12px;border-bottom:1px solid var(--line)}
.bp-mini{width:100%;height:26px;border-radius:8px;background:transparent;color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:13px;gap:6px}
.bp-mini:hover{background:var(--hover);color:var(--sub)}
.bp-mini .bp-mini-bar{width:44px;height:4px;border-radius:2px;background:var(--line)}

/* ---------- ???�금 ---------- */
.lock-screen{position:fixed;inset:0;z-index:9999;background:rgba(246,248,252,.96);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:grid;place-items:center;opacity:0;pointer-events:none;transition:opacity .28s ease}
.lock-screen.show{opacity:1;pointer-events:auto}
.lock-card{width:min(360px,calc(100vw - 32px));background:#fff;border:1px solid var(--line);border-radius:24px;padding:28px 22px;box-shadow:0 30px 90px rgba(25,31,40,.18);text-align:center;transform:translateY(12px) scale(.98);transition:transform .28s cubic-bezier(.2,.8,.2,1)}
.lock-screen.show .lock-card{transform:none}
.lock-mark{width:56px;height:56px;border-radius:50%;background:var(--brand-soft);color:var(--brand-strong);display:grid;place-items:center;font-size:26px;margin:0 auto 12px}
.lock-card h2{margin:0 0 6px;font-size:20px}
.lock-card .desc{margin-bottom:14px}
.lock-dots{display:flex;gap:10px;justify-content:center;margin:14px 0 18px;min-height:16px}
.lock-dots span{width:13px;height:13px;border-radius:50%;background:var(--line);transition:background .22s cubic-bezier(.34,1.56,.64,1),transform .22s cubic-bezier(.34,1.56,.64,1),box-shadow .22s}
.lock-dots span.on{background:linear-gradient(140deg,var(--brand) 0%,var(--brand-strong) 100%);transform:scale(1.22);box-shadow:0 2px 8px rgba(0,130,200,.4)}
.lock-dots.shake{animation:lockShake .32s ease}
@keyframes lockShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px)}50%{transform:translateX(7px)}75%{transform:translateX(-4px)}}
.lock-pad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}
.lock-pad button{height:60px;border-radius:20px;background:var(--chip);border:1px solid transparent;font-size:20px;font-weight:650;transition:background .18s cubic-bezier(.2,.8,.2,1),transform .18s cubic-bezier(.34,1.56,.64,1),box-shadow .18s,border-color .18s;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.lock-pad button:hover{background:var(--hover);border-color:var(--line)}
.lock-pad button:active{transform:scale(.9);background:var(--brand-soft);border-color:var(--brand-line);box-shadow:0 4px 14px rgba(0,130,200,.22)}
html.dark .lock-pad button:active{background:var(--brand-soft);border-color:var(--brand-line)}
.lock-actions{margin-top:16px}
html.dark .lock-screen{background:rgba(16,17,25,.92)}
html.dark .lock-card{background:var(--surface);border-color:var(--line)}
/* ?�금 ?�패 2???�상 ??경고 배경 (붉게) */
.lock-screen.lock-warn{background:rgba(255,240,241,.96)}
.lock-screen.lock-warn .lock-card{border-color:#FFC9CD;box-shadow:0 30px 90px rgba(196,30,30,.18)}
.lock-screen.lock-warn .lock-mark{background:var(--danger-soft);color:var(--danger)}
.lock-screen.lock-warn .lock-dots span.on{background:var(--danger)}
.lock-screen.lock-warn .lock-card h2{color:var(--danger)}
.lock-screen.lock-blocked .lock-pad button{opacity:.42;pointer-events:none}
.lock-screen.lock-blocked .lock-pad button:active{transform:none}
html.dark .lock-screen.lock-warn{background:rgba(45,18,20,.92)}
html.dark .lock-screen.lock-warn .lock-card{border-color:#7A2E33}

/* ---------- ?�정 ??모션 ---------- */
.settings-pane{animation:settingsIn .28s cubic-bezier(.2,.8,.2,1)}
.settings-pane.hidden{display:none!important}
@keyframes settingsIn{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}
.pane-in-right{animation:paneInRight .28s cubic-bezier(.2,.8,.2,1)}
.pane-in-left{animation:paneInLeft .28s cubic-bezier(.2,.8,.2,1)}

/* ---------- 관리자 모바일 툴버 가로 fix ---------- */
@media(max-width:820px){
  .admin-toolbar{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;flex-wrap:nowrap;gap:8px;padding-bottom:2px}
  .admin-toolbar::-webkit-scrollbar{height:8px}
  .admin-toolbar .soft-btn,.admin-toolbar .input{flex:0 0 auto;min-width:140px}
  .admin-card{overflow:hidden;max-width:100%}
  .admin-body{overflow-x:hidden}
  .admin-tabs{flex-wrap:nowrap;overflow-x:auto}
}
@media(max-width:560px){
  .admin-toolbar .input{flex:1 1 auto;min-width:0}
  .setting-row{flex-wrap:wrap;gap:10px}
  .setting-row .setting-label{flex:1 1 100%}
  .setting-row .soft-btn,.setting-row .custom-select{flex:1 1 auto}
}

/* ---------- �??�정 ?�면 (채팅 ?�널 ???�라?�드) ---------- */
.room-settings-screen{height:100%;display:flex;flex-direction:column;background:var(--bg);animation:settingsIn .28s cubic-bezier(.2,.8,.2,1)}
.room-settings-head{height:64px;flex:0 0 64px;background:var(--surface);color:var(--text);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:env(safe-area-inset-top) 16px 0}
.room-settings-head .grow{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:2px}
.room-settings-head .grow>div:first-child{font-weight:730;font-size:15px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}
.room-settings-head .grow>div:last-child{font-size:12px;line-height:1.3;display:flex;align-items:center;gap:6px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room-settings-head .rs-title{font-weight:730;font-size:15px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}
.room-settings-head .rs-sub{font-size:12px;line-height:1.3;display:flex;align-items:center;gap:6px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.room-settings-head .rs-ico{display:inline-flex;align-items:center;flex:0 0 auto;min-width:0}
.room-settings-head .rs-ico .room-icon-img,.room-settings-head .rs-ico .room-icon-inline{width:20px !important;height:20px !important;max-width:20px !important;max-height:20px !important;font-size:12px}
.room-settings-body{flex:1;min-height:0;overflow:auto;padding:18px}
.room-settings-tabs{display:flex;gap:6px;background:var(--chip);padding:4px;border-radius:12px;margin-bottom:16px}
.room-settings-tabs .tab{flex:1}

/* ---------- 채팅 관�??�면 ---------- */
.chat-manage-screen{height:100%;display:flex;flex-direction:column;background:var(--bg);animation:settingsIn .28s cubic-bezier(.2,.8,.2,1)}
.chat-manage-head{height:64px;flex:0 0 64px;background:var(--surface);color:var(--text);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:env(safe-area-inset-top) 16px 0}
.chat-manage-body{flex:1;min-height:0;overflow:auto;padding:18px}
.chat-manage-tabs{display:flex;gap:6px;background:var(--chip);padding:4px;border-radius:12px;margin-bottom:16px}

/* ---------- ?�체 ?�정 ?�체?�면 ---------- */
.settings-page{width:100%;height:100%;display:flex;flex-direction:column;background:var(--bg);overflow:hidden}
.settings-page .admin-body{flex:1;min-height:0;overflow:auto}
.settings-page .admin-card{overflow:hidden}
.settings-save-bar{position:sticky;bottom:0;flex:0 0 auto;background:var(--surface);border-top:1px solid var(--line);padding:12px 16px calc(12px + env(safe-area-inset-bottom));box-shadow:0 -8px 24px rgba(25,31,40,.06);z-index:6}
.settings-save-bar .admin-wrap{margin:0 auto}
.settings-save-bar .primary{box-shadow:0 8px 20px rgba(0,130,200,.18)}
html.dark .settings-save-bar{background:var(--surface);border-color:var(--line);box-shadow:0 -8px 24px rgba(0,0,0,.35)}

/* 중복 ?�거: ?�단 @media(max-width:820px) ?�서 ?��? .auth-card .input 16px 지?�됨 */
/* ---------- ???�라?�딩 ?�디케?�터 ---------- */
.tabs{position:relative}
.tabs-indicator{position:absolute;top:4px;bottom:4px;left:4px;background:var(--surface);border-radius:9px;box-shadow:0 2px 8px rgba(25,31,40,.06);transition:transform .32s cubic-bezier(.2,.8,.2,1),width .32s cubic-bezier(.2,.8,.2,1);pointer-events:none;z-index:0}
.tabs .tab{position:relative;z-index:1}
.admin-tabs{position:relative}
.admin-tabs .tabs-indicator{top:4px;bottom:4px}
.admin-tabs .tab,.room-settings-tabs .tab,.chat-manage-tabs .tab{position:relative;z-index:1}
.room-settings-tabs,.chat-manage-tabs{position:relative}
.room-settings-tabs .tabs-indicator,.chat-manage-tabs .tabs-indicator{top:4px;bottom:4px;background:var(--surface);border-radius:9px;box-shadow:0 2px 8px rgba(25,31,40,.06)}
/* ?�디케?�터가 ?�을 ?�는 active ??배경???�명?�게 ?�야 글?��? ?�디케?�터??가?��?지 ?�음 */
.tabs:has(.tabs-indicator) .tab.active,.admin-tabs:has(.tabs-indicator) .tab.active,.room-settings-tabs:has(.tabs-indicator) .tab.active,.chat-manage-tabs:has(.tabs-indicator) .tab.active{background:transparent;box-shadow:none}
html.dark .tabs:has(.tabs-indicator) .tab.active,html.dark .admin-tabs:has(.tabs-indicator) .tab.active,html.dark .room-settings-tabs:has(.tabs-indicator) .tab.active,html.dark .chat-manage-tabs:has(.tabs-indicator) .tab.active{background:transparent;box-shadow:none}
/* 구형 브라?��? :has 미�????��?*/
.tabs.has-indicator .tab.active,.admin-tabs.has-indicator .tab.active,.room-settings-tabs.has-indicator .tab.active,.chat-manage-tabs.has-indicator .tab.active{background:transparent;box-shadow:none}
html.dark .tabs.has-indicator .tab.active,html.dark .admin-tabs.has-indicator .tab.active,html.dark .room-settings-tabs.has-indicator .tab.active,html.dark .chat-manage-tabs.has-indicator .tab.active{background:transparent;box-shadow:none}

/* ---------- ?�정 ?�이�?(?�모지 ?�??간결???�인 ?�이�? ---------- */
.s-ico{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex:0 0 auto;color:var(--sub);vertical-align:-2px;margin-right:4px}
.s-ico svg{width:100%;height:100%;display:block}
.admin-card h3 .s-ico{width:18px;height:18px;color:var(--text);margin-right:6px;vertical-align:-3px}
.tab .s-ico{width:14px;height:14px;margin-right:5px;vertical-align:-1px;color:inherit;opacity:.9}
.tab.active .s-ico{color:var(--brand-strong);opacity:1}
html.dark .admin-card h3 .s-ico{color:var(--text)}
html.dark .tab.active .s-ico{color:var(--brand)}
.settings-page .admin-tabs .tab .s-ico{color:var(--sub)}
.settings-page .admin-tabs .tab.active .s-ico{color:var(--text)}

input, textarea, select{touch-action:manipulation}

/* Fix room photo huge in settings */
.room-settings-screen .room-icon-img{width:32px !important;height:32px !important;border-radius:8px !important}
.room-settings-screen .room-icon-inline{width:32px !important;height:32px !important}
.settings-page .room-icon-img, .admin-card .room-icon-img{width:32px !important;height:32px !important}

/* Fix huge room photo in settings - ensure icon is small */
.room-settings-screen .list-item img{max-width:32px;max-height:32px;width:32px;height:32px;object-fit:cover;border-radius:8px}
.room-settings-screen .room-icon-img{width:32px !important;height:32px !important;max-width:32px !important;max-height:32px !important}

/* ---------- 모션 충돌 보완: ?�락??prefers-reduced-motion ?�합 ---------- */
@media(prefers-reduced-motion:reduce){
  .tabs-indicator{transition:none !important}
  .lock-screen,.lock-card{transition:none !important}
  .room.room-enter,
  .room-pane.pane-in-right, .room-pane.pane-in-left,
  .settings-pane, .pane-in-right, .pane-in-left,
  .chat-main.room-enter #messages, .chat-main.room-enter .composer-inner,
  .brand-name.roll-in, .brand-name.roll-out,
  .typing-dots i, .mock-list.mock-in .mock-row,
  .screen-enter, .screen-exit,
  .auth-shell.enter .auth-hero, .auth-shell.enter .auth-card,
  .auth-anim-left, .auth-anim-right,
  .landing-sheet-panel, .landing-sheet-back,
  .bp-slide-right, .bp-slide-left, .bp-ico,
  .attend-pill, .roomListIn, .settingsIn, .roomFadeIn, .roomFadeUp{animation:none !important;transition:none !important}
  .landing-mock, .landing-card, .landing-step{transition:none !important}
  .composer textarea{transition:none !important}
}

/* ---------- ?�정 검??& ?�로???�?�바 고도??---------- */
.settings-search{position:sticky;top:0;z-index:4;background:var(--surface);padding:10px 0 12px;margin: -2px 0 12px;border-bottom:1px solid var(--line);display:flex;gap:8px;align-items:center}
.settings-search input{flex:1;height:38px;border:1px solid var(--line);border-radius:11px;padding:0 12px 0 34px;background:var(--chip);outline:none;font-size:14px}
.settings-search .search-ico{position:absolute;left:12px;font-size:14px;color:var(--muted);pointer-events:none}
.settings-search-wrap{position:relative;flex:1}
.settings-card.hidden-by-search{display:none !important}
.settings-save-bar .save-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--danger);margin-right:6px;vertical-align:middle;opacity:0;transform:scale(.7);transition:opacity .18s,transform .18s}
.settings-save-bar.dirty .save-dot{opacity:1;transform:scale(1)}
.settings-save-bar button:disabled{opacity:.45;cursor:default;filter:saturate(.3)}
.settings-save-bar button:disabled:active{transform:none}

/* ---------- 커맨???�레??---------- */
.cmd-palette{position:fixed;inset:0;z-index:900;display:flex;align-items:flex-start;justify-content:center;padding:20vh 16px 16px;background:rgba(12,16,22,.38);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);opacity:0;pointer-events:none;transition:opacity .18s}
.cmd-palette.show{opacity:1;pointer-events:auto}
.cmd-box{width:min(640px,100%);background:var(--surface);border:1px solid var(--line);border-radius:20px;box-shadow:0 30px 80px rgba(0,0,0,.25);overflow:hidden;transform:translateY(8px) scale(.98);transition:transform .22s cubic-bezier(.2,.8,.2,1)}
.cmd-palette.show .cmd-box{transform:none}
.cmd-input{width:100%;height:52px;border:0;border-bottom:1px solid var(--line);padding:0 16px 0 44px;font-size:16px;background:transparent;outline:none}
.cmd-input-wrap{position:relative}
.cmd-input-wrap .search-ico{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:15px}
.cmd-list{max-height:min(52vh,420px);overflow:auto;padding:8px}
.cmd-item{width:100%;display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;text-align:left;transition:background .16s}
.cmd-item:hover,.cmd-item.active{background:var(--brand-soft);color:var(--brand-strong)}
.cmd-item .s-ico{width:18px;height:18px;color:inherit}
.cmd-item .meta{font-size:12px;color:var(--sub)}
.cmd-empty{padding:24px;text-align:center;color:var(--sub);font-size:13px}
html.dark .cmd-palette{background:rgba(0,0,0,.55)}
html.dark .cmd-box{box-shadow:0 30px 80px rgba(0,0,0,.5)}
@media(max-width:560px){
  /* 모바일에서는 검색과 친구를 '갑자기 뜨는 팝업' 대신 아래에서 올라오는 시트로 보여 준다. */
  .cmd-palette{align-items:flex-end;justify-content:stretch;padding:0}
  .cmd-box{width:100%;border-radius:24px 24px 0 0;border-bottom:0;transform:translateY(34px);padding-bottom:env(safe-area-inset-bottom)}
  .cmd-box::before{content:"";display:block;width:38px;height:4px;margin:9px auto 0;border-radius:999px;background:var(--line-strong);opacity:.65}
  .cmd-palette.show .cmd-box{transform:none}
  .cmd-list{max-height:min(58dvh,440px)}
  .overlay.sheet-overlay{align-items:flex-end;padding:0}
  .overlay.sheet-overlay .modal.friend-sheet{width:100%;max-width:100%;max-height:calc(100dvh - 28px);border-radius:24px 24px 0 0;padding-bottom:calc(24px + env(safe-area-inset-bottom))}
}

/* ---------- ?��? ?��? ?�약 ---------- */
.unread-summary{margin:8px 12px 0;padding:10px 12px;border-radius:12px;background:var(--brand-soft);border:1px solid var(--brand-line);display:flex;align-items:center;gap:8px;font-size:13px;color:var(--brand-strong);cursor:pointer;transition:background .16s}
.unread-summary.hidden{display:none}
.unread-summary:hover{background:#E1F0FF}
.unread-summary b{font-weight:800}
.unread-summary .s-ico{color:var(--brand-strong)}
html.dark .unread-summary{background:var(--brand-soft);border-color:var(--brand-line)}
html.dark .unread-summary:hover{background:#1A2E4A}

/* ---------- 초안 ?�시 ---------- */
.composer-draft-hint{position:absolute;left:50%;transform:translateX(-50%);top:-22px;padding:3px 10px;border-radius:999px;background:#191f28;color:#fff;font-size:11px;opacity:0;pointer-events:none;transition:opacity .2s}
.composer-draft-hint.show{opacity:1}

/* palette hint in sidebar */
.side-top .icon-btn[data-action="open-palette"]{width:32px;height:32px;font-size:14px}

@keyframes saveBarIn{from{opacity:0;transform:translateX(-50%) translateY(12px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}

/* ---------- 모바일 플로팅 탭바 (iOS 리퀴드 글래스 · 하단 알약) ---------- */
.breeze-tabbar{position:fixed;left:50%;bottom:calc(12px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:70;display:none;align-items:center;gap:4px;padding:8px 10px;border-radius:999px;background:rgba(255,255,255,.72);backdrop-filter:saturate(180%) blur(22px);-webkit-backdrop-filter:saturate(180%) blur(22px);border:1px solid rgba(0,130,200,.14);box-shadow:0 10px 30px rgba(0,130,200,.18),inset 0 0 0 1px rgba(255,255,255,.7);transition:transform .34s cubic-bezier(.22,1,.36,1),opacity .24s}
@media(max-width:560px){.breeze-tabbar{display:flex}}
.breeze-tab{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;gap:2px;min-width:58px;padding:6px 10px;border-radius:999px;color:var(--sub);font-size:11px;font-weight:700;transition:color .2s,background .2s,transform .18s}
.breeze-tab .bt-ico{font-size:18px;line-height:1}
.breeze-tab:active{transform:scale(.94)}
.breeze-tab.on{color:var(--brand-strong);background:var(--brand-soft)}
body.m-chat-open .breeze-tabbar,body.settings-open .breeze-tabbar,body.admin-open .breeze-tabbar{opacity:0;pointer-events:none;transform:translateX(-50%) translateY(140%)}
html.dark .breeze-tabbar{background:rgba(24,30,40,.72);border-color:rgba(255,255,255,.08);box-shadow:0 10px 30px rgba(0,0,0,.5),inset 0 0 0 1px rgba(255,255,255,.06)}
html.dark .breeze-tab.on{color:#fff;background:rgba(0,130,200,.28)}
@media(prefers-reduced-motion:reduce){.breeze-tabbar{transition:none}.breeze-tab{transition:none}}

/* ---------- 이용권 구매 ---------- */
.billing-modal{width:min(760px,calc(100vw - 28px))}
.billing-modal .modal-head-text{max-width:620px}
.billing-loading{display:flex;align-items:center;justify-content:center;gap:10px;padding:46px 10px;color:var(--sub);font-size:13px}
.billing-spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--brand-line);border-top-color:var(--brand);animation:billingSpin .8s linear infinite}
@keyframes billingSpin{to{transform:rotate(360deg)}}
.billing-steps{display:flex;align-items:center;gap:8px;margin:2px 0 20px}
.billing-step{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;font-weight:650;white-space:nowrap}
.billing-step-num{display:grid;place-items:center;width:23px;height:23px;border-radius:50%;background:var(--chip);color:var(--sub);font-size:11px;font-weight:800;transition:background .2s,color .2s,transform .2s}
.billing-step.active{color:var(--text)}
.billing-step.active .billing-step-num{background:var(--brand);color:#fff;transform:scale(1.06)}
.billing-step.done{color:var(--brand-strong)}
.billing-step.done .billing-step-num{background:var(--brand-soft);color:var(--brand-strong)}
.billing-step-line{flex:1;height:1px;background:var(--line);min-width:14px}
.billing-plans{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.billing-plan{position:relative;display:flex;flex-direction:column;align-items:stretch;gap:7px;min-width:0;padding:16px 15px 14px;border:1.5px solid var(--line);border-radius:17px;background:var(--surface);text-align:left;transition:border-color .18s,box-shadow .2s,transform .18s,background .18s}
.billing-plan:hover{border-color:var(--brand-line);transform:translateY(-1px);box-shadow:0 12px 28px rgba(0,130,200,.1)}
.billing-plan.selected{border-color:var(--brand);background:linear-gradient(180deg,var(--brand-soft),var(--surface) 58%);box-shadow:0 12px 30px rgba(0,130,200,.12)}
.billing-plan-badge{align-self:flex-start;padding:4px 7px;border-radius:7px;background:var(--brand-soft);color:var(--brand-strong);font-size:9.5px;font-weight:800;letter-spacing:-.1px}
.billing-plan.selected .billing-plan-badge{background:var(--brand);color:#fff}
.billing-plan-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.billing-plan-name{font-size:14px;font-weight:800;letter-spacing:-.35px}
.billing-radio{display:inline-grid;place-items:center;width:18px;height:18px;flex:0 0 18px;border:1.5px solid var(--line);border-radius:50%;background:var(--surface);transition:border-color .16s,background .16s}
.billing-plan.selected .billing-radio,.billing-method.selected .billing-radio{border-color:var(--brand);background:var(--brand);box-shadow:inset 0 0 0 4px var(--surface)}
.billing-plan-price{display:flex;align-items:baseline;gap:4px;color:var(--text);white-space:nowrap}
.billing-plan-price b{font-size:23px;letter-spacing:-1px;font-variant-numeric:tabular-nums}
.billing-plan-price small{font-size:11px;color:var(--sub);font-weight:600}
.billing-plan-desc{font-size:11.5px;line-height:1.5;color:var(--sub);min-height:34px}
.billing-plan-feats{display:flex;flex-direction:column;gap:3px;margin-top:3px;font-size:11px;color:var(--sub);line-height:1.45}
.billing-plan-feats span::before{content:"·";color:var(--brand);font-weight:900;margin-right:5px}
.billing-summary{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:18px;padding:14px 16px;border:1px solid var(--line);border-radius:15px;background:var(--surface)}
.billing-summary-label{display:block;font-size:11px;font-weight:700;color:var(--muted);margin-bottom:2px}
.billing-summary b{font-size:14px}
.billing-summary-sub{display:block;margin-top:3px;font-size:11.5px;color:var(--sub)}
.billing-summary-total{text-align:right;white-space:nowrap}
.billing-summary-total span{display:block;font-size:11px;color:var(--muted);font-weight:650}
.billing-summary-total strong{font-size:25px;letter-spacing:-1px;color:var(--brand-strong);font-variant-numeric:tabular-nums}
.billing-summary-total small{font-size:12px;margin-left:2px;color:var(--sub)}
.billing-back{align-self:flex-start;margin:-6px 0 10px;padding:5px 2px;color:var(--sub);font-size:12px;font-weight:650;border-radius:7px}
.billing-back:hover{color:var(--brand-strong)}
.billing-review{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px;border:1px solid var(--line);border-radius:15px;background:var(--surface)}
.billing-review-plan{display:flex;align-items:center;gap:11px;min-width:0}
.billing-review-plan div{min-width:0}
.billing-review-plan b{display:block;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.billing-review-plan small{display:block;margin-top:3px;color:var(--sub);font-size:11.5px;line-height:1.4}
.billing-review-ico{display:grid;place-items:center;width:42px;height:42px;flex:0 0 42px;border-radius:13px;background:var(--brand-soft);color:var(--brand-strong);font-size:19px;font-weight:800}
.billing-review-price{text-align:right;white-space:nowrap}
.billing-review-price b{display:block;font-size:18px;letter-spacing:-.5px}
.billing-review-price small{display:block;margin-top:2px;font-size:10.5px;color:var(--muted)}
.billing-section-label{display:flex;align-items:center;gap:8px;margin:18px 0 9px;font-size:12px;font-weight:800;color:var(--text)}
.billing-mode-pill{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:999px;background:#FFF7E8;border:1px solid #F4DFB2;color:#8A5A00;font-size:10px;font-weight:750}
.billing-mode-pill.secure{background:var(--brand-soft);border-color:var(--brand-line);color:var(--brand-strong)}
.billing-methods{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.billing-method{display:flex;align-items:center;gap:9px;min-width:0;padding:12px 12px;border:1.5px solid var(--line);border-radius:13px;background:var(--surface);text-align:left;transition:border-color .16s,background .16s,transform .16s}
.billing-method:hover{border-color:var(--brand-line)}
.billing-method.selected{border-color:var(--brand);background:var(--brand-soft)}
.billing-method-icon{display:grid;place-items:center;width:31px;height:31px;flex:0 0 31px;border-radius:9px;background:var(--chip);color:var(--sub);font-size:14px;font-weight:800}
.billing-method.selected .billing-method-icon{background:var(--surface);color:var(--brand-strong)}
.billing-method-text{flex:1;min-width:0}
.billing-method-text b{display:block;font-size:12.5px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.billing-method-text small{display:block;margin-top:2px;font-size:10.5px;line-height:1.35;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.billing-bank-note{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin-top:9px;padding:11px 12px;border-radius:11px;background:#F7FAFC;border:1px dashed var(--line);font-size:11.5px;color:var(--sub)}
.billing-bank-note b{font-size:12px;color:var(--text)}
.billing-bank-note small{flex-basis:100%;color:var(--muted);font-size:10.5px}
.billing-buyer{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.billing-buyer .field{margin:0}
.billing-readonly{display:flex;align-items:center;height:42px;padding:0 12px;border:1px solid var(--line);border-radius:11px;background:var(--chip);color:var(--sub);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.billing-consent{margin:9px 0 0;font-size:11px;padding:10px 11px;line-height:1.5}
.billing-note{margin-top:10px;font-size:11.5px;line-height:1.6;color:var(--sub)}
.billing-note b{color:var(--text)}
.billing-error{display:flex;flex-direction:column;gap:3px;margin-top:11px;padding:10px 12px;border:1px solid #F2C7C9;border-radius:11px;background:#FFF4F4;color:#A3282C;font-size:11.5px;line-height:1.5;animation:billingSoftIn .2s ease}
.billing-error b{font-size:12px}
.billing-result-icon{display:grid;place-items:center;width:48px;height:48px;margin:2px auto 10px;border-radius:50%;background:var(--brand-soft);color:var(--brand-strong);font-size:23px;font-weight:800}
.billing-result-icon.pending{background:#FFF7E8;color:#9A6500}
.billing-result-copy{text-align:center;margin-bottom:15px}
.billing-result-copy h3{margin:0 0 5px;font-size:18px;letter-spacing:-.45px}
.billing-result-copy p{margin:0;color:var(--sub);font-size:12px;line-height:1.6}
.billing-amount-card{display:flex;flex-direction:column;align-items:center;gap:1px;padding:14px;border:1px solid var(--line);border-radius:15px;background:linear-gradient(180deg,var(--brand-soft),var(--surface));margin-bottom:11px}
.billing-amount-card>span{font-size:11px;color:var(--sub);font-weight:650}
.billing-amount-card>b{font-size:28px;letter-spacing:-1.2px;color:var(--text);font-variant-numeric:tabular-nums}
.billing-amount-card>b small{font-size:12px;margin-left:2px;color:var(--sub);letter-spacing:0}
.billing-amount-sub{font-size:10.5px!important;color:var(--muted)!important;font-weight:500!important}
.billing-transfer-card{padding:4px 13px;border:1px solid var(--line);border-radius:14px;background:var(--surface)}
.billing-transfer-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);font-size:12px}
.billing-transfer-row:last-child{border-bottom:0}
.billing-transfer-row span{color:var(--sub);flex:0 0 auto}
.billing-transfer-row b{text-align:right;font-weight:700;overflow-wrap:anywhere}
.billing-transfer-row.muted b{color:var(--sub);font-weight:600}
.billing-transfer-guide{padding:9px 0 10px;border-top:1px dashed var(--line);font-size:10.5px;line-height:1.5;color:var(--muted)}
.billing-transfer-empty{padding:17px 0;text-align:center;font-size:12px;color:var(--sub)}
.billing-copy{display:inline-flex;align-items:center;height:24px;margin-left:5px;padding:0 8px;border-radius:7px;background:var(--brand-soft);color:var(--brand-strong);font-size:10px;font-weight:750;vertical-align:1px;transition:background .16s,transform .16s}
.billing-copy:hover{background:#D9EDF8}
.billing-copy:active{transform:scale(.96)}
.billing-pay-card{position:relative;padding:19px 18px;border:1px solid var(--line);border-radius:19px;background:linear-gradient(145deg,#F8FCFE,var(--surface) 60%);overflow:hidden;box-shadow:0 18px 40px rgba(15,23,42,.08)}
.billing-pay-card::after{content:"";position:absolute;width:150px;height:150px;border-radius:50%;right:-65px;top:-70px;background:radial-gradient(circle,rgba(0,130,200,.15),rgba(0,130,200,0) 70%);pointer-events:none}
.billing-pay-brand{display:flex;align-items:center;gap:7px;margin-top:15px;color:var(--sub);font-size:11px;font-weight:700}
.billing-pay-dot{width:13px;height:13px;border-radius:4px;background:var(--brand);box-shadow:inset 0 0 0 3px rgba(255,255,255,.55)}
.billing-pay-amount{margin:7px 0 4px;font-size:38px;font-weight:850;letter-spacing:-2px;font-variant-numeric:tabular-nums}
.billing-pay-amount small{font-size:14px;letter-spacing:0;color:var(--sub);margin-left:3px;font-weight:650}
.billing-pay-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:10.5px;color:var(--muted)}
.billing-pay-meta span:last-child{font-variant-numeric:tabular-nums}
.billing-pay-lines{display:flex;gap:6px;margin:16px 0 11px}
.billing-pay-lines span{height:4px;border-radius:999px;background:var(--brand-soft);flex:1}
.billing-pay-lines span:first-child{background:var(--brand);max-width:34%}
.billing-pay-card p{margin:0 0 13px;color:var(--sub);font-size:11px;line-height:1.55}
.billing-pay-button{width:100%;height:44px;border-radius:12px;background:var(--brand);color:#fff;font-size:13px;font-weight:800;transition:background .16s,transform .16s,box-shadow .16s;box-shadow:0 8px 18px rgba(0,130,200,.2)}
.billing-pay-button:hover{background:var(--brand-strong);box-shadow:0 10px 22px rgba(0,130,200,.26)}
.billing-pay-button:active{transform:scale(.985)}
.billing-pay-button:disabled{opacity:.65;box-shadow:none}
.billing-success{text-align:center;padding:3px 0 0}
.billing-success-check{display:grid;place-items:center;width:58px;height:58px;margin:1px auto 11px;border-radius:50%;background:var(--brand);color:#fff;font-size:27px;font-weight:800;box-shadow:0 12px 26px rgba(0,130,200,.26);animation:billingCheck .45s cubic-bezier(.2,1.4,.4,1) both}
@keyframes billingCheck{0%{transform:scale(.5);opacity:0}65%{transform:scale(1.08)}100%{transform:scale(1);opacity:1}}
.billing-success h3{margin:0 0 4px;font-size:19px;letter-spacing:-.5px}
.billing-success>p{margin:0 0 14px;font-size:12px;color:var(--sub)}
.billing-code-box{display:flex;align-items:center;gap:9px;margin-top:8px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface);text-align:left}
.billing-code-box>span{flex:0 0 54px;font-size:10px;font-weight:750;color:var(--muted)}
.billing-code-box>b{flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;letter-spacing:1px;overflow-wrap:anywhere}
.billing-code-box.auth>b{letter-spacing:2px;color:var(--brand-strong)}
.billing-success-note{margin-top:11px;font-size:10.5px;color:var(--muted)}
.billing-my-orders{display:flex;flex-direction:column;gap:7px}
.billing-empty{padding:18px 10px;text-align:center;color:var(--muted);font-size:12px;line-height:1.5}
.billing-order-row{display:flex;align-items:center;gap:9px;min-width:0;width:100%;padding:10px 11px;border:1px solid var(--line);border-radius:12px;background:var(--surface);text-align:left;transition:border-color .16s,background .16s,transform .16s}
.billing-order-row:hover{border-color:var(--brand-line);background:#FBFDFF}
.billing-order-row .grow{flex:1;min-width:0}
.billing-order-row .grow b{display:block;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.billing-order-row .grow small{display:block;margin-top:2px;font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.billing-order-ico{display:grid;place-items:center;width:28px;height:28px;flex:0 0 28px;border-radius:9px;background:var(--chip);color:var(--sub);font-size:12px;font-weight:800}
.billing-order-ico.paid{background:var(--brand-soft);color:var(--brand-strong)}
.billing-order-ico.pending{background:#FFF7E8;color:#9A6500}
.billing-order-ico.cancelled,.billing-order-ico.failed{background:var(--danger-soft);color:var(--danger)}
.billing-order-state{flex:0 0 auto;padding:3px 7px;border-radius:999px;font-size:9.5px;font-weight:750;background:var(--chip);color:var(--sub);white-space:nowrap}
.billing-order-state.paid{background:var(--brand-soft);color:var(--brand-strong)}
.billing-order-state.pending{background:#FFF7E8;color:#8A5A00}
.billing-order-state.cancelled,.billing-order-state.failed{background:var(--danger-soft);color:var(--danger)}
.billing-order-amount{flex:0 0 auto;font-size:11px;font-weight:750;color:var(--sub);font-variant-numeric:tabular-nums}
.billing-order-chevron{color:var(--muted);font-size:15px}
.billing-entry-card{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;padding:19px 20px;border-radius:18px;overflow:hidden;background:linear-gradient(135deg,#082F49 0%,#0A5C86 56%,#0082C8 100%);color:#fff;box-shadow:0 16px 34px rgba(8,47,73,.18)}
.billing-entry-card::after{content:"";position:absolute;right:-38px;top:-60px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.16),rgba(255,255,255,0) 68%);pointer-events:none}
.billing-entry-copy{position:relative;z-index:1;min-width:0}
.billing-entry-kicker{display:inline-flex;align-items:center;height:21px;padding:0 8px;border-radius:999px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.18);font-size:9.5px;font-weight:750;letter-spacing:.2px}
.billing-entry-card h3{margin:8px 0 4px;font-size:17px;letter-spacing:-.45px;color:#fff}
.billing-entry-card p{margin:0;font-size:11px;line-height:1.55;color:rgba(255,255,255,.76);max-width:470px}
.billing-entry-btn{position:relative;z-index:1;flex:0 0 auto;height:38px;padding:0 15px;border-radius:11px;background:#fff;color:#0A5C86;font-size:12px;font-weight:800;transition:transform .16s,background .16s}
.billing-entry-btn:hover{background:#F1F9FD;transform:translateY(-1px)}
.billing-entry-btn:active{transform:scale(.97)}
.billing-admin-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.billing-admin-head .desc{margin-bottom:12px}
.billing-admin-summary{display:flex;align-items:center;gap:14px;margin:4px 0 11px;padding:9px 11px;border-radius:10px;background:var(--chip);font-size:11px;color:var(--sub)}
.billing-admin-summary b{color:var(--text);font-size:12px}
.billing-admin-summary .pending{color:#8A5A00;margin-left:auto}
.billing-admin-summary .pending b{color:#8A5A00}
.billing-admin-orders{display:flex;flex-direction:column;gap:8px}
.billing-admin-row{padding:10px 11px;border:1px solid var(--line);border-radius:13px;background:var(--surface)}
.billing-admin-main{display:flex;align-items:center;gap:9px;min-width:0}
.billing-admin-main .grow{flex:1;min-width:0}
.billing-admin-main .grow b{display:block;font-size:12px;font-weight:750}
.billing-admin-main .grow small{display:block;margin-top:3px;font-size:10px;color:var(--muted);line-height:1.45;overflow-wrap:anywhere}
.billing-admin-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
.billing-admin-actions .soft-btn{height:29px;padding:0 10px;font-size:10.5px}
.billing-detail-head{display:flex;align-items:center;gap:9px;margin-bottom:12px}
.billing-detail-head>div{flex:1;min-width:0}
.billing-detail-head>div b{display:block;font-size:13px}
.billing-detail-head>div small{display:block;margin-top:2px;font-size:10.5px;color:var(--muted)}
.billing-detail-amount{display:flex;align-items:baseline;justify-content:space-between;padding:12px 13px;border-radius:12px;background:var(--brand-soft);margin-bottom:10px}
.billing-detail-amount span{font-size:11px;color:var(--sub);font-weight:650}
.billing-detail-amount b{font-size:21px;letter-spacing:-.7px;color:var(--brand-strong);font-variant-numeric:tabular-nums}
.billing-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--line);margin-bottom:10px}
.billing-detail-grid>div{padding:9px 11px;background:var(--surface)}
.billing-detail-grid span{display:block;font-size:9.5px;color:var(--muted);margin-bottom:2px}
.billing-detail-grid b{display:block;font-size:11.5px;overflow-wrap:anywhere}
html.dark .billing-plan,html.dark .billing-summary,html.dark .billing-review,html.dark .billing-method,html.dark .billing-transfer-card,html.dark .billing-pay-card,html.dark .billing-code-box,html.dark .billing-order-row,html.dark .billing-admin-row,html.dark .billing-detail-grid>div{background:var(--surface)}
html.dark .billing-plan.selected,html.dark .billing-method.selected{background:linear-gradient(180deg,rgba(0,130,200,.2),var(--surface) 70%)}
html.dark .billing-bank-note{background:#15202A}
html.dark .billing-error{background:#321E20;border-color:#5B2A2D;color:#FFB4B8}
html.dark .billing-mode-pill{background:#2E2616;border-color:#544321;color:#FFD48A}
html.dark .billing-result-icon.pending{background:#2E2616;color:#FFD48A}
html.dark .billing-order-row:hover{background:#18222D}
html.dark .billing-entry-card{box-shadow:0 16px 34px rgba(0,0,0,.32)}
html.dark .billing-pay-card{background:linear-gradient(145deg,#14202A,var(--surface) 65%)}
html.dark .billing-readonly{background:var(--chip)}
.landing-price-buy{margin-top:13px;height:35px;width:100%;border:1px solid var(--brand-line);border-radius:10px;background:var(--brand-soft);color:var(--brand-strong);font-size:12px;font-weight:750;transition:background .16s,transform .16s,box-shadow .16s}
.landing-price-buy:hover{background:#D9EDF8;box-shadow:0 5px 14px rgba(0,130,200,.1)}
.landing-price-buy:active{transform:scale(.98)}
html.dark .landing-price-buy{background:rgba(0,130,200,.2);border-color:rgba(0,130,200,.4);color:#9BD3EE}
html.dark .landing-price-buy:hover{background:rgba(0,130,200,.3)}
@media(max-width:700px){
  .billing-plans{grid-template-columns:1fr}
  .billing-plan-desc{min-height:0}
  .billing-methods,.billing-buyer,.billing-detail-grid{grid-template-columns:1fr}
  .billing-step-line{min-width:6px}
  .billing-step span:last-child{display:none}
  .billing-step.active span:last-child{display:inline}
  .billing-entry-card{align-items:flex-start;flex-direction:column;gap:12px;padding:17px}
  .billing-entry-btn{width:100%}
  .billing-order-amount{display:none}
  .billing-summary{align-items:flex-end}
}
@media(prefers-reduced-motion:reduce){
  .billing-plan,.billing-method,.billing-pay-button,.billing-entry-btn,.billing-copy,.billing-order-row{transition:none}
  .billing-spinner,.billing-success-check{animation:none}
}
.receipt-paper{padding:4px 2px 2px}
.receipt-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:14px;border-bottom:2px solid var(--text)}
.receipt-kicker{font-size:8px;font-weight:800;letter-spacing:1.2px;color:var(--brand-strong)}
.receipt-head h1{margin:4px 0 3px;font-size:20px;letter-spacing:-.6px}
.receipt-head p{margin:0;font-size:10.5px;line-height:1.5;color:var(--muted)}
.receipt-state{flex:0 0 auto;padding:5px 9px;border-radius:999px;background:var(--brand-soft);color:var(--brand-strong);font-size:9.5px;font-weight:800}
.receipt-meta{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin:14px 0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--line)}
.receipt-meta>div{padding:8px 10px;background:var(--surface);min-width:0}
.receipt-meta span,.receipt-parties span{display:block;margin-bottom:2px;font-size:9px;color:var(--muted)}
.receipt-meta b{font-size:10.5px;overflow-wrap:anywhere}
.receipt-parties{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:0 0 13px;border-bottom:1px solid var(--line)}
.receipt-parties b{display:block;font-size:12px}
.receipt-parties small{display:block;margin-top:2px;font-size:9.5px;color:var(--muted);overflow-wrap:anywhere}
.receipt-table{width:100%;margin-top:14px;border-collapse:collapse;font-size:10.5px}
.receipt-table th{padding:7px 6px;border-bottom:1px solid var(--text);text-align:right;font-size:8.5px;color:var(--muted)}
.receipt-table th:first-child,.receipt-table td:first-child{text-align:left}
.receipt-table td{padding:10px 6px;border-bottom:1px solid var(--line);text-align:right;font-variant-numeric:tabular-nums}
.receipt-table tfoot td{padding:9px 6px;border-bottom:0;background:var(--chip);font-weight:800}
.receipt-table tfoot td:first-child{text-align:right;color:var(--sub);font-weight:600}
.receipt-foot{margin-top:14px;padding-top:10px;border-top:1px dashed var(--line);color:var(--muted);font-size:9px;line-height:1.55}
.receipt-foot p{margin:0 0 3px}
html.dark .receipt-meta>div{background:var(--surface)}
html.dark .receipt-table tfoot td{background:var(--dark-chip)}
@media(max-width:520px){.receipt-head{flex-direction:column;gap:7px}.receipt-meta,.receipt-parties{grid-template-columns:1fr}}
