:root{--bg:#f4f5f7;--card:#fff;--text:#1a1d24;--muted:#6b7280;--line:#e5e7eb;--accent:#c2410c;--accent-2:#0f2a4a;--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:#c2410c;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:.5em;font-weight:700;color:#fff;vertical-align:top;position:relative;top:-.15em}
.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}}
/* 메뉴는 스크롤하지 않는다 — 묶음이 한 번에 하나만 열리므로(app.js) 창에 들어간다.
   창 자체가 메뉴보다 짧은 예외 상황에서만, 손이 닿지 않는 항목이 없도록 스크롤을 허용한다. */
@media(min-width:861px) and (max-height:640px){.side{max-height:calc(100vh - var(--hdr-h,64px) - 24px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.side::-webkit-scrollbar{width:6px}.side::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}.side::-webkit-scrollbar-track{background:transparent}}
.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 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(--accent);color:#fff;border-radius:99px;font-size:.68rem;padding:.05rem .45rem}
/* 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;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}

.plan{display:flex;flex-direction:column}.plan .price{font-size:1.6rem;font-weight:800;margin:.4rem 0}.plan ul{padding-left:1.1rem;margin:.5rem 0 1rem;font-size:.9rem;color:var(--muted)}.plan .btn{margin-top:auto;justify-content:center}
.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:26px !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}

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:34px}}
/* logo: never shrink or distort — intrinsic ratio at a fixed height */
.brand{flex:0 0 auto}.brand img{height:40px;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}
/* 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:32px !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}
}
/* card meta: share + views under thumbnail cards (kept outside the card link) */

/* 공유 행은 항상 한 줄 — 카드가 좁아지면 줄바꿈 대신 아이콘이 작아진다 */
@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}}
/* 사이트 전체 검색창 (partials/search_form.html) */

/* 브레드크럼 — 모든 공개 페이지 상단 */
.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}

/* 일정 카드: 긴 단어·태그가 카드 밖으로 나가지 않게 */

/* 일정: 뱃지는 날짜 아래, 무료 사용자 본문 2줄 */

/* 뱃지: 진한 배경 + 검정 굵은 글씨 (Louis, 2026-09-22) */

/* 뱃지 글자 수직 정렬 */

/* 설명 열(.d)만 글자가 작아 vertical-align:top 으로도 첫 줄이 어긋났다 — line-height 를 통일한다 */

/* 구독 유도 문구 — 눈에 들어오게 진하게 */

/* ══ 개선 순위 (/improving) ═══════════════════════════════════════════════ */

/* ── 순위 카드 ── */

/* 번호 — 디스플레이 서체의 큰 숫자. 1~3위는 채우고, 그 아래는 윤곽선 */

/* ── 점수 ── */

/* ── 잠긴 행 ── */

/* ── 전환 유도 ── */

/* ── 계산 방법 ── */

/* ── 개선 순위: 탭 · 항목별 1위 · 페이지 · FAQ ── */

/* ── 문의 (/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}
