:root{--brand:#2f46d6;--brand-d:#2336b0;--brand-soft:#eef1ff;--accent:#ff6b3d;--ink:#1b2133;--ink2:#363d52;--muted:#667085;--line:#e5e8ef;--line2:#d3d8e3;--bg:#f6f7fb;--white:#fff;--ok:#16875a;--ok-soft:#e7f6ee;--warn:#a96a00;--warn-soft:#fff4dc;--bad:#c62828;--bad-soft:#fdeaea;--info:#1f62b0;--info-soft:#e8f1fb;--radius:12px;--shadow:0 1px 2px rgba(20,28,58,.06),0 6px 20px rgba(20,28,58,.06);--dark:#10142a;--font:Pretendard,"Noto Sans CJK KR","Noto Sans CJK JP","Malgun Gothic","Apple SD Gothic Neo",sans-serif}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font);color:var(--ink);background:var(--bg);font-size:14px;line-height:1.6;min-width:320px}
h1,h2,h3,h4,p,ul,ol,figure{margin:0}ul,ol{padding:0;list-style:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;border:0;background:none;padding:0}a{color:inherit;text-decoration:none}
svg{width:18px;height:18px;flex-shrink:0;vertical-align:middle}[hidden]{display:none!important}img{max-width:100%;display:block}
:focus-visible{outline:3px solid #7f8fff;outline-offset:2px;border-radius:6px}button:disabled,.btn:disabled{cursor:not-allowed;opacity:.5}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.skip{position:fixed;left:8px;top:-60px;background:var(--dark);color:#fff;padding:10px 14px;border-radius:8px;z-index:200}.skip:focus{top:8px}
.num{font-variant-numeric:tabular-nums}
/* 상단 */
.topbar{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50}
.topbar-in{max-width:1600px;margin:auto;height:62px;display:flex;align-items:center;gap:20px;padding:0 28px}
.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:19px;letter-spacing:-.02em;flex-shrink:0}
.brand-mark{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,var(--brand),#6f7dff);color:#fff;display:grid;place-items:center;font-size:17px;font-weight:800}
.brand small{display:block;font-size:10px;font-weight:600;color:var(--muted);letter-spacing:.14em;margin-top:-3px}
.roles{display:flex;background:#f0f2f8;border-radius:10px;padding:3px;gap:2px;margin-left:8px}
.roles button{padding:6px 12px;border-radius:8px;font-weight:600;font-size:13px;color:var(--muted);white-space:nowrap}
.roles button[aria-pressed=true]{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(20,28,58,.12)}
.top-right{margin-left:auto;display:flex;align-items:center;gap:6px}
.icon-btn{position:relative;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:var(--ink2)}.icon-btn:hover{background:#f0f2f8}
.dot{position:absolute;top:6px;right:6px;min-width:16px;height:16px;border-radius:8px;background:var(--accent);color:#fff;font-size:10px;font-weight:700;display:grid;place-items:center;padding:0 4px}
.seg{display:inline-flex;background:#f0f2f8;border-radius:8px;padding:2px}.seg button{padding:4px 10px;border-radius:6px;font-size:12px;font-weight:700;color:var(--muted)}.seg button[aria-pressed=true]{background:#fff;color:var(--ink)}
.user-btn{display:flex;align-items:center;gap:8px;padding:4px 10px 4px 4px;border-radius:999px;border:1px solid var(--line);font-weight:600;font-size:13px}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;font-weight:800;font-size:13px;flex-shrink:0;overflow:hidden}.avatar img{width:100%;height:100%;object-fit:cover}
.avatar.lg{width:56px;height:56px;font-size:22px}.avatar.md{width:40px;height:40px;font-size:16px}
.subnav{background:#fff;border-bottom:1px solid var(--line)}.subnav-in{max-width:1600px;margin:auto;display:flex;gap:2px;padding:0 28px;overflow-x:auto}
.subnav a{padding:13px 16px;font-weight:600;color:var(--ink2);border-bottom:3px solid transparent;white-space:nowrap}.subnav a:hover{color:var(--brand)}.subnav a[aria-current=page]{color:var(--brand);border-color:var(--brand)}
.subnav .push{margin-left:auto;display:flex;align-items:center;gap:8px}
/* 본문 틀 */
main{display:block;min-height:70vh}
.page{max-width:1600px;margin:auto;padding:28px}
.shell{max-width:1600px;margin:auto;display:grid;grid-template-columns:232px minmax(0,1fr);gap:0;min-height:calc(100vh - 62px)}
.side{background:#fff;border-right:1px solid var(--line);padding:18px 12px;position:sticky;top:62px;align-self:start;height:calc(100vh - 62px);overflow-y:auto}
.side h6{margin:14px 10px 6px;font-size:11px;letter-spacing:.08em;color:var(--muted);text-transform:none;font-weight:700}
.side a{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;font-weight:600;color:var(--ink2);margin-bottom:2px}.side a:hover{background:#f3f5fb}.side a[aria-current=page]{background:var(--brand-soft);color:var(--brand)}
.side .cnt{margin-left:auto;background:var(--accent);color:#fff;border-radius:9px;font-size:11px;padding:0 6px;font-weight:700}
.content{padding:26px 30px 60px;min-width:0}
.ph{display:flex;align-items:flex-end;gap:16px;margin-bottom:20px;flex-wrap:wrap}.ph h1{font-size:24px;letter-spacing:-.02em}.ph p{color:var(--muted);margin-top:2px}.ph .act{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.crumb{font-size:12px;color:var(--muted);margin-bottom:6px}.crumb a:hover{color:var(--brand)}
/* 버튼과 폼 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:40px;padding:0 16px;border-radius:10px;font-weight:700;border:1px solid var(--line2);background:#fff;color:var(--ink);white-space:nowrap;transition:background .12s}
.btn:hover:not(:disabled){background:#f3f5fb}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover:not(:disabled){background:var(--brand-d)}
.btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}.btn.danger{color:var(--bad);border-color:#f1c0c0}.btn.danger.solid{background:var(--bad);color:#fff;border-color:var(--bad)}
.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover:not(:disabled){background:#eef0f7}.btn.sm{height:32px;padding:0 11px;font-size:13px;border-radius:8px}.btn.lg{height:50px;padding:0 24px;font-size:16px;border-radius:12px}.btn.block{width:100%}
.btn .spin{width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:sp .7s linear infinite}@keyframes sp{to{transform:rotate(360deg)}}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field>label,.lbl{font-weight:700;font-size:13px;color:var(--ink2)}.req::after{content:" *";color:var(--bad)}
.inp,.sel,.txa{width:100%;height:40px;padding:0 12px;border:1px solid var(--line2);border-radius:10px;background:#fff;font-size:14px}.txa{height:auto;padding:10px 12px;resize:vertical;min-height:90px;line-height:1.6}
.inp:focus,.sel:focus,.txa:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(47,70,214,.15)}
.inp[aria-invalid=true],.sel[aria-invalid=true],.txa[aria-invalid=true]{border-color:var(--bad);background:#fffafa}
.err{color:var(--bad);font-size:12.5px;font-weight:600}.help{color:var(--muted);font-size:12.5px}
.row{display:flex;gap:12px;flex-wrap:wrap}.row>*{flex:1;min-width:140px}.row.nogrow>*{flex:0 0 auto}
.check{display:flex;align-items:flex-start;gap:9px;font-size:13.5px}.check input{width:18px;height:18px;margin-top:2px;accent-color:var(--brand);flex-shrink:0}
.radio-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.rc{border:1.5px solid var(--line2);border-radius:12px;padding:12px 14px;display:flex;gap:10px;align-items:flex-start;cursor:pointer;background:#fff}.rc:has(input:checked){border-color:var(--brand);background:var(--brand-soft)}.rc input{accent-color:var(--brand);margin-top:3px}
/* 카드, 표 */
.card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:20px}.card.flat{box-shadow:none}.card h2{font-size:17px;margin-bottom:12px;letter-spacing:-.01em}.card h3{font-size:15px;margin-bottom:8px}
.card.pad0{padding:0;overflow:hidden}.card-h{display:flex;align-items:center;gap:10px;padding:16px 20px;border-bottom:1px solid var(--line)}.card-h h2{margin:0}.card-h .act{margin-left:auto;display:flex;gap:8px}
.grid{display:grid;gap:16px}.grid>*{min-width:0}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g-main{grid-template-columns:minmax(0,1fr) 340px}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}.stat .k{font-size:12.5px;color:var(--muted);font-weight:600}.stat .v{font-size:26px;font-weight:800;letter-spacing:-.02em;margin-top:2px}.stat .s{font-size:12px;color:var(--muted);margin-top:2px}
.tbl-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:12.5px;color:var(--muted);font-weight:700;padding:10px 14px;background:#fafbfe;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:11px 14px;border-bottom:1px solid #eef0f5;vertical-align:middle}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fafbff}th button{font-weight:700;display:inline-flex;align-items:center;gap:3px;color:inherit}th[aria-sort] button{color:var(--brand)}
td.r,th.r{text-align:right}td.c,th.c{text-align:center}.t-actions{display:flex;gap:6px;justify-content:flex-end}
.badge{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:6px;font-size:12px;font-weight:700;background:#eef0f6;color:var(--ink2);white-space:nowrap}
.badge.ok{background:var(--ok-soft);color:var(--ok)}.badge.warn{background:var(--warn-soft);color:var(--warn)}.badge.bad{background:var(--bad-soft);color:var(--bad)}.badge.info{background:var(--info-soft);color:var(--info)}.badge.brand{background:var(--brand-soft);color:var(--brand)}.badge.dark{background:var(--dark);color:#fff}
.chip{display:inline-flex;align-items:center;height:30px;padding:0 12px;border-radius:999px;border:1px solid var(--line2);background:#fff;font-weight:600;font-size:13px;gap:6px}.chip[aria-pressed=true],.chip.on{background:var(--brand);border-color:var(--brand);color:#fff}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.pager{display:flex;align-items:center;gap:6px;justify-content:center;padding:16px;flex-wrap:wrap}.pager button{min-width:34px;height:34px;border-radius:8px;border:1px solid var(--line2);background:#fff;font-weight:700}.pager button[aria-current=page]{background:var(--brand);color:#fff;border-color:var(--brand)}.pager .info{color:var(--muted);font-size:12.5px;margin:0 10px}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:14px}.toolbar .inp,.toolbar .sel{width:auto;min-width:150px}.toolbar .grow{flex:1;min-width:200px}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto}.tabs button,.tabs a{padding:11px 16px;font-weight:700;color:var(--muted);border-bottom:3px solid transparent;white-space:nowrap}.tabs [aria-selected=true],.tabs [aria-current=page]{color:var(--brand);border-color:var(--brand)}
.prog{height:8px;background:#e9ecf4;border-radius:5px;overflow:hidden}.prog>i{display:block;height:100%;background:var(--brand);border-radius:5px;transition:width .3s}.prog.ok>i{background:var(--ok)}.prog.sm{height:5px}.prog.warn>i{background:#e0a000}
.prog-row{display:flex;align-items:center;gap:8px}.prog-row .prog{flex:1}.prog-row b{font-size:12.5px;min-width:44px;text-align:right}
.empty{text-align:center;padding:48px 20px;color:var(--muted)}.empty h3{color:var(--ink);font-size:17px;margin:12px 0 4px}.empty svg{width:42px;height:42px;color:#aab1c4}
.errbox{border:1px solid #f1c0c0;background:var(--bad-soft);color:var(--bad);padding:14px 16px;border-radius:12px;display:flex;gap:12px;align-items:center;margin:14px 0}.errbox .btn{margin-left:auto}
.notice{border-radius:12px;padding:12px 14px;display:flex;gap:10px;align-items:flex-start;font-size:13.5px;margin-bottom:14px}.notice.info{background:var(--info-soft);color:#174d8a}.notice.warn{background:var(--warn-soft);color:#7a4a00}.notice.ok{background:var(--ok-soft);color:#0e6b45}.notice.bad{background:var(--bad-soft);color:#a01f1f}
.skel{background:linear-gradient(90deg,#eceff6 25%,#f6f7fb 37%,#eceff6 63%);background-size:400% 100%;animation:sk 1.3s infinite;border-radius:10px}@keyframes sk{0%{background-position:100% 50%}100%{background-position:0 50%}}
.skel.l{height:14px;margin:10px 0}.skel.card{height:230px}
/* 토스트와 모달 */
#toasts{position:fixed;right:20px;bottom:20px;z-index:300;display:flex;flex-direction:column;gap:8px;max-width:min(380px,calc(100vw - 32px))}
.toast{background:var(--dark);color:#fff;padding:12px 16px;border-radius:12px;box-shadow:var(--shadow);display:flex;gap:10px;align-items:flex-start;font-weight:600;animation:ti .2s}.toast.ok{background:#0e6b45}.toast.bad{background:#a01f1f}@keyframes ti{from{transform:translateY(8px);opacity:0}}
dialog{border:0;border-radius:16px;padding:0;box-shadow:0 20px 60px rgba(10,14,40,.3);max-width:min(620px,calc(100vw - 24px));width:100%;max-height:calc(100vh - 40px)}dialog.wide{max-width:min(900px,calc(100vw - 24px))}dialog::backdrop{background:rgba(16,20,42,.55)}
.m-h{display:flex;align-items:center;gap:10px;padding:18px 22px;border-bottom:1px solid var(--line)}.m-h h2{font-size:18px;margin:0}.m-h .x{margin-left:auto}
.m-b{padding:20px 22px;overflow-y:auto;max-height:calc(100vh - 200px)}.m-f{display:flex;gap:8px;justify-content:flex-end;padding:14px 22px;border-top:1px solid var(--line);background:#fafbfe;border-radius:0 0 16px 16px}
/* 홈 */
.hero{background:linear-gradient(135deg,#1a2680 0%,#2f46d6 55%,#5a6cff 100%);color:#fff;position:relative;overflow:hidden}
.hero-in{max-width:1600px;margin:auto;padding:54px 28px;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:40px;align-items:center}
.hero h1{font-size:40px;line-height:1.25;letter-spacing:-.03em;font-weight:800}.hero p{margin-top:14px;font-size:17px;opacity:.9;max-width:560px}
.hero-search{display:flex;background:#fff;border-radius:14px;padding:6px;margin-top:26px;max-width:620px;box-shadow:0 10px 30px rgba(10,14,60,.35)}.hero-search input{flex:1;border:0;padding:0 14px;font-size:16px;color:var(--ink);background:none;min-width:0}.hero-search input:focus{outline:none}
.hero-img{border-radius:20px;overflow:hidden;box-shadow:0 20px 50px rgba(10,14,60,.4);aspect-ratio:3/2}.hero-img img{width:100%;height:100%;object-fit:cover}
.hero .quick{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}.hero .quick a{background:rgba(255,255,255,.16);padding:5px 12px;border-radius:999px;font-weight:600;font-size:13px}.hero .quick a:hover{background:rgba(255,255,255,.28)}
.stripe{background:#fff;border-bottom:1px solid var(--line)}.stripe-in{max-width:1600px;margin:auto;display:grid;grid-template-columns:repeat(4,1fr);gap:20px;padding:18px 28px}.stripe b{font-size:20px;display:block}.stripe span{color:var(--muted);font-size:12.5px}
.sec{margin:36px 0}.sec-h{display:flex;align-items:flex-end;gap:12px;margin-bottom:16px}.sec-h h2{font-size:22px;letter-spacing:-.02em}.sec-h p{color:var(--muted)}.sec-h a{margin-left:auto;color:var(--brand);font-weight:700}
.cat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.cat-tile{position:relative;border-radius:14px;overflow:hidden;aspect-ratio:16/9;color:#fff;display:flex;align-items:flex-end;padding:14px}.cat-tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.cat-tile::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 30%,rgba(10,14,40,.78))}.cat-tile span{position:relative;z-index:1;font-weight:800;font-size:16px}.cat-tile small{display:block;font-weight:600;opacity:.85;font-size:12px}
.banner{border-radius:18px;overflow:hidden;position:relative;color:#fff;min-height:210px;display:flex;align-items:center;padding:34px 40px;background:#243088}.banner img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.55}.banner::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(16,22,80,.92),rgba(16,22,80,.35))}.banner>div{position:relative;z-index:1;max-width:520px}.banner h2{font-size:28px;letter-spacing:-.02em}.banner p{margin:8px 0 16px;opacity:.9}
/* 강의 카드와 목록 */
.cgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px}
.ccard{display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;transition:box-shadow .15s,transform .15s}.ccard:hover{box-shadow:var(--shadow);transform:translateY(-2px)}
.cthumb{position:relative;display:block;aspect-ratio:16/10;background:#dde2f0;overflow:hidden}.cthumb img{width:100%;height:100%;object-fit:cover;transition:transform .3s}.cthumb::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 45%,rgba(10,14,40,.72))}
.cthumb .tt{position:absolute;left:12px;right:12px;bottom:10px;z-index:1;color:#fff;font-weight:800;font-size:15px;line-height:1.3;text-shadow:0 1px 8px rgba(0,0,0,.4);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cthumb .tag{position:absolute;left:10px;top:10px;z-index:1;display:flex;gap:5px}.ccard{position:relative}.ccard .wish{position:absolute;right:8px;top:8px;z-index:2;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.92);display:grid;place-items:center;color:var(--ink2)}.ccard .wish[aria-pressed=true]{color:#e0245e}
.cbody{padding:14px 16px 16px;display:flex;flex-direction:column;gap:6px;flex:1}.ctitle{font-weight:700;font-size:15px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:42px}.cmeta{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12.5px;flex-wrap:wrap}
.stars{color:#f5a300;font-weight:800}.price{font-weight:800;font-size:16px}.price s{color:#9aa2b5;font-weight:500;font-size:12.5px;margin-right:6px}.price .free{color:var(--ok)}
.cfoot{margin-top:auto;padding-top:6px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.list-layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:26px}.filters{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;align-self:start;position:sticky;top:130px}.filters h3{font-size:13px;margin:14px 0 8px;color:var(--ink2)}.filters h3:first-child{margin-top:0}
.fopt{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:13.5px;cursor:pointer}.fopt input{accent-color:var(--brand);width:16px;height:16px}.fopt .n{margin-left:auto;color:var(--muted);font-size:12px}
.result-h{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}.result-h b{font-size:16px}.result-h .sel{width:auto;margin-left:auto}
/* 상세 */
.detail-top{background:var(--dark);color:#fff}.detail-top-in{max-width:1600px;margin:auto;padding:34px 28px 36px;display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:34px}
.detail-top h1{font-size:30px;letter-spacing:-.025em;line-height:1.3;margin:10px 0}.detail-top p{opacity:.85;max-width:720px}.dt-meta{display:flex;gap:16px;margin-top:14px;flex-wrap:wrap;font-size:13.5px;opacity:.92}
.d-wrap{max-width:1600px;margin:auto;padding:26px 28px 60px;display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:34px}.buy{position:sticky;top:130px;z-index:30;align-self:start;margin-top:-210px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);overflow:hidden}
.buy .thumb{aspect-ratio:16/9;background:#dde2f0}.buy .thumb img{width:100%;height:100%;object-fit:cover}.buy .bd{padding:20px}.buy .big{font-size:28px;font-weight:800;letter-spacing:-.02em}.buy ul li{display:flex;gap:8px;font-size:13px;color:var(--ink2);padding:3px 0}
.cur{display:grid;gap:0;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}.cur-sec{border-bottom:1px solid var(--line)}.cur-sec:last-child{border:0}.cur-sec>summary{padding:13px 16px;background:#fafbfe;font-weight:700;cursor:pointer;display:flex;gap:10px;align-items:center;list-style:none}.cur-sec>summary::-webkit-details-marker{display:none}.cur-sec>summary .m{margin-left:auto;font-weight:500;color:var(--muted);font-size:12.5px}
.cur-ch{display:flex;gap:10px;align-items:center;padding:10px 16px;border-top:1px solid #eef0f5;font-size:13.5px}.cur-ch .t{flex:1;min-width:0}.cur-ch .d{color:var(--muted);font-size:12.5px}.cur-ch .ok{color:var(--ok)}
.rating-box{display:grid;grid-template-columns:130px 1fr;gap:24px;align-items:center;padding:16px;background:#fafbfe;border-radius:12px;margin-bottom:16px}.rating-box .big{font-size:40px;font-weight:800;text-align:center}.bar-row{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted)}.bar-row .prog{flex:1}
.review{padding:16px 0;border-bottom:1px solid var(--line)}.review .reply{background:#f4f6fb;border-radius:10px;padding:10px 12px;margin-top:8px;font-size:13px}
.tabbar{position:sticky;top:62px;z-index:20;background:#fff;border-bottom:1px solid var(--line)}
/* 내 강의실 */
.mycard{display:grid;grid-template-columns:200px minmax(0,1fr) auto;gap:18px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px}.mycard .th{aspect-ratio:16/10;border-radius:10px;overflow:hidden;background:#dde2f0}.mycard .th img{width:100%;height:100%;object-fit:cover}
.mylist{display:grid;gap:12px}.cert{background:#fff;border:2px solid #cfd6ee;border-radius:6px;padding:46px 56px;max-width:820px;margin:0 auto;position:relative;text-align:center;box-shadow:var(--shadow)}.cert::before{content:"";position:absolute;inset:10px;border:1px solid #cfd6ee;pointer-events:none}
.cert h1{font-size:34px;letter-spacing:.3em;margin:10px 0 24px;color:var(--brand-d);font-family:"Noto Serif CJK KR",serif}.cert .nm{font-size:30px;font-weight:800;margin:16px 0;border-bottom:2px solid var(--ink);display:inline-block;padding:0 30px 4px;font-family:"Noto Serif CJK KR",serif}.cert .body{font-size:16px;line-height:2;margin:14px 0}.cert .no{font-size:12px;color:var(--muted);letter-spacing:.08em;margin-top:22px}.cert .seal{display:inline-grid;place-items:center;width:78px;height:78px;border-radius:50%;border:3px double var(--brand);color:var(--brand);font-weight:800;margin-top:18px;transform:rotate(-8deg);font-size:13px;line-height:1.2}
/* 플레이어 */
.player-page{background:#0b0e1f;color:#e8ebf7;min-height:calc(100vh - 62px)}.pl-grid{display:grid;grid-template-columns:minmax(0,1fr) 360px;min-height:calc(100vh - 62px)}
.pl-main{padding:20px 24px 40px;min-width:0}.pl-col{width:100%;margin:0 auto;max-width:max(560px,calc((100vh - 400px) * 1.7778))}.pl-title{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.pl-title h1{font-size:18px}.pl-title .back{color:#aab3d8;font-weight:600;font-size:13px}
.stage{position:relative;background:#000;border-radius:14px;overflow:hidden;aspect-ratio:16/9;user-select:none;-webkit-user-select:none}.stage canvas{width:100%;height:100%;display:block}
.wm{position:absolute;color:rgba(255,255,255,.3);font-weight:700;font-size:15px;pointer-events:none;white-space:nowrap;text-shadow:0 0 4px rgba(0,0,0,.4);transition:all 1.2s}
.shield{position:absolute;inset:0;background:#05060f;display:grid;place-items:center;text-align:center;padding:30px;z-index:6}.shield div{max-width:420px}.shield h3{font-size:20px;margin:10px 0 6px}
.cue{position:absolute;inset:0;background:rgba(6,8,22,.9);z-index:5;display:grid;place-items:center;padding:20px}.cue-box{background:#fff;color:var(--ink);border-radius:16px;padding:22px 24px;max-width:560px;width:100%}.cue-box h3{font-size:17px;margin-bottom:12px}.cue-box .opt{display:flex;gap:10px;padding:10px 12px;border:1.5px solid var(--line2);border-radius:10px;margin-bottom:8px;cursor:pointer;width:100%;text-align:left}.cue-box .opt:hover{border-color:var(--brand)}.cue-box .opt.right{border-color:var(--ok);background:var(--ok-soft)}.cue-box .opt.wrong{border-color:var(--bad);background:var(--bad-soft)}
.ctrl{background:#141833;border-radius:12px;padding:10px 14px;margin-top:10px}.seek{position:relative;height:22px;display:flex;align-items:center;cursor:pointer;touch-action:none}.seek-track{position:relative;flex:1;height:6px;background:#2b3157;border-radius:3px;overflow:visible}.seek-w{position:absolute;top:0;bottom:0;background:#4c5aa8;border-radius:3px}.seek-p{position:absolute;top:0;bottom:0;left:0;background:#8d9bff;border-radius:3px}.seek-h{position:absolute;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;background:#fff;border-radius:50%;box-shadow:0 1px 4px rgba(0,0,0,.5)}.seek-mk{position:absolute;top:-3px;width:3px;height:12px;background:#ffcc4d;border-radius:2px}.seek-q{position:absolute;top:-3px;width:3px;height:12px;background:#ff7a5c;border-radius:2px}.seek-ab{position:absolute;top:-2px;bottom:-2px;background:rgba(255,204,77,.4)}
.ctrl-row{display:flex;align-items:center;gap:6px;margin-top:6px;flex-wrap:wrap}.ctrl-row .tm{font-variant-numeric:tabular-nums;font-size:13px;color:#b8c0e6;margin:0 8px}.cbtn{height:34px;min-width:34px;padding:0 10px;border-radius:8px;display:inline-flex;align-items:center;gap:5px;color:#e8ebf7;font-weight:700;font-size:13px}.cbtn:hover{background:#262c55}.cbtn[aria-pressed=true]{background:#3b46a8}.cbtn.sp{margin-left:auto}
.pl-note{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px;font-size:12.5px;color:#9aa4d0}.pl-note b{color:#d6dcf8}
.pl-side{background:#10142a;border-left:1px solid #20264a;display:flex;flex-direction:column;max-height:calc(100vh - 62px);position:sticky;top:62px}.pl-side .tabs{margin:0;border-color:#20264a}.pl-side .tabs button{color:#9aa4d0;flex:1;padding:12px 6px}.pl-side .tabs [aria-selected=true]{color:#fff;border-color:#8d9bff}
.pl-scroll{overflow-y:auto;flex:1;padding:6px 0 20px}.pl-sec{padding:12px 16px 6px;font-weight:700;font-size:13px;color:#b8c0e6}.pl-ch{display:flex;gap:10px;align-items:flex-start;width:100%;text-align:left;padding:10px 16px;color:#cfd5f2;font-size:13.5px}.pl-ch:hover{background:#181d3d}.pl-ch[aria-current=true]{background:#1f2650;color:#fff}.pl-ch .d{color:#8b95c4;font-size:12px}.pl-ch .ck{color:#5ad19a}
.bm-item{display:flex;gap:8px;align-items:center;padding:8px 16px;color:#cfd5f2;font-size:13px}.bm-item button.jump{color:#8d9bff;font-weight:700;font-variant-numeric:tabular-nums}
.pl-side .inp{background:#181d3d;border-color:#2b3157;color:#fff;height:34px}.sub-line{min-height:30px;text-align:center;padding:8px 14px;background:#141833;border-radius:10px;margin-top:10px;color:#e8ebf7;font-size:15px}
/* 시험 */
.exam-wrap{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}.exam-q{background:#fff;border:1px solid var(--line);border-radius:14px;padding:24px 26px;min-height:480px}.exam-q h2{font-size:18px;line-height:1.5;margin-bottom:16px}
.qopt{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border:1.5px solid var(--line2);border-radius:12px;margin-bottom:9px;cursor:pointer;background:#fff;width:100%;text-align:left}.qopt:hover{border-color:var(--brand)}.qopt[aria-checked=true]{border-color:var(--brand);background:var(--brand-soft)}.qopt .mk{width:22px;height:22px;border-radius:50%;border:2px solid var(--line2);flex-shrink:0;display:grid;place-items:center;margin-top:1px}.qopt.multi .mk{border-radius:6px}.qopt[aria-checked=true] .mk{background:var(--brand);border-color:var(--brand);color:#fff}
.qopt.right{border-color:var(--ok);background:var(--ok-soft)}.qopt.wrong{border-color:var(--bad);background:var(--bad-soft)}
.qnav{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.qnav button{height:38px;border-radius:8px;border:1px solid var(--line2);font-weight:700;background:#fff}.qnav button.ans{background:var(--brand-soft);border-color:var(--brand);color:var(--brand)}.qnav button[aria-current=true]{background:var(--brand);color:#fff;border-color:var(--brand)}
.timer{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.timer.low{color:var(--bad)}
.score-ring{width:150px;height:150px}
/* 차트 */
.chart{width:100%;height:auto;display:block}.chart text{font-size:11px;fill:#667085;font-family:var(--font)}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--ink2)}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px}
.donut-wrap{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
/* 라이브 */
.live-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}.chat{background:#fff;border:1px solid var(--line);border-radius:14px;display:flex;flex-direction:column;height:560px}.chat-list{flex:1;overflow-y:auto;padding:14px}.chat-m{margin-bottom:10px}.chat-m b{font-size:12.5px}.chat-m .ins{color:var(--brand)}.chat-m p{background:#f3f5fb;border-radius:10px;padding:7px 10px;display:inline-block;margin-top:2px;max-width:100%;word-break:break-word}.chat-f{display:flex;gap:6px;padding:10px;border-top:1px solid var(--line)}
.qrbox{background:#fff;border:1px solid var(--line);border-radius:14px;padding:24px;text-align:center}.qrbox img{margin:10px auto;width:240px;height:240px;image-rendering:pixelated}.qrcode{font-size:34px;font-weight:800;letter-spacing:.2em;font-variant-numeric:tabular-nums}
.tl{display:grid;gap:0}.tl-i{display:grid;grid-template-columns:90px 1fr auto;gap:14px;padding:14px 4px;border-bottom:1px solid var(--line);align-items:center}.tl-i .dt{font-weight:800;font-size:13px}.tl-i .dt small{display:block;color:var(--muted);font-weight:500}
/* 훈련과정 목록 (공공 훈련 검색 구성 참고) */
.tr-row{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) 200px;gap:20px;padding:20px 22px;border-bottom:1px solid var(--line);align-items:center}.tr-row .org{font-size:12.5px;color:var(--muted)}.tr-row h3{font-size:16px;margin:4px 0 8px;line-height:1.4}.tr-row dl{margin:0;display:grid;gap:4px;font-size:13.5px}.tr-row dt{display:none}
.tr-side{text-align:center}.tr-side .st{font-weight:800;font-size:16px;color:var(--accent)}.tr-side .st.closed{color:var(--muted)}
.help-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.faq-i{border-bottom:1px solid var(--line)}.faq-i summary{padding:15px 4px;font-weight:700;cursor:pointer}.faq-i p{padding:0 4px 16px;color:var(--ink2)}
/* 푸터 */
#app{min-height:100vh;display:flex;flex-direction:column}#app>*{flex-shrink:0}#app>main,#app>.shell{flex:1 0 auto}.foot{margin-top:50px;background:#fff;border-top:1px solid var(--line);color:var(--muted);font-size:12.5px;text-align:center;padding:22px 16px}
.pop{position:fixed;left:20px;bottom:20px;z-index:80;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:16px 18px;max-width:320px}
.drop{position:absolute;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);min-width:260px;z-index:60;padding:8px;max-height:70vh;overflow-y:auto}.drop button,.drop a{display:flex;width:100%;text-align:left;padding:9px 12px;border-radius:8px;gap:10px;align-items:center}.drop button:hover,.drop a:hover{background:#f3f5fb}.drop h6{margin:8px 12px 4px;font-size:11px;color:var(--muted)}
.rel{position:relative}.kv{display:grid;grid-template-columns:120px 1fr;gap:8px 14px}.kv dt{color:var(--muted);font-weight:600}.kv dd{margin:0}
.steps{display:flex;gap:0;margin-bottom:22px}.steps div{flex:1;text-align:center;font-size:12.5px;font-weight:700;color:var(--muted);position:relative}.steps div::before{content:attr(data-n);display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#e4e8f2;margin:0 auto 6px;color:var(--muted)}.steps .on::before{background:var(--brand);color:#fff}.steps .on{color:var(--brand)}.steps .done::before{content:"\2713";background:var(--ok);color:#fff}
.mono{font-family:ui-monospace,Consolas,monospace}.hr{height:1px;background:var(--line);margin:16px 0}.right{text-align:right}.mt8{margin-top:8px}.mt16{margin-top:16px}.mb16{margin-bottom:16px}.muted{color:var(--muted)}.sm{font-size:12.5px}.bold{font-weight:700}.flex{display:flex;gap:10px;align-items:center}.wrap{flex-wrap:wrap}.sp{margin-left:auto}
.edit-ch{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;margin-bottom:8px}.edit-sec{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fafbfe;margin-bottom:14px}
@media (max-width:1180px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g-main{grid-template-columns:1fr}.hero-in{grid-template-columns:1fr}.hero-img{display:none}.detail-top-in,.d-wrap{grid-template-columns:1fr}.buy{position:static;margin-top:0}.detail-top-in aside{display:none}.pl-grid{grid-template-columns:1fr}.pl-side{position:static;max-height:none;border-left:0;border-top:1px solid #20264a}.exam-wrap,.live-grid{grid-template-columns:1fr}.cat-grid{grid-template-columns:repeat(2,1fr)}.list-layout{grid-template-columns:1fr}.filters{position:static}.roles{display:none}.topbar-in{gap:10px;padding:0 16px}.stripe-in{grid-template-columns:repeat(2,1fr)}}
@media (max-width:1024px){.shell{grid-template-columns:1fr}.side{position:static;height:auto;display:flex;overflow-x:auto;gap:4px;padding:8px 12px;border-right:0;border-bottom:1px solid var(--line)}.side h6{display:none}.side a{white-space:nowrap;margin:0}.content{padding:20px 16px 50px}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}.tr-row{grid-template-columns:1fr}.help-grid{grid-template-columns:1fr}}
@media (max-width:720px){.page{padding:18px 16px}.g2,.g3{grid-template-columns:1fr}.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.stat .v{font-size:22px}.hero h1{font-size:28px}.hero-in{padding:34px 16px}.mycard{grid-template-columns:1fr}.cgrid{grid-template-columns:1fr 1fr;gap:12px}.cat-grid{grid-template-columns:1fr 1fr}.stripe-in{padding:14px 16px}.banner{padding:22px}.banner h2{font-size:22px}.rating-box{grid-template-columns:1fr}.cert{padding:28px 20px}.cert h1{font-size:24px}.kv{grid-template-columns:1fr}.ph h1{font-size:20px}.tl-i{grid-template-columns:70px 1fr}.tl-i>:last-child{grid-column:1/-1}.edit-ch{grid-template-columns:1fr}.ctrl-row .tm{margin:0 4px}.detail-top h1{font-size:23px}.subnav-in{padding:0 8px}.user-btn span.nm{display:none}.top-right .seg{display:none}.pl-main{padding:12px 12px 30px}}
@media (max-width:480px){.cgrid{grid-template-columns:1fr}}
@media (max-width:1180px){.m-cta{display:flex!important;position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid var(--line);padding:10px 16px;gap:12px;align-items:center;justify-content:space-between;box-shadow:0 -4px 16px rgba(20,28,58,.08)}.m-cta b{font-size:18px}.d-wrap{padding-bottom:96px}.pop{bottom:84px}}
.m-cta{display:none}
@media print{.topbar,.subnav,.side,.foot,.no-print,#toasts,.pop{display:none!important}body{background:#fff}.page,.content{padding:0}.shell{display:block}.cert{box-shadow:none;border-width:2px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
