:root{--bg:#f4f5f7;--card:#fff;--text:#1a1d24;--muted:#6b7280;--line:#e5e7eb;--accent:#0f766e;--accent-2:#0b2e33;--ok:#16a34a;--warn:#f59e0b;--bad:#dc2626;--blue:#2563eb;--purple:#7c3aed;--soft:#eef0f4;--shadow:0 1px 2px rgba(0,0,0,.04),0 4px 16px rgba(0,0,0,.04);--radius:14px;color-scheme:light}
:root[data-theme="dark"]{--bg:#0b1118;--card:#111a23;--text:#e6edf3;--muted:#8b98a8;--line:#1f2b38;--accent:#fb923c;--accent-2:#93c5fd;--soft:#0f1720;--shadow:none;color-scheme:dark}
*{box-sizing:border-box}html{scroll-behavior:smooth}
html[lang="ko"] body{word-break:keep-all;overflow-wrap:break-word;line-break:strict}
html[lang="ko"] h1,html[lang="ko"] h2,html[lang="ko"] h3,html[lang="ko"] p,html[lang="ko"] li,html[lang="ko"] td,html[lang="ko"] .t,html[lang="ko"] .lead{word-break:keep-all}
/* ---- 폰트 체계: 본문 Inter+SUIT · 제목/숫자/브랜드 Space Grotesk+SUIT · 코드 JetBrains-ish mono ---- */
@font-face{font-family:"SUIT";src:url("/static/fonts/SUIT-Regular.ttf") format("truetype");font-weight:400;font-display:swap}
@font-face{font-family:"SUIT";src:url("/static/fonts/SUIT-Medium.ttf") format("truetype");font-weight:500 600;font-display:swap}
@font-face{font-family:"SUIT";src:url("/static/fonts/SUIT-Bold.ttf") format("truetype");font-weight:700 800;font-display:swap}
:root{--font-body:"Inter","SUIT",-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans KR","Apple SD Gothic Neo",sans-serif;--font-display:"Space Grotesk","SUIT",-apple-system,"Noto Sans KR",sans-serif;--font-mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;--w-site:1100px;--w-read:1100px}
body{margin:0;background:var(--bg);color:var(--text);font:15px/1.6 var(--font-body);-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss01","tnum" 0}
h1,h2,h3,h4,.tile .v,.amt,.clock{font-family:var(--font-display)}
code,pre,kbd{font-family:var(--font-mono)}pre{background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:.9rem 1rem;overflow:auto;font-size:.85rem;line-height:1.6}

.hdr .top{padding:10px 0}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
h1,h2,h3{line-height:1.25;margin:0 0 .5rem;font-weight:700}h1{font-size:1.75rem}h2{font-size:1.25rem}h3{font-size:1.05rem}
p{margin:0 0 1rem}small,.muted{color:var(--muted)}.tiny{font-size:.75rem;color:var(--muted)}
img{max-width:100%}code{background:var(--soft);padding:.1em .35em;border-radius:4px;font-size:.9em}
table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:.6rem .75rem;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600}
.table-wrap{overflow-x:auto}
.wrap{max-width:var(--w-site);margin:0 auto;padding:0 20px}.narrow{max-width:var(--w-read)}
.wrap.page{padding-top:1.6rem}@media(max-width:700px){.wrap.page{padding-top:1rem}}
body.wide .wrap.page{padding-top:1rem}
body.wide .wrap{max-width:none;padding:0 28px}
/* header */
.hdr{position:sticky;top:0;z-index:100;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:saturate(1.4) blur(14px);-webkit-backdrop-filter:saturate(1.4) blur(14px);border-bottom:1px solid transparent;transition:border-color .2s,box-shadow .2s}
.hdr.scrolled{border-bottom-color:var(--line);box-shadow:0 6px 24px rgba(0,0,0,.06)}
.top{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:12px 0;flex-wrap:wrap}
.lg{display:inline-block;font-size:.68rem;font-weight:800;letter-spacing:.06em;padding:.1rem .35rem;border-radius:5px;background:var(--soft);color:var(--muted)}
@font-face{font-family:"Space Grotesk";src:url("/static/fonts/SpaceGrotesk-Variable.ttf") format("truetype");font-weight:300 700;font-display:swap}
.brand{display:inline-flex;align-items:baseline;gap:.15rem;background:#0f766e;color:#fff !important;font-family:"Space Grotesk",-apple-system,sans-serif;font-weight:700;font-size:1.4rem;letter-spacing:-.01em;padding:.35rem .9rem;border-radius:12px;line-height:1.1;text-decoration:none !important}
.brand sup{font-size:.75em;font-weight:700;color:#fff;vertical-align:top;position:relative;top:-.15em}
.brand .l{font-weight:400}
.brand:hover{filter:brightness(1.06)}
.crumb{font-size:.8rem;color:var(--muted)}.crumb b{display:block;color:var(--text);font-weight:600;font-size:.9rem}
.controls{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.clock{display:inline-flex;align-items:center;gap:.5rem;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:.3rem .8rem;font-size:.78rem;font-variant-numeric:tabular-nums}
.clock .dot{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px rgba(22,163,74,.15)}
.clock .tz{color:var(--muted);border-left:1px solid var(--line);padding-left:.5rem}
.btn{display:inline-flex;align-items:center;gap:.45rem;border:1px solid var(--line);background:var(--card);color:var(--text);padding:.5rem 1rem;border-radius:10px;font-size:.88rem;cursor:pointer;line-height:1.2;font-weight:600;transition:transform .12s,box-shadow .2s,border-color .2s,background .2s}
.btn:active{transform:translateY(1px)}.btn .i{width:16px;height:16px}
.btn:hover{text-decoration:none;border-color:var(--muted)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 6px 16px rgba(194,65,12,.25)}.btn.primary:hover{opacity:.95;box-shadow:0 8px 22px rgba(194,65,12,.32)}
:root[data-theme="dark"] .btn.primary{color:#07090e;box-shadow:0 6px 16px rgba(42,240,224,.22)}
.btn.danger{color:var(--bad);border-color:var(--bad)}.btn.sm{padding:.3rem .6rem;font-size:.8rem}.btn.icon{padding:.4rem .55rem}
#theme-toggle{width:40px;height:40px;padding:0;justify-content:center;border-radius:12px;font-size:1.25rem;line-height:1;background:var(--soft);border-color:var(--line)}
#theme-toggle svg{width:22px;height:22px;display:block}#theme-toggle .sun{display:none}#theme-toggle .moon{display:block}
:root[data-theme="dark"] #theme-toggle{background:#1a2532;border-color:#2a3846;color:#ffd166}
:root[data-theme="dark"] #theme-toggle .sun{display:block}:root[data-theme="dark"] #theme-toggle .moon{display:none}
#theme-toggle:hover{border-color:var(--accent);box-shadow:0 0 0 3px rgba(194,65,12,.15)}
nav.main a{margin-right:1.1rem;color:var(--text);font-weight:500}nav.main a.active{color:var(--accent)}
nav.topnav{display:flex;gap:.2rem;align-items:center}nav.topnav a{margin:0;padding:.35rem .7rem;border-radius:8px}nav.topnav a:hover{background:var(--soft);text-decoration:none}nav.topnav a{position:relative}nav.topnav a.active{background:transparent;color:var(--accent);font-weight:700}nav.topnav a.active::after{content:"";position:absolute;left:.8rem;right:.8rem;bottom:.1rem;height:3px;border-radius:2px;background:var(--accent)}nav.topnav a.active:hover{background:var(--soft)}
.umenu summary{display:inline-flex;align-items:center;gap:.4rem}.avatar{width:24px;height:24px;border-radius:50%;background:var(--accent);color:#fff;display:inline-grid;place-items:center;font-size:.72rem;font-weight:700}
/* 좁은 화면에서 상단 메뉴가 잘려 못 찾는 일이 없도록, 가로로 밀어 볼 수 있게 한다 */
@media(max-width:700px){.umenu .uname{display:none}
  nav.topnav{gap:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%;padding-bottom:2px}
  nav.topnav::-webkit-scrollbar{display:none}
  nav.topnav a{padding:.3rem .5rem;font-size:.88rem;flex:0 0 auto}}
/* layout */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow)}
.i{display:inline-block;vertical-align:-3px;flex:none}
/* 스프라이트 아이콘(<use>) — 틀에 붙이던 선 속성을 한 곳에서 (2026-10-01) */
.iu{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.grid{display:grid;gap:1rem}.g2{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(4,1fr)}.g5{grid-template-columns:repeat(5,1fr)}.g6{grid-template-columns:repeat(6,1fr)}
@media(max-width:1000px){.g4,.g5,.g6{grid-template-columns:repeat(3,1fr)}}@media(max-width:700px){.g2,.g3,.g4,.g5,.g6{grid-template-columns:repeat(2,1fr)}}@media(max-width:460px){.g2,.g3,.g4,.g5,.g6{grid-template-columns:1fr}}
.tile{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem 1.1rem;box-shadow:var(--shadow)}
.tile .k{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}
.tile .v{font-size:1.65rem;font-weight:700;margin:.15rem 0;font-variant-numeric:tabular-nums}.tile .s{font-size:.75rem;color:var(--muted)}
.v.ok{color:var(--ok)}.v.blue{color:var(--blue)}.v.purple{color:var(--purple)}.v.bad{color:var(--bad)}.v.warn{color:var(--warn)}
.section-h{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin:1.75rem 0 .75rem}.section-h h2{margin:0}
.badge{display:inline-block;padding:.15rem .5rem;border-radius:6px;font-size:.72rem;font-weight:600;background:var(--soft);color:var(--muted)}
.badge.ok{background:rgba(22,163,74,.12);color:var(--ok)}.badge.bad{background:rgba(220,38,38,.12);color:var(--bad)}.badge.warn{background:rgba(245,158,11,.15);color:#b45309}.badge.blue{background:rgba(37,99,235,.12);color:var(--blue)}.badge.purple{background:rgba(124,58,237,.12);color:var(--purple)}
.flash{padding:.55rem 1rem;border-radius:10px;margin:0 0 .75rem;font-size:.9rem}.flash.ok{background:rgba(22,163,74,.1);color:var(--ok)}.flash.error{background:rgba(220,38,38,.1);color:var(--bad)}
.ann{background:linear-gradient(90deg,var(--accent),var(--accent-2));color:#fff;padding:.6rem 1rem;border-radius:10px;margin:.5rem 0 1rem;font-size:.9rem}
input,select,textarea{width:100%;border:1px solid var(--line);background:var(--card);color:var(--text);border-radius:10px;padding:.6rem .8rem;font:inherit;transition:border-color .2s,box-shadow .2s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(194,65,12,.15)}
textarea{min-height:140px}label{display:block;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600;margin:.8rem 0 .3rem}

.row{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}.spread{justify-content:space-between}.right{margin-left:auto}
.bar{height:8px;background:var(--soft);border-radius:99px;overflow:hidden;margin:.3rem 0 .8rem}.bar i{display:block;height:100%;border-radius:99px;background:var(--ok)}.bar i.warn{background:var(--warn)}.bar i.bad{background:var(--bad)}
.kv td:first-child{color:var(--muted);width:35%}
/* sidebar layout */
.shell{display:grid;grid-template-columns:230px 1fr;gap:1.5rem;align-items:start}@media(max-width:860px){.shell{grid-template-columns:1fr}}
/* 사이드바는 화면에 떠 있고 본문만 스크롤된다.
   sticky 로는 본문이 메뉴보다 짧은 화면에서 붙을 자리가 없어 메뉴가 같이 밀려 올라갔다.
   고정(fixed)이므로 격자 높이에도 들어가지 않는다 — 푸터가 메뉴 길이만큼 밀려나던 문제도 함께 사라진다.
   상단 헤더가 sticky 라서 그 높이(--hdr-h, app.js 가 측정)만큼 아래에서 시작한다. */
.side{overscroll-behavior:contain;padding-right:.3rem}
@media(min-width:861px){.side{position:fixed;z-index:20;top:calc(var(--hdr-h,64px) + 12px);left:28px;width:230px}
/* 고정된 사이드바는 격자 항목이 아니게 되므로, 본문이 첫 칸으로 당겨져 230px 로 찌그러진다.
   본문을 둘째 칸에 못박아 둔다. (사이드바 바로 뒤의 main 에만 — messages 의 2단 .shell 은 건드리지 않는다) */
.shell>.side+main{grid-column:2}}
/* 메뉴는 스크롤바를 보이지 않는다 — 관리 묶음이 한 번에 하나만 열리므로(admin/_menu.html) 보통 창에 들어간다.
   창이 메뉴보다 짧은 예외 상황에서도 휠·터치로는 끝까지 닿게 스크롤만 허용하고 막대는 숨긴다 (2026-10-10 운영자 요청) */
@media(min-width:861px) and (max-height:640px){.side{max-height:calc(100vh - var(--hdr-h,64px) - 24px);overflow-y:auto;scrollbar-width:none}
.side::-webkit-scrollbar{display:none}}
.side .brand{margin:.2rem 0 .7rem}
/* 사이드바 묶음 접기 — 지금 보는 묶음만 펼쳐 두면 스크롤 없이 메뉴가 다 보인다 */
.side-sec{margin:.15rem 0}.side-sec>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.35rem;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:800;padding:.38rem .55rem;border-radius:9px}
.side-sec>summary::-webkit-details-marker{display:none}
.side-sec>summary::after{content:"▸";margin-left:auto;font-size:.8rem;transition:transform .15s}
.side-sec[open]>summary::after{transform:rotate(90deg)}
.side-sec>summary:hover{background:var(--soft);color:var(--text)}
.side h6{font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:.6rem 0 .2rem}
.side a.item{display:flex;align-items:center;gap:.5rem;padding:.26rem .55rem;border-radius:10px;color:var(--text);font-weight:500;font-size:.86rem}
.side .item-off{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;padding:.34rem .6rem;border-radius:10px;color:var(--muted);opacity:.55;cursor:not-allowed;font-size:.86rem}.side .item-off small{flex-basis:100%;margin-left:1.9rem;font-size:.7rem;margin-top:-.3rem}
.side a.item:hover{background:var(--soft);text-decoration:none}.side a.item.active{background:var(--card);box-shadow:var(--shadow)}
.side a.item .ic{width:23px;height:23px;border-radius:8px;background:var(--soft);display:inline-flex;align-items:center;justify-content:center;color:var(--muted)}.side a.item.active .ic,.side a.item:hover .ic{background:var(--accent);color:#fff}:root[data-theme="dark"] .side a.item.active .ic{color:#07090e}
.side a.item .n{margin-left:auto;background:var(--soft);color:var(--muted);border:1px solid var(--line);border-radius:99px;font-size:.68rem;font-weight:700;min-width:1.4rem;text-align:center;padding:.05rem .45rem;font-variant-numeric:tabular-nums}
/* 할 일이 있으면(1 이상) 빨간색으로 둥둥 떠서 눈에 띄게 — 0 은 회색으로 조용히 (2026-10-10 운영자 요청, 사용자·관리자 메뉴 공통) */
.side a.item .n.on{background:#dc2626;color:#fff;border-color:transparent;box-shadow:0 4px 14px rgba(220,38,38,.38);animation-duration:3.4s}
/* 구름처럼 — 위·옆으로 천천히 흘러가며 살짝 부풀었다 가라앉는다 (2026-10-10 운영자 요청: "둥둥 떠서 움직이면 좋겠어 구름처럼") */
@keyframes badge-float{0%,100%{transform:translate(0,0) scale(1)}25%{transform:translate(1.5px,-3px) scale(1.04)}50%{transform:translate(-1px,-5px) scale(1.06)}75%{transform:translate(-2px,-2px) scale(1.03)}}
.side a.item .n,.notif-n{animation:badge-float 4.2s ease-in-out infinite;will-change:transform}
.side a.item:nth-child(3n+1) .n{animation-delay:-1.1s}.side a.item:nth-child(3n+2) .n{animation-delay:-2.3s}.side a.item:nth-child(4n) .n{animation-duration:5s}
@media(prefers-reduced-motion:reduce){.side a.item .n,.side a.item .n.on{animation:none}}
/* post */

.prose{font-size:1.02rem}.prose h2{margin-top:1.75rem}.prose table{font-size:.9rem}.prose details{border:1px solid var(--line);border-radius:10px;padding:.6rem 1rem;margin:1rem 0}.prose summary{cursor:pointer;font-weight:600}
.lock{border:1px dashed var(--accent);border-radius:12px;padding:1.5rem;text-align:center;margin:1.5rem 0}

.faq details{border-bottom:1px solid var(--line);padding:.7rem 0}.faq summary{font-weight:600;cursor:pointer}
/* footer */
.ft{margin:4rem 0 1.5rem;border-top:1px solid var(--line);padding-top:2rem;font-size:.86rem;color:var(--muted)}
/* 대시보드·어드민(사이드바 레이아웃)에서는 푸터도 오른쪽 본문 칸에 맞춘다.
   사이드바가 길어져도 푸터 위치는 영향을 받지 않는다(사이드바는 자체 스크롤). */
/* 사이드바가 고정이라, main 밖에 있는 것들(공지·알림·breadcrumb·공유바·푸터)은
   그냥 두면 메뉴 아래로 깔린다. 본문 칸 시작점까지 밀어 준다. */
@media(min-width:861px){
  body.wide .ft,
  body.wide > .wrap.page > .ann,
  body.wide > .wrap.page > .flash,
  body.wide > .wrap.page > nav[aria-label="breadcrumb"]{margin-left:calc(230px + 1.5rem)}
}

.ft-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr 1fr;gap:2rem}@media(max-width:800px){.ft-grid{grid-template-columns:1fr 1fr}}@media(max-width:480px){.ft-grid{grid-template-columns:1fr}}
.ft-col h5{margin:0 0 .6rem;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-family:var(--font-body)}.ft-col a{display:block;color:var(--text);padding:.22rem 0;font-weight:500}.ft-col a:hover{color:var(--accent);text-decoration:none}
.ft-legal{margin-top:2rem;padding-top:1.2rem;border-top:1px solid var(--line);font-size:.74rem;line-height:1.6;word-break:keep-all}.ft-legal p{margin:0 0 .5rem}.ft-copy{color:var(--muted)}.ft-cite{color:var(--muted);word-break:break-all}

.msg{padding:.75rem 1rem;border-radius:10px;margin:.5rem 0;background:var(--soft)}.msg.admin{background:rgba(194,65,12,.08);border-left:3px solid var(--accent)}
.empty{text-align:center;padding:3rem 1rem;color:var(--muted)}.empty .big{font-size:2rem}
.pill-group{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden}.pill-group a{padding:.35rem .8rem;font-size:.82rem;color:var(--text)}.pill-group a.active{background:var(--accent);color:#fff}
.chart-box{position:relative;height:260px}
details.lang{position:relative}details.lang summary{list-style:none;cursor:pointer}details.lang summary::-webkit-details-marker{display:none}
details.lang .menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.12);min-width:170px;padding:.4rem;z-index:50}
details.lang .menu a{display:block;padding:.5rem .7rem;border-radius:8px;color:var(--text);font-weight:500}details.lang .menu a:hover{background:var(--soft);text-decoration:none}
/* mobile */
.menu-btn{display:none}
@media(max-width:860px){
  .menu-btn{display:inline-flex}
  .side{position:static;width:auto;max-height:none;overflow:visible;display:none;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:.6rem .8rem;margin-bottom:1rem}
  .side.open{display:block}
  .side .brand{display:none}
  .shell{gap:.75rem}
  
  h1{font-size:1.4rem}
  .top{padding:8px 0}.brand{font-size:1.15rem}.brand img{height:31px !important}
  .clock{font-size:.7rem;padding:.25rem .6rem}.clock .tz{display:none}
  .controls .btn.sm{padding:.3rem .5rem;font-size:.78rem}
  .crumb{display:none}
  
  
  .chart-box{height:200px}
  .tile .v{font-size:1.35rem}
  .grid.g2,.grid.g3{grid-template-columns:1fr}
  .shell[style]{grid-template-columns:1fr !important}
  footer .links a{display:inline-block;margin:.2rem .4rem}
}
@media(max-width:460px){.grid.g4,.grid.g5,.grid.g6{grid-template-columns:1fr 1fr}.wrap{padding:0 14px}}
.wlbox{display:flex;align-items:flex-start;justify-content:space-between;gap:1.2rem;flex-wrap:wrap;margin:2.5rem 0;padding:1.4rem 1.5rem;border-radius:18px;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow)}

@media(max-width:700px){.wlbox{flex-direction:column;align-items:stretch}}
.brand:has(img){background:transparent;padding:0;border-radius:0}

/* share bar */

details.lang .menu a .i{margin-right:.3rem;color:var(--muted)}
.legal h2{font-size:1.05rem;margin-top:2rem}.legal ol{padding-left:1.3rem}.legal li{margin:.35rem 0;word-break:keep-all}.legal table{font-size:.9rem;margin:.8rem 0 1.2rem}.legal td,.legal th{vertical-align:top}.legal p{word-break:keep-all}
/* standard page bar: essence + share + views */
.pagebar{display:flex;align-items:center;gap:.8rem;flex-wrap:nowrap;margin:1.6rem 0 .4rem;padding:.45rem .6rem .45rem .9rem;border:1px solid var(--line);border-radius:999px;background:var(--card)}
.pb-essence{flex:1;min-width:0;display:flex;align-items:center;gap:.45rem;font-size:.8rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pb-essence span{overflow:hidden;text-overflow:ellipsis}.pb-essence .i{color:var(--accent);flex:none}
.pb-right{display:flex;align-items:center;gap:.6rem;flex:none}
.pb-share{display:flex;align-items:center;gap:.25rem}.pb-share .sb{width:32px;height:32px;border-radius:999px;border:1px solid var(--line);background:var(--card);color:var(--text);display:inline-grid;place-items:center;cursor:pointer;transition:transform .12s,border-color .2s,color .2s,background .2s}
.pb-share .sb:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px);text-decoration:none}.pb-share .sb.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.pb-share .native{border-color:var(--accent);color:var(--accent)}
.pb-meta{display:flex;align-items:center;gap:.6rem;margin-left:auto;padding-left:.7rem;border-left:1px solid var(--line)}
.pb-read{display:inline-flex;align-items:center;gap:.25rem;font-size:.78rem;color:var(--muted);white-space:nowrap}
.pb-views{display:flex;align-items:center;gap:.55rem;font-size:.78rem;color:var(--muted);font-variant-numeric:tabular-nums;padding:0 .2rem;white-space:nowrap}.pb-views span{display:inline-flex;align-items:center;gap:.25rem}.pb-views .ai{color:var(--purple)}

@media(max-width:700px){
  .pagebar{border-radius:14px;flex-wrap:wrap;padding:.55rem .7rem;gap:.5rem}.pb-essence{display:none}
  .pb-right{width:100%;display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .6rem}
  .pb-share{width:100%;justify-content:flex-start;flex-wrap:wrap;gap:.3rem}.pb-share .sb{width:32px;height:32px}
  .pb-meta{width:100%;justify-content:flex-end;margin-left:0;padding-left:0;border-left:0}
}
/* page FAQ (standard) */
.pfaq{max-width:var(--w-site);margin:3rem auto 0}.pfaq h2{font-size:1.1rem;font-weight:800;margin-bottom:.4rem;display:flex;align-items:center;gap:.5rem}.pfaq h2::before{content:"";width:18px;height:3px;border-radius:2px;background:var(--accent)}
.pfaq details{border-top:1px solid var(--line);padding:.8rem 0}.pfaq details:last-child{border-bottom:1px solid var(--line)}.pfaq summary{cursor:pointer;font-weight:600;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:1rem;word-break:keep-all}.pfaq summary::-webkit-details-marker{display:none}.pfaq summary::after{content:"+";color:var(--accent);font-family:var(--font-display);font-size:1.2rem;flex:none}.pfaq details[open] summary::after{content:"–"}.pfaq p{margin:.6rem 0 0;color:var(--muted);line-height:1.7;word-break:keep-all}
/* 글·소개 페이지(.prose) 안의 FAQ 는 카드 모양(.prose details)이 되므로 안쪽 여백을 준다 — /api 등 (2026-10-09) */
.prose .pfaq details{padding:0;margin:.6rem 0;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.prose .pfaq details:last-child{border-bottom:1px solid var(--line)}
.prose .pfaq summary{padding:.9rem 1.1rem}
.prose .pfaq details p{margin:0;padding:.8rem 1.1rem .95rem;border-top:1px solid var(--line)}
@media(max-width:480px){.prose .pfaq summary{padding:.8rem .9rem}.prose .pfaq details p{padding:.7rem .9rem .85rem}}

h1+.pagebar,h1+p+.pagebar,.section-h+.pagebar{margin:.6rem 0 1.6rem}
.prose{line-height:1.8}.prose p,.prose li{max-width:none}
.pb-read{display:inline-flex;align-items:center;gap:.25rem;font-size:.78rem;color:var(--muted);white-space:nowrap}
/* header: one fixed line on every page (brand · nav · controls); never wraps above 700px */
.hdr .top{flex-wrap:nowrap}
.hdr .top>.row{flex-wrap:nowrap;flex:1 1 auto;min-width:0}
.hdr .controls{flex-wrap:nowrap;flex:0 0 auto;margin-left:1.5rem}
nav.topnav a,.clock,.controls .btn{white-space:nowrap}
@media(max-width:1060px){.umenu .uname{display:none}.hdr .top>.row{gap:.8rem !important}nav.topnav a{padding:.35rem .5rem}}
@media(max-width:860px){nav.topnav{gap:0}nav.topnav a{padding:.3rem .5rem;font-size:.92rem}.brand img{height:39px}}
/* logo: never shrink or distort — intrinsic ratio at a fixed height */
.brand{flex:0 0 auto}.brand img{height:46px;width:auto;max-width:none;flex-shrink:0;object-fit:contain}
nav.topnav{flex-shrink:0}nav.topnav a{font-size:1.08rem;padding:.4rem .8rem}
/* 상단 메뉴가 계정·테마·언어 버튼과 겹치지 않게 — 화면 폭에 따라 글자·여백을 줄이고, 그래도 좁으면 가로로 밀어 본다 (2026-10-13) */
nav.topnav{flex-shrink:1;min-width:0;overflow-x:auto;scrollbar-width:none}nav.topnav::-webkit-scrollbar{display:none}nav.topnav a{font-size:1rem;padding:.35rem .6rem}
.umenu .uname{display:none}   /* 이름은 계정 메뉴 안에 — 상단 메뉴가 잘리지 않게 (아바타 머리글자만) */
@media(max-width:1180px){.umenu .uname{display:none}nav.topnav a{font-size:.95rem;padding:.3rem .45rem}}
/* header controls: one height for account · theme · language */
.hdr .controls .btn{height:40px;box-sizing:border-box;padding-top:0;padding-bottom:0;font-size:.9rem;border-radius:10px}.hdr .controls .btn.icon{width:40px;padding:0;justify-content:center}.hdr .controls .btn.sm{padding-left:.75rem;padding-right:.75rem}.hdr .controls .avatar{width:26px;height:26px}@media(max-width:860px){.hdr .controls .btn{height:36px;font-size:.84rem}.hdr .controls .btn.icon{width:36px}}
/* hamburger (mobile only) */
.nav-btn{display:none;width:42px;height:42px;border:1px solid var(--line);border-radius:10px;background:var(--card);cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:5px;flex:0 0 auto;margin-left:auto}
.nav-btn span{display:block;width:18px;height:2px;border-radius:2px;background:var(--text);transition:transform .2s,opacity .2s}
.top.open .nav-btn span:nth-child(1){transform:translateY(7px) rotate(45deg)}.top.open .nav-btn span:nth-child(2){opacity:0}.top.open .nav-btn span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
@media(max-width:700px){
  .hdr .top{flex-wrap:wrap;gap:.6rem}
  .hdr .top>.row{width:100%;gap:.6rem !important;flex-wrap:nowrap;justify-content:space-between}
  .brand{font-size:1.15rem}.brand img{height:36px !important}
  .nav-btn{display:inline-flex}
  nav.topnav,.hdr .controls{display:none}
  .top.open nav.topnav{display:flex;flex-direction:column;align-items:stretch;order:3;width:100%;gap:.15rem;padding-top:.5rem;border-top:1px solid var(--line)}
  .top.open nav.topnav a{padding:.6rem .7rem;font-size:.95rem;border-radius:10px}.top.open nav.topnav a.active{background:var(--soft)}.top.open nav.topnav a.active::after{display:none}
  .top.open .controls{display:flex;width:100%;margin-left:0;justify-content:flex-start;gap:.5rem;padding:.4rem 0 .3rem;border-top:1px solid var(--line)}
  .top.open .row{flex-wrap:wrap}
}

/* 공유 행은 항상 한 줄 — 카드가 좁아지면 줄바꿈 대신 아이콘이 작아진다 */
@container (max-width:344px){.cm-share .sb,.cm .sb.save{width:24px;height:24px}.cm-share .score-chip{height:18px;padding:2px .4rem 0;font-size:.68rem}.cm-share{gap:.18rem}.cm-right{gap:.28rem}.cm-views{font-size:.69rem;gap:.34rem}}
@container (max-width:330px){.cm-share .sb,.cm .sb.save{width:22px;height:22px}.cm-share .sb svg,.cm .sb.save svg{width:11px;height:11px}.cm-share{gap:.14rem}.cm-views{font-size:.66rem;gap:.28rem}}
@container (max-width:296px){.cm-share .sb,.cm .sb.save{width:21px;height:21px}.cm-share .score-chip{height:17px;padding:2px .35rem 0;font-size:.64rem}.cm-share .sb svg,.cm .sb.save svg{width:11px;height:11px}.cm-share{gap:.12rem}.cm-right{gap:.2rem}.cm-views{font-size:.64rem;gap:.26rem}.cm-views svg{width:11px;height:11px}}

/* 공유 버튼은 어떤 폭에서도 정원 — 줄어들거나 늘어나지 않는다 */
.pagebar .sb{flex:0 0 auto;aspect-ratio:1;box-sizing:border-box;padding:0}

.pb-save{display:inline-flex;align-items:center;gap:.3rem;height:30px;padding:0 .7rem;border-radius:999px;border:1px solid var(--line);background:var(--card);color:var(--muted);font-size:.78rem;font-weight:600;cursor:pointer;white-space:nowrap;margin-left:.4rem}
.pb-save:hover{border-color:var(--accent);color:var(--accent)}
.pb-save.on{background:var(--accent);border-color:var(--accent);color:#fff}
.pb-save.on svg{fill:currentColor}
.saved-item{display:grid;grid-template-columns:112px 1fr auto;gap:.9rem;align-items:center;padding:.6rem;border:1px solid var(--line);border-radius:14px;background:var(--card)}
.saved-item img{width:112px;aspect-ratio:1200/630;object-fit:cover;border-radius:9px;display:block;background:var(--soft)}.saved-item .m{font-size:.74rem;color:var(--muted)}.saved-item b{display:block;line-height:1.35;word-break:keep-all}.saved-item a.t{color:var(--text)}

@media(max-width:600px){.saved-item{grid-template-columns:88px 1fr auto}.saved-item img{width:88px}}

/* 카드 우측: 조회수 + 저장 버튼 */

.pb-save{margin-left:.2rem}
/* Save 버튼: 둥근 테두리를 따라 빛이 계속 도는 효과 (conic-gradient 링 회전) */
.pb-save{position:relative;isolation:isolate;overflow:hidden;border-color:transparent}
.pb-save::before{content:"";position:absolute;inset:-200%;z-index:-2;background:conic-gradient(from 0deg,var(--line) 0 62%,color-mix(in srgb,var(--accent) 45%,var(--line)) 76%,var(--accent) 86%,#fff 91%,var(--line) 100%);animation:pbspin 2.6s linear infinite}
.pb-save::after{content:"";position:absolute;inset:1.5px;z-index:-1;border-radius:inherit;background:var(--card)}
.pb-save.on::after{background:var(--accent)}
.pb-save.on::before{background:conic-gradient(from 0deg,var(--accent) 0 70%,rgba(255,255,255,.9) 88%,var(--accent) 100%)}
.pb-save>svg,.pb-save>span{position:relative;z-index:1}

@keyframes pbspin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.pb-save::before{animation:none}}

/* 플로팅 '맨 위로' 화살표 — 모든 페이지 우측 하단. 스크롤 400px 이후 나타나고, 링 위로 빛이 돈다 */
.totop{position:fixed;right:22px;bottom:22px;z-index:900;width:48px;height:48px;border-radius:999px;border:0;padding:0;cursor:pointer;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--accent),#2af0e0);box-shadow:0 10px 26px rgba(15,17,23,.22);opacity:0;transform:translateY(14px) scale(.9);pointer-events:none;transition:opacity .25s,transform .25s;isolation:isolate;overflow:hidden}
.totop::before{content:"";position:absolute;inset:-60%;z-index:-1;background:conic-gradient(from 0deg,transparent 0 72%,rgba(255,255,255,.75) 88%,transparent 100%);animation:pbspin 3s linear infinite}
.totop::after{content:"";position:absolute;inset:2px;z-index:-1;border-radius:inherit;background:linear-gradient(135deg,var(--accent),#2af0e0)}
.totop svg{position:relative;z-index:1}
.totop.show{opacity:1;transform:none;pointer-events:auto}
.totop:hover{transform:translateY(-4px) scale(1.06);box-shadow:0 16px 34px rgba(124,92,255,.35)}
.totop:hover::before{animation-duration:1.2s}
.totop:hover svg{animation:totop-bounce .9s ease-in-out infinite}
.totop:active{transform:translateY(-1px) scale(.98)}
@keyframes totop-bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@media(max-width:700px){.totop{right:14px;bottom:14px;width:44px;height:44px}}
@media(prefers-reduced-motion:reduce){.totop::before{animation:none}.totop{transition:none}}

.fresh{display:inline-flex;align-items:center;gap:.35rem;font-size:.72rem;font-weight:700;letter-spacing:.02em;border-radius:999px;padding:.18rem .6rem;white-space:nowrap;vertical-align:middle}
.fresh i{width:7px;height:7px;border-radius:50%;background:currentColor;display:inline-block}

.fresh.today{background:color-mix(in srgb,var(--accent) 12%,var(--card));color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}
@keyframes freshblink{0%,100%{opacity:1}50%{opacity:.25}}

/* 브레드크럼 — 모든 공개 페이지 상단 */
.bc{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem;margin:.55rem 0 .1rem;font-size:.78rem;color:var(--muted);list-style:none;padding:0}.bc li{display:inline-flex;align-items:center;gap:.3rem}.bc a{color:var(--muted);text-decoration:none}.bc a:hover{color:var(--accent)}.bc .sep{opacity:.45}.bc .cur{color:var(--text);font-weight:600;max-width:min(60vw,520px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.soon{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.7rem}

/* ── 문의 (/contact) ── */
.ct-head h1{font-size:clamp(1.45rem,3.6vw,1.9rem);letter-spacing:-.025em;margin:0 0 .4rem}
.ct-head>p{margin:0 0 .3rem;color:var(--muted);font-size:.92rem;line-height:1.7}
.ct-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:1rem;align-items:start;margin-top:1rem}
.ct-form{padding:1.3rem 1.4rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--card);box-shadow:var(--shadow)}
.ct-f{display:block;margin:0 0 .85rem}
.ct-f>span{display:block;font-size:.78rem;font-weight:600;color:var(--muted);margin:0 0 .3rem}
.ct-f>span i{font-style:normal;color:var(--bad)}
.ct-f input,.ct-f select,.ct-f textarea{width:100%;font:inherit;font-size:.9rem;color:var(--text);background:var(--bg);
  border:1px solid var(--line);border-radius:10px;padding:.6rem .75rem;transition:border-color .15s,box-shadow .15s}
.ct-f textarea{resize:vertical;line-height:1.65}
.ct-f input:focus,.ct-f select:focus,.ct-f textarea:focus{outline:0;border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent)}
.ct-row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}
.ct-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.ct-side{display:grid;gap:.6rem}
.ct-box{padding:.95rem 1.1rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}
.ct-box h3{font-size:.85rem;margin:0 0 .5rem;letter-spacing:-.01em}
.ct-box p{margin:0 0 .5rem;font-size:.82rem;line-height:1.65;color:var(--muted)}
.ct-box ul{list-style:none;margin:0;padding:0;display:grid;gap:.35rem}
.ct-box li a{font-size:.85rem}
.ct-ok{display:flex;gap:.9rem;align-items:flex-start;margin:1rem 0 0;padding:1.3rem 1.4rem;border-radius:var(--radius);
  background:color-mix(in srgb,var(--ok) 8%,var(--card));border:1px solid color-mix(in srgb,var(--ok) 28%,var(--line))}
.ct-ok svg{flex:none;color:var(--ok);margin-top:.15rem}
.ct-ok b{display:block;font-size:1.05rem;margin:0 0 .3rem}
.ct-ok p{margin:0 0 .8rem;font-size:.88rem;line-height:1.7;color:var(--muted)}
@media(max-width:760px){.ct-grid{grid-template-columns:1fr}.ct-row{grid-template-columns:1fr}}

/* 어드민 자동화 — 상태 스위치. 지금 상태인 쪽이 색으로 채워진다 */
.sw{display:inline-flex;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:var(--card)}

/* 개선 순위 변동 배지 (2026-09-27) */

  
.pagebar.pb-top{margin:.2rem 0 1.2rem}

/* 글 페이지: 읽기 폭(820px)에 브레드크럼을 맞추고 위아래 여백 (2026-10-09) */
.post-col{max-width:820px}
.post-page .bc{max-width:820px;margin:.9rem auto 1.1rem}

/* ── 안내 상자 · 숫자 묶음 · 버튼 줄 (2026-10-09) ── */
.infobox{background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:.9rem 1.1rem;font-size:.9rem}
.infobox h3{margin:0 0 .3rem;font-size:1rem}.infobox ul{margin:.2rem 0 0;padding-left:1.1rem}.infobox li{margin:.15rem 0}
.notice{border-left:4px solid var(--accent)}
.statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.8rem;margin:.7rem 0}
.statgrid .k{display:block;font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
.statgrid .v{font-weight:700;font-size:.98rem}
.actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.7rem}.actions form{margin:0}

.empty{border:1px dashed var(--line);border-radius:12px;padding:1rem;text-align:center;color:var(--muted);font-size:.9rem}
.btn:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.nowrap{white-space:nowrap}
.prose pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}
.prose code{overflow-wrap:anywhere}
.prose table{max-width:100%}
.plan .price .per{font-size:.95rem;font-weight:600;color:var(--muted)}
@media(max-width:420px){.plan .cta{flex-wrap:wrap}}
.prose table{word-break:normal;overflow-wrap:anywhere}
@media(max-width:640px){
  table.tiers thead{display:none}
  table.tiers,table.tiers tbody,table.tiers tr,table.tiers td{display:block;width:100%}
  table.tiers tr{border:1px solid var(--line);border-radius:12px;margin:0 0 .6rem;padding:.4rem .7rem}
  table.tiers td{border:0;padding:.2rem 0}
  table.tiers td[data-label]::before{content:attr(data-label);display:block;font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
  table.tiers td:first-child::before{display:none}
}

/* checkboxes and radios never stretch (global input{width:100%} above is for text fields) — 2026-10-09 */
input[type=checkbox],input[type=radio]{width:auto;flex:none}
/* 페이지 바: AI·크롤러 조회수를 누르면 이름별(ChatGPT·Claude·Gemini·Perplexity)과 Others */
.pb-ai{position:relative}.pb-ai>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:.25rem}.pb-ai>summary::-webkit-details-marker{display:none}
.pb-ai-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:220px;max-width:280px;white-space:normal;background:var(--card);color:var(--text);border:1px solid var(--line);border-radius:12px;padding:.7rem .8rem;box-shadow:0 8px 24px rgba(0,0,0,.14);font-size:.82rem}
.pb-ai-pop b{display:block;margin-bottom:.35rem}.pb-ai-pop .r{display:flex;justify-content:space-between;gap:1rem;padding:.22rem 0;border-top:1px solid var(--line)}.pb-ai-pop .n{display:inline-flex;align-items:center;gap:.4rem}
.pb-ai-pop p{margin:.5rem 0 0;font-size:.72rem;color:var(--muted);line-height:1.35}
.pb-ai-pop::before{content:"";position:absolute;left:0;right:0;top:-10px;height:10px}   /* 숫자에서 팝업으로 마우스를 옮기는 틈에 닫히지 않게 — 안의 링크를 누를 수 있게 (2026-10-14) */
.pb-ai-pop a{color:var(--accent);font-weight:700;pointer-events:auto}
.pb-ai>summary::after{content:"";width:5px;height:5px;margin-left:.15rem;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:rotate(45deg) translateY(-2px);opacity:.7}.pb-ai[open]>summary::after{transform:rotate(-135deg) translateY(-1px)}
.pb-ai>summary:hover{text-decoration:underline;text-underline-offset:3px}
.pb-views svg,.pb-ai svg{display:block;flex:none}.pb-views .ai>summary,.pb-ai-pop .n{line-height:1}.pb-ai>summary{height:18px}.pb-ai-pop .r{align-items:center}
.pb-views .pb-ai{display:inline-flex;align-items:center;height:auto}.pb-ai>summary{height:auto;min-height:15px}
/* 실제 서비스 색 (ChatGPT·Claude·Gemini·Perplexity·Meta) — 숫자는 본문 색 */
.pb-ai>summary{gap:.55rem}.pb-ai .aib{display:inline-flex;align-items:center;gap:.25rem}.pb-ai .aib:last-child{color:var(--purple)}
.b-openai svg{color:#10a37f}.b-claude svg{color:#d97757}.b-gemini svg{color:#4e82ee}.b-perplexity svg{color:#1fb8cd}.b-meta svg{color:#0467df}.b-amazon svg{color:#ff9900}
.pb-ai-pop .n .t{color:var(--text)}.pb-ai>summary::after{margin-left:0}
/* 학교 목록·상세 (2026-10-10) */
.sch-layout{display:grid;grid-template-columns:250px 1fr;gap:1.4rem;margin-top:1rem;align-items:start}
.sch-filters{align-self:start}
.sch-facet{border-bottom:1px solid var(--line);padding:.5rem 0}.sch-facet summary{font-weight:700;font-size:.9rem;cursor:pointer;padding:.2rem 0}
.sch-opt{display:flex;align-items:center;gap:.5rem;padding:.28rem .2rem;font-size:.86rem;color:var(--text);border-radius:6px;text-decoration:none}
.sch-opt:hover{background:var(--soft)}.sch-opt .box{width:16px;height:16px;border:1.5px solid var(--line);border-radius:4px;display:inline-grid;place-items:center;font-size:.7rem;flex:none}
.sch-opt.on{font-weight:600}.sch-opt.on .box{background:var(--accent);border-color:var(--accent);color:#fff}.sch-opt .n{margin-left:auto;color:var(--muted);font-size:.78rem}
.sch-states{display:flex;flex-wrap:wrap;gap:.3rem;padding:.3rem 0}.sch-st{font-size:.78rem;padding:.15rem .45rem;border:1px solid var(--line);border-radius:6px;color:var(--text)}.sch-st.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.sch-list{list-style:none;margin:0;padding:0;display:grid;gap:.6rem}
.sch-row{display:flex;gap:1rem;justify-content:space-between;align-items:flex-start;padding:1rem 1.1rem}
.sch-name{font-weight:700;font-size:1.05rem;color:var(--text)}.sch-name:hover{color:var(--accent)}
.sch-chips{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.45rem}.sch-side{display:flex;flex-direction:column;gap:.3rem;align-items:flex-end;flex:none}
.chip{display:inline-block;padding:.14rem .55rem;border-radius:999px;font-size:.76rem;background:var(--soft);color:var(--text);border:1px solid var(--line);text-decoration:none;margin:0 .2rem .2rem 0}
a.chip:hover{border-color:var(--accent);color:var(--accent)}
.badge.soft{background:rgba(245,158,11,.14);color:#b45309}
.sch-dl{display:grid;grid-template-columns:max-content 1fr;gap:.5rem 1.2rem;margin:0}.sch-dl dt{font-weight:600;color:var(--muted);font-size:.86rem}.sch-dl dd{margin:0}
.note{border-left:3px solid var(--warn);background:rgba(245,158,11,.08);padding:.7rem .9rem;border-radius:8px;font-size:.9rem}

.home-facets{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;margin:1rem 0}
.home-facets h3{margin:0 0 .5rem;font-size:.95rem}
@media(max-width:860px){.sch-layout{grid-template-columns:1fr}.sch-row{flex-direction:column}.sch-side{flex-direction:row;align-items:center}.sch-dl{grid-template-columns:1fr}}
/* 필터 사이드바 다듬기 */
.sch-filters{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:.3rem 1rem;box-shadow:var(--shadow)}
.sch-facet{border-bottom:1px solid var(--line);padding:.55rem 0}.sch-facet:last-child{border-bottom:0}
.sch-facet summary{list-style:none;display:flex;align-items:center;justify-content:space-between;font-size:.88rem;letter-spacing:-.01em;padding:.25rem 0}
.sch-facet summary::-webkit-details-marker{display:none}
.sch-facet summary::after{content:"";width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(-45deg);transition:transform .15s;margin-right:.2rem}
.sch-facet[open] summary::after{transform:rotate(45deg)}
.sch-facet[open] summary{margin-bottom:.25rem}
.sch-opt{padding:.32rem .35rem;margin:0 -.35rem}
.sch-opt .box{border-radius:5px;border-color:#cbd5e1}
.sch-opt .n{background:var(--soft);border-radius:999px;padding:.02rem .45rem;font-variant-numeric:tabular-nums}
.sch-opt.on{color:var(--accent)}.sch-opt.on .n{background:rgba(15,118,110,.12);color:var(--accent)}
.sch-states{display:grid;grid-template-columns:repeat(auto-fill,minmax(42px,1fr));gap:.3rem}
.sch-st{text-align:center;padding:.22rem 0;border-radius:7px}.sch-st:hover{border-color:var(--accent);color:var(--accent)}
.sbox:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(15,118,110,.15)}
/* 학교 상세 — 학생과 교사 (2026-10-10, 쉽게 읽히게 다시) */
.sx h3{font-size:.9rem;font-weight:700;margin:0 0 .55rem;color:var(--text)}
.sx-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:.7rem;margin:.4rem 0 1.2rem}
.sx-kpi{background:var(--soft);border-radius:14px;padding:.9rem 1rem;display:flex;flex-direction:column;gap:.25rem}
.sx-kpi b{font-size:1.65rem;line-height:1.1;font-weight:800;color:var(--accent);letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.sx-kpi span{font-size:.8rem;color:var(--muted);line-height:1.3}
.sx-block{padding:1rem 0;border-top:1px solid var(--line)}
.sx-bar{display:flex;height:12px;border-radius:999px;overflow:hidden;background:var(--soft);gap:2px}
.sx-bar span{display:block;height:100%}
.sx-bar-lg{height:34px;border-radius:12px}
.sx-bar-lg span{display:flex;align-items:center;padding:0 .8rem;font-size:.82rem;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden}
.sx-m{background:#0f766e}.sx-f{background:#f59e0b}.sx-bar-lg .sx-f{color:#3b2a06;justify-content:flex-end}
.sx-pill{display:inline-block;padding:.35rem .9rem;border-radius:999px;background:rgba(15,118,110,.1);color:var(--accent);font-weight:700;font-size:.88rem}
.rc-1{background:#0f766e}.rc-2{background:#94a3b8}.rc-3{background:#f59e0b}.rc-4{background:#38bdf8}.rc-5{background:#a78bfa}.rc-6{background:#fb7185}.rc-7{background:#34d399}
.sx-legend{list-style:none;padding:0;margin:.7rem 0 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.35rem .9rem}
.sx-legend li{display:flex;align-items:center;gap:.45rem;font-size:.84rem}
.sx-legend i{width:10px;height:10px;border-radius:3px;flex:none}.sx-legend b{margin-left:auto;font-variant-numeric:tabular-nums}
.sx-note{font-size:.76rem;color:var(--muted);margin:.6rem 0 0}
.sx-cols{display:flex;align-items:flex-end;gap:.6rem;height:130px}
.sx-cols-sm{height:110px;max-width:360px}
.sx-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:.25rem;min-width:0}
.sx-col b{display:block;width:100%;max-width:46px;background:linear-gradient(180deg,#14b8a6,#0f766e);border-radius:8px 8px 3px 3px;min-height:3px}
.sx-col em{font-style:normal;font-size:.76rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.sx-col span{font-size:.72rem;color:var(--muted);white-space:nowrap}
.sx-facts{list-style:none;padding:1rem 0 0;margin:0;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.45rem}
.sx-facts li{background:var(--soft);border-radius:999px;padding:.32rem .8rem;font-size:.82rem;color:var(--muted)}.sx-facts b{color:var(--text);margin-left:.25rem}
@media(max-width:640px){.sx-kpi b{font-size:1.35rem}}
/* 목록 카드 사진 (승인된 대표 사진만, 2026-10-10) */
.sch-row.has-ph{align-items:stretch}
.sch-thumb{flex:none;width:150px;border-radius:10px;overflow:hidden;background:var(--soft);margin:-.3rem 0 -.3rem -.3rem}
.sch-thumb .ph-frame{border-radius:0;height:100%;min-height:96px;aspect-ratio:auto}
.sch-row .sch-main{flex:1;min-width:0}
@media(max-width:860px){.sch-thumb{width:100%;height:150px;margin:0 0 .4rem}}

/* 사진은 자르지 않는다 — 틀보다 비율이 다르면 같은 사진을 흐리게 깔아 빈자리를 채운다 (2026-10-10) */
.ph-frame{position:relative;display:block;overflow:hidden;border-radius:14px;background:#0b2e33;aspect-ratio:16/8;isolation:isolate}
.ph-frame::before{content:"";position:absolute;inset:-24px;background:var(--ph) center/cover no-repeat;filter:blur(22px) saturate(1.15) brightness(.85);transform:scale(1.08);z-index:-1}
.ph-frame img{position:relative;display:block;width:100%;height:100%;object-fit:contain}
/* 휴대폰에선 위쪽 공유 바를 숨긴다 — 제목·내용이 먼저 보이게 (아래쪽 공유 바는 그대로, 2026-10-10) */
@media(max-width:640px){.pagebar.pb-top{display:none}}

/* 머리말 알림 종 — 처리할 일 합계 (0 은 회색, 1 이상은 떠서 움직임 — 메뉴 배지와 같은 규칙) */
.notif-btn{position:relative;gap:.3rem}
.notif-n{position:absolute;top:-6px;right:-6px;min-width:1.15rem;height:1.15rem;padding:0 .3rem;border-radius:99px;font-size:.66rem;font-weight:800;line-height:1.15rem;text-align:center;background:var(--soft);color:var(--muted);border:1px solid var(--line);font-variant-numeric:tabular-nums}
.notif-n.on{background:#dc2626;color:#fff;border-color:var(--card);box-shadow:0 4px 14px rgba(220,38,38,.38);animation-duration:3.4s}
.notif-menu{min-width:230px}
.notif-menu a{display:flex !important;align-items:center;justify-content:space-between;gap:.8rem}
.notif-c{min-width:1.4rem;text-align:center;border-radius:99px;font-size:.7rem;font-weight:700;padding:.05rem .45rem;background:var(--soft);color:var(--muted)}
.notif-c.on{background:#dc2626;color:#fff}
@media(prefers-reduced-motion:reduce){.notif-n,.notif-n.on{animation:none}}

/* 휴대폰 머리말 (2026-10-10): 로고는 늘 보이고, 메뉴는 햄버거 하나 — 열면 화면 전체 패널에
   [알림·계정·테마·언어] → [내 계정·역할 메뉴] → [사이트 메뉴] 순서로. 드롭다운은 패널 폭 안에서 펼친다 */
.m-brand,.nav-side-slot{display:none}
@media(max-width:860px){
  .m-brand{display:block}
  .menu-btn{display:none !important}
  .hdr .top{flex-wrap:wrap;gap:.6rem}
  .hdr .top>.row{width:100%;gap:.6rem !important;flex-wrap:nowrap;justify-content:space-between}
  .brand img{height:34px !important}
  .nav-btn{display:inline-flex}
  nav.topnav,.hdr .controls{display:none}
  body.nav-open{overflow:hidden}
  body.nav-open .hdr{position:fixed;inset:0;overflow-y:auto;overscroll-behavior:contain;background:var(--bg);z-index:200;backdrop-filter:none;-webkit-backdrop-filter:none}
  .top.open{display:flex;flex-direction:column;align-items:stretch;flex-wrap:nowrap;padding-bottom:2rem}
  .top.open>.row{display:flex;order:1}
  .top.open>.row nav.topnav{display:none}
  .top.open .controls{display:flex;order:2;position:relative;width:100%;margin-left:0;flex-wrap:wrap;justify-content:flex-start;gap:.5rem;padding:.6rem 0;border-top:1px solid var(--line)}
  .top.open .controls details.lang{position:static}
  .top.open .controls details.lang .menu{left:0;right:0;top:calc(100% - .2rem);min-width:0;max-height:60vh;overflow-y:auto}
  .top.open .nav-side-slot{display:block;order:3}
  .nav-side-slot .side{display:block;position:static;border:0;background:none;padding:.2rem 0;margin:0;border-top:1px solid var(--line);border-radius:0}
  .nav-side-slot .side a.item{padding:.55rem .55rem;font-size:.95rem}
  .nav-side-slot .side-lang{display:none}
  .top.open .m-topnav{display:flex}
}
.m-topnav{display:none}
@media(max-width:860px){.m-topnav{order:4;flex-direction:column;gap:.1rem;padding-top:.5rem;border-top:1px solid var(--line)}
  .m-topnav a{padding:.6rem .7rem;font-size:.95rem;border-radius:10px;color:var(--text);font-weight:600}.m-topnav a.active{background:var(--soft);color:var(--accent)}}
.nav-side-slot:empty{display:none !important}
/* 학교 페이지 출처 아이콘 (ⓘ) — 마우스 오버·포커스(휴대폰은 탭)로 '학교 제공 / USAnaru™ 업데이트 · 날짜 · 원래 값' 팝업 */
.sc-prov{position:relative;display:inline-flex;vertical-align:middle;margin-left:.3rem;cursor:help;outline:none}
.sc-prov .sc-dot{width:15px;height:15px;border-radius:50%;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font:700 .62rem/15px Georgia,serif;font-style:italic;text-align:center}
.sc-prov:hover .sc-dot,.sc-prov:focus .sc-dot{background:var(--accent);color:#fff}
.sc-prov .sc-tip{display:none;position:absolute;z-index:60;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);width:max-content;max-width:min(280px,80vw);background:var(--text);color:var(--bg);font-size:.76rem;font-weight:500;line-height:1.4;letter-spacing:0;text-transform:none;padding:.45rem .6rem;border-radius:8px;box-shadow:0 6px 20px rgba(0,0,0,.18);white-space:normal;text-align:left}
.sc-prov .sc-tip::after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border:5px solid transparent;border-top-color:var(--text)}
.sc-prov .sc-tip b{display:block;font-weight:700}.sc-prov .sc-tip-o{display:block;opacity:.8;margin-top:.15rem;word-break:break-word}
.sc-prov:hover .sc-tip,.sc-prov:focus .sc-tip,.sc-prov:focus-within .sc-tip{display:block}
@media(hover:none){.sc-prov .sc-dot{width:18px;height:18px;line-height:18px}}
/* 넓은 표는 상자 안에서만 옆으로 밀린다 — 휴대폰에서 페이지 전체가 옆으로 움직이지 않게 */
.tbl-wrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
/* 책갈피 (2026-10-10) — 공유 바 버튼 · 대시보드 카드 · 목록 */
.pb-share .sb.bm.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.pb-share .sb.bm.on svg{fill:currentColor}
.bm-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--text);color:var(--bg);padding:.6rem 1rem;border-radius:10px;font-size:.88rem;z-index:300;box-shadow:0 8px 24px rgba(0,0,0,.2);max-width:calc(100vw - 32px);transition:opacity .4s}
.bm-toast.out{opacity:0}
.bm-list{list-style:none;margin:.5rem 0 0;padding:0}
.bm-list li{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.45rem 0;border-top:1px solid var(--line)}
.bm-list li:first-child{border-top:0}
.bm-list li a{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis}
.bm-full li{justify-content:flex-start}
.bm-full .bm-ic{color:var(--muted);flex:0 0 auto;display:inline-flex}
.bm-full .bm-t{display:flex;flex-direction:column;min-width:0;flex:1}
.bm-full form{margin:0;flex:0 0 auto}
/* 검색 드롭다운 (입력칸 하나) — app.js data-search-select */
.cb{position:relative}
.cb-q{width:100%;box-sizing:border-box;padding-right:2.4rem}
.cb-x{position:absolute;right:.4rem;top:50%;transform:translateY(-50%);width:28px;height:28px;border:0;background:none;color:var(--muted);font-size:1.15rem;cursor:pointer;border-radius:6px;line-height:1}
.cb-x:hover{background:var(--soft);color:var(--text)}
.cb-sel{position:absolute;left:0;bottom:0;width:100%;height:1px;opacity:0;pointer-events:none}
.cb-list{position:absolute;z-index:70;left:0;right:0;top:calc(100% + 4px);max-height:min(320px,50vh);overflow-y:auto;margin:0;padding:.3rem;list-style:none;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px rgba(0,0,0,.14);overscroll-behavior:contain}
.cb-list li{padding:.55rem .7rem;border-radius:8px;cursor:pointer;font-size:.95rem}
.cb-list li.on,.cb-list li:hover{background:var(--soft)}
.cb-list li[aria-selected=true]{font-weight:700;color:var(--accent)}
.cb-list li.cb-sep{border-top:1px solid var(--line);margin-top:.25rem;padding-top:.65rem}
.cb-list li.cb-none{color:var(--muted);cursor:default}
/* 학교 찾기 목록을 나라 목록과 같은 드롭다운으로 (role_form.html) */
.cb .rl-sugg.cb-list{margin-top:0;overflow-y:auto;padding:.3rem}
.cb .rl-sugg.cb-list button{border:0;border-radius:8px;min-height:40px;padding:.55rem .7rem;background:none}
.cb .rl-sugg.cb-list button.on,.cb .rl-sugg.cb-list button:hover{background:var(--soft)}
.rl-noschool:not([hidden]) + .rl-help{display:none}
/* 여러 개 고르기 — 고른 것 칩 + 검색칸 (app.js select[multiple][data-multi-search], partials/lang_pick.html) */
.ms{position:relative}
.ms-chips{list-style:none;margin:0 0 .45rem;padding:0;display:flex;flex-wrap:wrap;gap:.35rem}
.ms-chips[hidden]{display:none}
.ms-chips li{display:inline-flex;align-items:center;gap:.1rem;max-width:100%;background:var(--soft);border:1px solid var(--line);border-radius:999px;padding:.1rem .15rem .1rem .7rem;font-size:.9rem;line-height:1.25}
.ms-chips li span{min-width:0;overflow-wrap:anywhere}
.ms-x{flex:0 0 auto;width:34px;height:34px;border:0;border-radius:50%;background:none;color:var(--muted);font-size:1.15rem;line-height:1;cursor:pointer}
.ms-x:hover,.ms-x:focus-visible{background:var(--line);color:var(--text)}
.ms .cb-q{padding-right:.8rem}
.cb-list li.ms-opt{position:relative;padding-left:2.1rem}
.cb-list li.ms-opt::before{content:"";position:absolute;left:.7rem;top:50%;width:.95rem;height:.95rem;transform:translateY(-50%);border:1.5px solid var(--muted);border-radius:4px;box-sizing:border-box}
.cb-list li.ms-opt[aria-selected=true]::before{background:var(--accent);border-color:var(--accent)}
.cb-list li.ms-opt[aria-selected=true]::after{content:"";position:absolute;left:1.02rem;top:50%;width:.28rem;height:.55rem;border:solid #fff;border-width:0 2px 2px 0;transform:translateY(-62%) rotate(45deg)}
/* 페이지 바 AI 조회수 — 아직 안 읽은 AI(0)는 흐리게 (늘 보인다, 2026-10-11) */
.pb-ai .aib.z,.pb-ai-pop .r.z{opacity:.42}
.pb-ai .aib.z svg{filter:grayscale(1)}
/* ── 학교 배지 (2026-10-11) — 알약 모양 · 아이콘 원 · 단계별 색 (partials/school_badge.html) ── */
.sbg{display:inline-flex;align-items:center;gap:.4rem;padding:.22rem .75rem .22rem .24rem;border-radius:999px;font-weight:650;font-size:.8rem;line-height:1.1;letter-spacing:.01em;border:1px solid transparent;box-shadow:0 1px 2px rgba(15,23,42,.06);white-space:nowrap}
.sbg-i{display:inline-grid;place-items:center;width:1.45rem;height:1.45rem;border-radius:50%;flex:0 0 auto}
.sbg-i svg{width:.85rem;height:.85rem}
.sbg-updated{background:#f1f5f9;color:#334155;border-color:#e2e8f0}.sbg-updated .sbg-i{background:#e2e8f0;color:#475569}
.sbg-detailed{background:linear-gradient(135deg,#eff6ff,#dbeafe);color:#1d4ed8;border-color:#bfdbfe}.sbg-detailed .sbg-i{background:#2563eb;color:#fff}
.sbg-verified{background:linear-gradient(135deg,#ecfdf5,#ccfbf1);color:#0f766e;border-color:#99f6e4}.sbg-verified .sbg-i{background:#0f766e;color:#fff}
.sbg-complete{background:linear-gradient(135deg,#fffbeb,#fde68a);color:#92400e;border-color:#f59e0b;box-shadow:0 0 0 3px rgba(245,158,11,.15),0 2px 6px rgba(146,64,14,.12)}.sbg-complete .sbg-i{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .sbg-updated{background:#1e293b;color:#cbd5e1;border-color:#334155}:root:not([data-theme="light"]) .sbg-updated .sbg-i{background:#334155;color:#e2e8f0}:root:not([data-theme="light"]) .sbg-detailed{background:#172554;color:#93c5fd;border-color:#1e3a8a}:root:not([data-theme="light"]) .sbg-verified{background:#042f2e;color:#5eead4;border-color:#115e59}:root:not([data-theme="light"]) .sbg-complete{background:#451a03;color:#fcd34d;border-color:#b45309}}
:root[data-theme="dark"] .sbg-updated{background:#1e293b;color:#cbd5e1;border-color:#334155}:root[data-theme="dark"] .sbg-updated .sbg-i{background:#334155;color:#e2e8f0}:root[data-theme="dark"] .sbg-detailed{background:#172554;color:#93c5fd;border-color:#1e3a8a}:root[data-theme="dark"] .sbg-verified{background:#042f2e;color:#5eead4;border-color:#115e59}:root[data-theme="dark"] .sbg-complete{background:#451a03;color:#fcd34d;border-color:#b45309}
/* 단계 카드 + 화살표 */
.sb-steps{display:flex;align-items:stretch;gap:.4rem;margin:.5rem 0 .6rem;flex-wrap:nowrap}
.sb-step{flex:1 1 0;min-width:0;border:1px solid var(--line);border-radius:14px;padding:.65rem .75rem;background:var(--card);display:flex;flex-direction:column;gap:.4rem}
.sb-step.now{border:2px solid var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--card))}
.sb-step.now.gold{border-color:#f59e0b;background:color-mix(in srgb,#f59e0b 8%,var(--card))}
.sb-step.lock{opacity:.62}
.sb-arrow{align-self:center;color:var(--muted);font-weight:800;font-size:1.1rem;flex:0 0 auto}
.sb-stage{font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.sb-step.now .sb-stage{color:var(--accent)}
@media (max-width:760px){.sb-steps{flex-direction:column}.sb-arrow{transform:rotate(90deg)}}
.sbg-n{margin-left:.1rem;padding:.08rem .42rem;border-radius:999px;background:rgba(255,255,255,.75);color:inherit;font-size:.72rem;font-weight:800;line-height:1.2}
:root[data-theme="dark"] .sbg-n{background:rgba(0,0,0,.25)}
.sbg-candidate{background:#fff7ed;color:#c2410c;border-color:#fed7aa}.sbg-candidate .sbg-i{background:#ffedd5;color:#c2410c}
:root[data-theme="dark"] .sbg-candidate{background:#431407;color:#fdba74;border-color:#7c2d12}
/* 정렬 — 세그먼트 컨트롤 (2026-10-11) */
.seg{display:inline-flex;align-items:center;gap:.2rem;padding:.22rem;border:1px solid var(--line);border-radius:999px;background:var(--card);box-shadow:0 1px 2px rgba(15,23,42,.05);max-width:100%;overflow-x:auto}
.seg a{display:inline-flex;align-items:center;gap:.35rem;padding:.38rem .8rem;border-radius:999px;font-size:.82rem;font-weight:600;color:var(--muted);text-decoration:none;white-space:nowrap;min-height:34px;transition:background .15s,color .15s}
.seg a:hover{color:var(--text);background:color-mix(in srgb,var(--accent) 7%,transparent);text-decoration:none}
.seg a.on{background:var(--accent);color:#fff;box-shadow:0 2px 8px color-mix(in srgb,var(--accent) 35%,transparent)}
.seg a svg{width:15px;height:15px}
.seg-wrap{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin:.25rem 0 .5rem}
.seg-wrap .seg-l{font-size:.78rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
/* 학교 카드 하단 바 (2026-10-11) */
.cbar{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .65rem;margin-top:.6rem;padding-top:.5rem;border-top:1px dashed var(--line);font-size:.76rem;color:var(--muted);font-variant-numeric:tabular-nums}
.cbar-b{width:30px;height:30px;border-radius:999px;border:1px solid var(--line);background:var(--card);display:inline-grid;place-items:center;color:var(--text);cursor:pointer;padding:0}
.cbar-b:hover{border-color:var(--accent);color:var(--accent)}.cbar-b.ok{border-color:var(--ok,#16a34a);color:var(--ok,#16a34a)}
.cbar-b svg{width:15px;height:15px}
.cbar-n{display:inline-flex;align-items:center;gap:.22rem;white-space:nowrap}.cbar-n svg{width:14px;height:14px}.cbar-n.z{opacity:.45}
.cbar-sep{width:1px;height:18px;background:var(--line)}
@media (max-width:760px){.cbar-pc{display:none}}
/* 카드 바는 카드 전체 폭, PC 는 한 줄 (2026-10-11) */
.sch-row{flex-wrap:wrap}.sch-row>.sch-main{flex:1 1 0;min-width:0}.sch-row>.cbar{flex:0 0 100%}
@media (min-width:761px){.cbar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.cbar::-webkit-scrollbar{display:none}.cbar>*{flex:0 0 auto}}
/* 개발자 문서 표 — 첫 열(도구·경로·헤더 이름)은 글자 단위로 쪼개지 않는다 (2026-10-11) */
.dev-tbl td:first-child,.dev-tbl th:first-child{white-space:nowrap;vertical-align:top}.dev-tbl td:first-child code{white-space:nowrap;word-break:keep-all}
@media (max-width:640px){.dev-tbl td:first-child{white-space:normal}.dev-tbl td:first-child code{word-break:break-all}}

.map-btn{padding:.38rem .8rem;font-size:.82rem;border-color:var(--accent);color:var(--accent)}.map-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
/* 사진 없는 학교 목록 카드의 대체 이미지 표시 (2026-10-11) */
.sch-thumb-sample .ph-frame{position:relative}.sch-thumb-sample .ph-sample-tag{position:absolute;left:.4rem;top:.4rem;background:rgba(15,23,42,.72);color:#fff;font-size:.62rem;font-weight:600;padding:.12rem .45rem;border-radius:999px}

/* 검색창 오른쪽 공통 바로 가기 — partials/search_shortcut.html (2026-10-11) */
.sbox-go{flex:none;white-space:nowrap;margin-left:.35rem;background:color-mix(in srgb,var(--accent) 10%,var(--card));border-color:color-mix(in srgb,var(--accent) 35%,var(--line));color:var(--accent)}.sbox-go:hover{background:color-mix(in srgb,var(--accent) 18%,var(--card));border-color:var(--accent)}
@media(max-width:640px){.sbox-go-t{display:none}.sbox-go{padding-left:.65rem;padding-right:.65rem}}
/* 푸터 상업적 사용 금지 안내 (2026-10-11) */
.ft-nocomm{margin:.4rem 0;font-size:.8rem;line-height:1.5}.ft-nocomm b{color:var(--text)}

/* 랭킹 배지 링크 (/schools 정렬 줄 옆, 2026-10-11 운영자: "뱃지 스타일로 잘 보이게", "한줄에", "candidate 와 다른 색") — 남색: 학교 배지(주황·초록·파랑·금색)와 겹치지 않게 */
.seg-wrap:has(.rank-badge){flex-wrap:nowrap}
.seg-wrap:has(.rank-badge) .seg{flex:0 0 auto}
.rank-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .75rem;border-radius:999px;font-size:.82rem;font-weight:750;text-decoration:none;
  background:#4f46e5;color:#fff;border:1px solid #4338ca;white-space:nowrap;min-width:0;flex:0 1 auto;overflow:hidden;box-shadow:0 1px 2px rgba(15,23,42,.08)}
.rank-badge span{font-weight:550;opacity:.85;overflow:hidden;text-overflow:ellipsis;min-width:0}
.rank-badge:hover{background:#4338ca;color:#fff;text-decoration:none}
@media (max-width:640px){.rank-badge span{display:none}.seg-wrap:has(.rank-badge) .seg-l{display:none}}
/* 랭킹 탭 — 각각 알약 칩, 줄바꿈되어도 깨지지 않는다 (schools/_rank_labels.html rank_tabs) */
.rk-tabs{display:flex;flex-wrap:wrap;gap:.35rem;margin:.4rem 0 .7rem}
.rk-tabs a{display:inline-flex;align-items:center;gap:.25rem;padding:.32rem .75rem;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--text);font-size:.84rem;font-weight:600;text-decoration:none;white-space:nowrap}
.rk-tabs a:hover{border-color:#4f46e5;color:#4f46e5;text-decoration:none}
.rk-tabs a.on{background:#4f46e5;border-color:#4f46e5;color:#fff}
/* /schools 필터 — 모바일은 접힌 카드 하나, PC는 펼친 사이드바 (schools/list.html .sch-fwrap) */
.sch-layout>*{min-width:0}
.sch-fsum{list-style:none;display:none}
.sch-fsum::-webkit-details-marker{display:none}
@media(max-width:860px){
  .sch-fwrap{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}
  .sch-fsum{display:flex;align-items:center;gap:.45rem;padding:.7rem 1rem;font-weight:700;font-size:.92rem;cursor:pointer}
  .sch-fsum .sch-fsel{font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
  .sch-fsum::after{content:"";width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .15s;margin-left:auto;flex:0 0 auto}
  .sch-fwrap[open] .sch-fsum::after{transform:rotate(-135deg)}
  .sch-fwrap .sch-filters{border:0;box-shadow:none;border-top:1px solid var(--line);border-radius:0 0 14px 14px}
  .seg-wrap:has(.rank-badge){flex-wrap:wrap}
}
/* 휴대폰: 학교 카드는 세로 배치 — 하단 바(공유·조회수)가 오른쪽 밖으로 밀려나지 않게 (2026-10-11) */
@media(max-width:860px){.sch-row>.cbar{flex:none;width:100%}}
/* 넓은 검색창 — /news · /news/headlines (2026-10-11 운영자: "검색창 길이를 넓게") */
.prov-search.sbox-wide{max-width:none}

/* 학교 페이지 'Page views' 버튼 설명 — 조회수 팝업(.pb-ai-pop)과 같은 모양 (2026-10-14 운영자) */
.sv-tip{position:relative;display:inline-flex}
.sv-tip-pop{display:none;position:absolute;left:0;top:calc(100% + 6px);z-index:30;width:270px;white-space:normal;background:var(--card);color:var(--text);border:1px solid var(--line);border-radius:12px;padding:.7rem .8rem;box-shadow:0 8px 24px rgba(0,0,0,.14);font-size:.8rem;font-weight:500;text-align:left}
.sv-tip-pop::before{content:"";position:absolute;left:0;right:0;top:-10px;height:10px}
.sv-tip:hover .sv-tip-pop,.sv-tip:focus-within .sv-tip-pop{display:block}
.sv-tip-pop b{display:block;margin-bottom:.35rem}.sv-tip-pop .r{display:flex;align-items:center;gap:.45rem;padding:.25rem 0;border-top:1px solid var(--line)}.sv-tip-pop .r svg{flex:none;color:var(--accent)}
.sv-tip-pop small{display:block;margin-top:.45rem;font-size:.72rem;color:var(--muted);line-height:1.35}
@media (hover:none){.sv-tip:hover .sv-tip-pop{display:none}}

/* 주소의 #앵커로 이동할 때 위의 고정 메뉴에 가리지 않게 — 사이트 전체 (2026-10-15 운영자: "위가 짤려서 보이네") */
html{scroll-padding-top:96px}
/* 입력 양식 공통 — 떠 있는 저장 단추 + 임시 저장 복원 막대 (partials/draft.html, 2026-10-15) */
.savebar{position:sticky;bottom:.8rem;z-index:5;display:flex;justify-content:flex-start;align-items:center;gap:.8rem;margin:.8rem 0 1rem;pointer-events:none}.savebar>*{pointer-events:auto}
.savebar .tiny{background:color-mix(in srgb,var(--card) 94%,transparent);backdrop-filter:blur(6px);border:1px solid var(--line);border-radius:999px;padding:.35rem .8rem}
.savebar .btn{min-width:140px;box-shadow:0 6px 18px rgba(0,0,0,.14)}
.draft-bar{margin:0 0 .8rem;display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}.draft-bar[hidden]{display:none}
/* 공유 막대 맨 앞 — 어느 페이지에서든 대화 화면으로 (2026-10-15 운영자) */
.pb-ask{flex:none;display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .8rem;border-radius:999px;background:var(--accent);color:#fff!important;font-size:.82rem;font-weight:700;text-decoration:none;white-space:nowrap}
.pb-ask:hover{filter:brightness(1.08);text-decoration:none}
@media(max-width:640px){.pb-ask{order:-1}}
/* '물어보기' 단추 — 형광 빛이 테두리를 천천히 돈다 (2026-10-15 운영자: "움직이게 눈에 딱 띄는거지") */
@property --pb-a{syntax:"<angle>";initial-value:0deg;inherits:false}
.pb-ask{position:relative;isolation:isolate;border:0;padding:.38rem .85rem;background:transparent}
.pb-ask::before{content:"";position:absolute;inset:0;border-radius:inherit;z-index:-2;
  background:conic-gradient(from var(--pb-a),#39ff14,#00f0ff,#ff2bd6,#fff200,#39ff14);animation:pb-spin 3.2s linear infinite}
.pb-ask::after{content:"";position:absolute;inset:2px;border-radius:inherit;z-index:-1;background:var(--accent)}
@keyframes pb-spin{to{--pb-a:360deg}}
@media (prefers-reduced-motion:reduce){.pb-ask::before{animation:none}}
