@property --a{syntax:"<angle>";inherits:false;initial-value:0deg}
:root{--bg:#f6f4ec;--ink:#18271f;--sub:#66746b;--card:#fff;--line:#e4e0d1;--b1:#8bb35e;--b2:#1f4d38;--acc:#3f7a45;--panel:#1f4d38;--tabbg:#ece8d9;--sh:0 10px 24px rgba(20,40,30,.14);box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
:root[data-theme=dark]{--bg:#0f1a14;--ink:#eaf1ec;--sub:#9bb0a2;--card:#16231b;--line:#2a3b31;--b1:#7fb069;--b2:#3e7d58;--acc:#a6d58f;--panel:#1b3a2b;--tabbg:#1c2b23;--sh:0 10px 24px rgba(0,0,0,.55)}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f1a14;--ink:#eaf1ec;--sub:#9bb0a2;--card:#16231b;--line:#2a3b31;--b1:#7fb069;--b2:#3e7d58;--acc:#a6d58f;--panel:#1b3a2b;--tabbg:#1c2b23;--sh:0 10px 24px rgba(0,0,0,.55)}}
*{box-sizing:border-box}html,body{margin:0}
body{background:var(--bg);color:var(--ink);font-family:"Pretendard","Apple SD Gothic Neo","Malgun Gothic",sans-serif;line-height:1.75;transition:background .25s,color .25s}
a{color:inherit}
.top{display:flex;align-items:center;gap:12px;max-width:1100px;margin:0 auto;padding:14px 16px}
.brand{margin-right:auto;font-size:1.5rem;font-weight:800;text-decoration:none}
.search{position:relative;display:flex}
.search input{width:min(260px,46vw);padding:9px 12px;font:inherit;font-size:.95rem;color:var(--ink);background:var(--card);border:3px solid var(--b2);border-right:0;border-radius:8px 0 0 8px;outline:0}
.search .go{width:44px;border:3px solid var(--b2);border-radius:0 8px 8px 0;background:var(--b2);color:#fff;display:grid;place-items:center;cursor:pointer}
#sres{position:absolute;top:100%;left:0;right:0;z-index:40;margin:6px 0 0;padding:6px;list-style:none;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh);display:none}
#sres.show{display:block}#sres a{display:block;padding:8px 10px;border-radius:8px;text-decoration:none;font-size:.9rem}#sres a:hover{background:var(--line)}#sres small{color:var(--sub);margin-left:6px}
.mode{width:42px;height:42px;border-radius:50%;border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:1.15rem;cursor:pointer}
.bar{position:relative;z-index:20;background:linear-gradient(180deg,var(--b1),var(--b2));box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}
.topics{display:flex;flex-wrap:wrap;max-width:1100px;margin:0 auto;padding:0 16px;list-style:none}
.topic>button{padding:16px 28px;border:0;background:none;color:#fff;font:900 1.2rem inherit;font-family:inherit;letter-spacing:-.01em;text-shadow:0 1px 3px rgba(0,0,0,.3);cursor:pointer;box-shadow:inset 1px 0 rgba(255,255,255,.3)}
.topic:first-child>button{box-shadow:none}
.topic.open>button,.topic>button:focus-visible{background:rgba(255,255,255,.2);outline:0}
@media(hover:hover){.topic:hover>button{background:rgba(255,255,255,.2)}.topic:hover .panel{display:grid}}
@media(max-width:640px){.topic{flex:1 1 33%}.topic>button{width:100%;padding:14px 6px;font-size:1.05rem}}
.panel{display:none;position:absolute;left:0;right:0;top:100%;margin:0;padding:18px max(16px,calc((100% - 1100px)/2 + 16px));list-style:none;background:var(--card);box-shadow:var(--sh);border-radius:0 0 16px 16px;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}
.topic.open .panel{display:grid}
.tool{--rb:conic-gradient(from calc(var(--s) + var(--a)),hsl(var(--h) 90% 58%),hsl(calc(var(--h) + 60) 90% 58%),hsl(calc(var(--h) + 120) 90% 58%),hsl(calc(var(--h) + 180) 90% 58%),hsl(calc(var(--h) + 240) 90% 58%),hsl(calc(var(--h) + 300) 90% 58%),hsl(var(--h) 90% 58%));display:block;height:100%;padding:12px 14px;border:3px solid transparent;border-radius:14px;text-decoration:none;color:var(--ink);background:linear-gradient(var(--card),var(--card)) padding-box,var(--rb) border-box;transition:transform .2s,box-shadow .2s}
.tool b{display:block}.tool small{display:block;font-size:.82rem;color:var(--sub)}
.tool:hover,.tool:focus-visible{transform:translateY(-4px);box-shadow:var(--sh);animation:spin var(--d) linear infinite;outline:0}
@keyframes spin{to{--a:360deg}}
@media(prefers-reduced-motion:reduce){.tool:hover,.tool:focus-visible{animation:none}}
main{max-width:1100px;margin:0 auto;padding:0 16px 48px}
h1{font-size:1.8rem;line-height:1.3;margin:30px 0 8px}h2{font-size:1.25rem;margin:30px 0 12px}h3{font-size:1.05rem;margin:20px 0 4px}
.crumb{margin:20px 0 0;font-size:.85rem;color:var(--sub)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin:0;padding:0;list-style:none}
.ad{margin:32px 0;min-height:120px;border:1px dashed var(--line);display:grid;place-items:center;color:var(--sub);font-size:.85rem;text-align:center}
.info,article{max-width:72ch}.info{max-width:none;margin-top:40px;padding:24px;border:1px solid var(--line);border-radius:16px;background:var(--card);color:var(--sub);font-size:.95rem}
.info h2{color:var(--ink);margin-top:0}
.tool-box{margin-top:16px;padding:24px 16px;border:3px solid var(--b2);border-radius:16px;text-align:center;background:var(--card)}
.tool-box.done{border-color:#f5b400}
.clock{font-size:clamp(3rem,14vw,5.5rem);font-weight:800;font-variant-numeric:tabular-nums}
.row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:14px}
.row input,.eye-box select{padding:8px;font:inherit;font-size:1.05rem;color:var(--ink);background:var(--card);border:2px solid var(--line);border-radius:8px}
.row input{width:84px;text-align:center}
.b{padding:10px 20px;font:700 1rem inherit;font-family:inherit;color:var(--ink);border:2px solid var(--ink);border-radius:10px;background:var(--card);cursor:pointer;transition:transform .15s}
.b:hover,.b:focus-visible{transform:translateY(-3px);outline:0}.b.go{background:var(--b2);border-color:var(--b2);color:#fff}
.eye-box{margin-top:16px;text-align:center}
.eye-box .viewport{height:480px;border:3px solid var(--line);border-radius:24px;background:var(--card);display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;box-shadow:var(--sh);overflow:hidden}
.eye-box .target-circle{width:120px;height:120px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#10b981,#047857);box-shadow:0 10px 25px rgba(16,185,129,.4);display:flex;justify-content:center;align-items:center;user-select:none}
.eye-box .center-dot{font-size:16px;font-weight:700;color:#000;white-space:nowrap}
.eye-box .status-text{position:absolute;top:24px;font-size:24px;font-weight:700}
.eye-box .count-text{position:absolute;bottom:24px;font-size:18px;font-weight:600;color:var(--sub)}
.eye-box .controls{display:flex;flex-direction:column;gap:16px;align-items:center;margin-top:24px}
.eye-box .btn-start{width:240px;height:60px;background:#2563eb;color:#fff;border:0;border-radius:30px;font:700 20px inherit;font-family:inherit;cursor:pointer;box-shadow:0 4px 14px rgba(37,99,235,.35);transition:transform .2s}
.eye-box .btn-start:hover{transform:translateY(-2px)}
.eye-box .settings{display:flex;flex-wrap:wrap;gap:12px 16px;justify-content:center;align-items:center;color:var(--sub)}
@media(max-width:600px){.eye-box .target-circle{width:80px;height:80px}.eye-box .viewport{height:420px}}
footer{margin-top:56px;padding:24px 0;border-top:1px solid var(--line);font-size:.9rem;color:var(--sub)}
.wrap{max-width:1100px;margin:0 auto;padding:0 16px}
.calc{text-align:left}
.fld{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.fld label{display:grid;gap:4px;font-size:.9rem;color:var(--sub)}
.fld input,.fld select{width:100%;padding:10px;font:inherit;font-size:1.05rem;color:var(--ink);background:var(--bg);border:2px solid var(--line);border-radius:8px}
.fld input:focus,.fld select:focus{border-color:var(--b2);outline:0}
.res{margin-top:16px;display:grid;gap:8px}
.res div{display:flex;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px}
.res .big{font-weight:800;font-size:1.15rem;border:2px solid var(--b2)}
.note{margin:12px 0 0;font-size:.85rem;color:var(--sub)}
.legal{max-width:72ch}
.cities{margin-top:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.cc{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:var(--bg)}.cc.base{border:2px solid var(--b2)}
.cc .t{font-size:1.5rem;font-weight:800;font-variant-numeric:tabular-nums}.cc small{display:block;color:var(--sub)}
.fld label.ck{display:flex;align-items:center;gap:8px;align-self:end;padding-bottom:10px}
.fld input[type=checkbox]{width:auto}.fld input[type=range]{padding:0}.fld input[type=color]{padding:2px;height:44px}
.fld label.wide{grid-column:1/-1}.fld textarea{width:100%;padding:10px;font:inherit;color:var(--ink);background:var(--bg);border:2px solid var(--line);border-radius:8px}
.pv{display:block;margin:16px auto;max-width:100%;height:auto;border:1px solid var(--line);border-radius:12px;background:#fff}
.bar-s{height:10px;border-radius:6px;background:var(--line);overflow:hidden;margin-top:8px}.bar-s i{display:block;height:100%;background:var(--b2);width:0;transition:width .2s}
.err{color:#d93025;min-height:1.4em;margin:8px 0 0;font-size:.9rem}
.bcw{overflow-x:auto;text-align:center;margin-top:12px}
.fld textarea.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.9rem}
.lst{display:grid;gap:8px;margin-top:12px}
.lst>div{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px}
.lst>div>span{flex:1;overflow-wrap:anywhere}.lst .b{padding:4px 10px;font-size:.9rem}
.lst a{font-weight:700;color:var(--b2)}
hr.sp{border:0;border-top:1px solid var(--line);margin:22px 0}
:root{--mapbg:#eef7f9;--land:#c9d6dc;--lbl:#14202b}
:root[data-theme=dark]{--mapbg:#0b1220;--land:#2a3a52;--lbl:#f8fafc}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--mapbg:#0b1220;--land:#2a3a52;--lbl:#f8fafc}}
.mapw{margin-top:16px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--mapbg)}
.mapw svg{display:block;width:100%;height:auto}
.land{fill:var(--land);stroke:none}
.route{fill:none;stroke:#39ff14;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 3px #39ff14);animation:blink 1.2s ease-in-out infinite}
.pt{fill:#39ff14;stroke:#0b3d12;stroke-width:1.5}
.lb{font:700 14px sans-serif;fill:var(--lbl);paint-order:stroke;stroke:var(--mapbg);stroke-width:3px;stroke-linejoin:round}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.2}}
@media(prefers-reduced-motion:reduce){.route{animation:none}}

.topbar{background:linear-gradient(180deg,var(--b1),var(--b2));box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}
.topbar .top{max-width:1400px}.topbar .brand{color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.3)}
.topbar .search input,.topbar .search .go{border-color:#fff}
.topbar .mode,.menu,.lang{border:1px solid rgba(255,255,255,.55);background:rgba(255,255,255,.18);color:#fff}
.lang{display:inline-flex;align-items:center;height:42px;padding:0 14px;border-radius:21px;font-weight:700;text-decoration:none;white-space:nowrap}
.menu{display:none;width:42px;height:42px;border-radius:12px;font-size:1.3rem;cursor:pointer}
.shell{display:grid;grid-template-columns:280px minmax(0,1fr);max-width:1400px;margin:0 auto;align-items:start}
.side{position:sticky;top:0;max-height:100vh;overflow:auto;padding:14px 10px 28px;border-right:1px solid var(--line);background:var(--card)}
.side h2{font-size:.82rem;color:var(--sub);margin:4px 10px 10px;font-weight:700}
.side details{margin-bottom:6px}
.side summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:14px;font-weight:800}
.side summary::-webkit-details-marker{display:none}.side summary:hover{background:var(--line)}
.side summary .n{margin-left:auto;font-weight:600;font-size:.78rem;color:var(--sub);background:var(--line);border-radius:10px;padding:0 8px}
.side summary::after{content:"⌄";color:var(--sub);transition:transform .2s}.side details[open]>summary::after{transform:rotate(180deg)}
.si{display:flex;align-items:center;gap:10px;padding:6px 10px 6px 12px;margin-left:18px;border-left:2px solid var(--line);border-radius:0 12px 12px 0;text-decoration:none;font-size:.93rem}
.si:hover{background:var(--line)}.si[aria-current=page]{background:linear-gradient(90deg,rgba(31,77,56,.2),transparent);border-left-color:var(--b1);font-weight:800}
.ic{display:grid;place-items:center;width:30px;height:30px;border-radius:11px;font-size:1.05rem;flex:none;background:hsl(var(--h) 90% 90%)}
.ic.ci{width:34px;height:34px;font-size:1.2rem;border-radius:13px}
:root[data-theme=dark] .ic{background:hsl(var(--h) 35% 27%)}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .ic{background:hsl(var(--h) 35% 27%)}}
.si:hover .ic,.side summary:hover .ic{animation:hop .55s}
@keyframes hop{30%{transform:translateY(-5px) rotate(-9deg)}60%{transform:translateY(0) rotate(7deg)}100%{transform:none}}
.ei{display:inline-block;margin-right:2px}.tool:hover .ei{animation:hop .55s}
.scrim{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:50}.scrim.show{display:block}
.content{min-width:0}
@media(max-width:900px){.shell{display:block}.menu{display:block}.side{position:fixed;z-index:60;left:0;top:0;bottom:0;width:min(310px,86vw);max-height:none;transform:translateX(-104%);transition:transform .25s;box-shadow:var(--sh)}.side.open{transform:none}}
@media(max-width:560px){.search input{width:min(150px,30vw)}.lang span:not(.gl){display:none}.lang{padding:0 11px}.top{gap:8px;padding:12px 10px}.brand{font-size:1.1rem;white-space:nowrap}.search{flex:1 1 0;min-width:0}.search input{width:100%;min-width:0}}
@media(prefers-reduced-motion:reduce){.si:hover .ic,.tool:hover .ei,.side summary:hover .ic{animation:none}}
.tbl{width:100%;border-collapse:collapse;font-size:.9rem;margin-top:12px}.tbl th,.tbl td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:center}
.tbl .ok{background:rgba(57,255,20,.25);font-weight:800}.tbl .pt{background:rgba(255,200,0,.2)}.tblw{overflow-x:auto}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.chip{padding:6px 12px;border-radius:999px;font-weight:800;font-size:.9rem}.chip.p{background:#d9f7e3;color:#0b6b2c}.chip.f{background:#fde0e0;color:#a31515}
:root[data-theme=dark] .chip.p{background:#12452a;color:#8ff0b5}:root[data-theme=dark] .chip.f{background:#4a1a1a;color:#ffb3b3}
.sample{margin-top:12px;padding:18px;border-radius:12px;border:1px solid var(--line);font-size:1.15rem}
.snd{display:grid;gap:10px;margin-top:12px}.snd label{display:grid;grid-template-columns:130px 1fr 40px;gap:10px;align-items:center;font-size:.95rem}
.snd input[type=range]{width:100%}
/* 상단 주제 메뉴(호버·모바일 탭) */
.topbar+.bar{background:var(--b2);box-shadow:inset 0 1px 0 rgba(255,255,255,.22)}
.bar .topics{max-width:1400px;padding:0 12px}
.bar .topic{position:static}
.bar .topic>button{padding:12px 24px;font-size:1.05rem}
.bar .panel{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));padding:16px max(16px,calc((100% - 1400px)/2 + 16px))}
.bar .panel a{display:block;padding:8px 10px;border-radius:10px;text-decoration:none;font-weight:700;font-size:.95rem}
.bar .panel a:hover,.bar .panel a:focus-visible{background:var(--line);outline:0}
@media(max-width:640px){.bar .topic>button{padding:11px 4px;font-size:.95rem}}
/* tool:monitor-test */
.mtgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin:14px 0}
.mtgrid .b{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:14px 16px;text-align:left;font-size:1rem;font-weight:800}
.mtgrid .b small{font-weight:600;font-size:.82rem;opacity:.8}
#stage{position:fixed;inset:0;z-index:99999;background:#000;cursor:none;touch-action:manipulation}
#stage[hidden]{display:none}
#stage canvas{position:absolute;inset:0;width:100%;height:100%;display:none}
#stage.mv canvas{display:block}
#hint{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);padding:8px 16px;border-radius:999px;background:rgba(20,20,20,.78);color:#fff;font:600 14px/1.4 system-ui,sans-serif;white-space:nowrap;max-width:94vw;overflow:hidden;text-overflow:ellipsis;pointer-events:none;transition:opacity .4s}
#hint.off{opacity:0}
#info{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:8px;margin-top:6px}
/* tool:satellite-tracker */
.satctl{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin-bottom:10px}
.satctl .sk,.satobs .sk{display:inline-flex;align-items:center;gap:6px;font-weight:700;font-size:.92rem;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:var(--card,transparent)}
.satctl select,.satobs select{font:inherit;padding:2px 6px;border-radius:8px}
.satctl .b,.satobs .b{padding:7px 12px;font-size:.9rem}
.satmap{position:relative;border-radius:14px;overflow:hidden;background:#070d1c;line-height:0}
.satmap canvas{display:block;width:100%;cursor:crosshair}
#tip{position:absolute;pointer-events:none;background:rgba(0,0,0,.8);color:#fff;font:600 12px/1.4 sans-serif;padding:4px 8px;border-radius:8px;white-space:nowrap;z-index:2}
#tip[hidden]{display:none}
.satstat{margin:8px 2px;font-size:.88rem;opacity:.85;line-height:1.5}
.satstat .er{color:#d6336c;font-weight:700}
#sinfo{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px;margin-top:6px}
.satobs{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin:12px 0 6px}
/* tool:color-vision-test */
.cvh{font-weight:800;font-size:1.1rem;margin:4px 0 10px}.cvh2{margin-top:26px;padding-top:18px;border-top:1px dashed var(--line)}
.cvlist{margin:8px 0 14px 18px;line-height:1.6}
#cvstage{text-align:center}#cvstage canvas{width:min(360px,100%);height:auto;border-radius:50%;box-shadow:0 2px 14px rgba(0,0,0,.15);background:#fff}
.cvprog{font-weight:700;margin-bottom:8px;font-size:.95rem}
.cvin{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:8px 0}
.cvin input{width:92px;font:800 1.5rem/1 inherit;text-align:center;padding:8px;border:2px solid var(--line);border-radius:12px}
.cvbox{border-radius:14px;padding:14px 16px;margin:10px 0;line-height:1.6}.cvbox.good{background:rgba(67,160,71,.14);border:1px solid rgba(67,160,71,.5)}.cvbox.warn{background:rgba(251,140,0,.14);border:1px solid rgba(251,140,0,.5)}
.cvbox p{margin:6px 0 0}.cvdis{font-size:.88rem;opacity:.85}
.cvsim{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin:8px 0}
.cvsim .sk{display:inline-flex;align-items:center;gap:6px;font-weight:700;font-size:.92rem;padding:6px 10px;border:1px solid var(--line);border-radius:999px}
.cvsim select{font:inherit;padding:2px 6px;border-radius:8px}.cvfile{cursor:pointer;display:inline-block;font-size:inherit}
.cvpair{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}.cvpair figure{margin:0}.cvpair canvas{width:100%;height:auto;border-radius:10px;border:1px solid var(--line);display:block}
.cvpair figcaption{text-align:center;font-weight:700;font-size:.9rem;margin-top:4px}
@media(max-width:640px){.cvpair{grid-template-columns:1fr}}
/* ===== CSS 생성기 (css-generator) ===== */
.cg-tabs{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-bottom:14px}
.cg-tabs .b[aria-pressed=true]{background:var(--b2);border-color:var(--b2);color:#fff}
.cg-layers{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin:0 0 12px}
.cg-layers .b{padding:6px 12px;font-size:.9rem}.cg-layers .b[aria-pressed=true]{background:var(--ink);color:var(--bg)}
.cg-stage{position:relative;overflow:hidden;border-radius:14px;padding:32px 16px;display:grid;place-items:center;min-height:260px;margin:14px 0;border:1px solid var(--line)}
.cg-stage.glass{background:linear-gradient(135deg,#22b8b0 0%,#6a5af9 52%,#ff7a59 100%)}
.cg-stage.glass::before,.cg-stage.glass::after{content:"";position:absolute;border-radius:50%;pointer-events:none}
.cg-stage.glass::before{width:150px;height:150px;left:12%;top:14%;background:#ffd166}
.cg-stage.glass::after{width:120px;height:120px;right:14%;bottom:12%;background:#ef476f}
.cg-box{position:relative;z-index:1;width:min(280px,82%);height:160px;display:grid;place-items:center;font-weight:800;text-align:center;padding:8px}
.cg-out{margin-top:12px;text-align:left}
.cg-out pre{margin:0;padding:12px;white-space:pre-wrap;word-break:break-all;font:.88rem/1.55 ui-monospace,Menlo,Consolas,monospace;color:var(--ink);background:var(--bg);border:2px solid var(--line);border-radius:10px}
.cg-out .row{margin-top:10px}
.fld .cg-val{font-weight:700;color:var(--ink)}
/* ===== 타자 측정기 (typing-test) ===== */
.ty-target{position:relative;text-align:left;font-size:1.2rem;line-height:2;height:9em;overflow:hidden;padding:12px 14px;border:2px solid var(--line);border-radius:12px;background:var(--bg);white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere}
.ty-target span{border-radius:3px}.ty-target .ok{color:#15803d}.ty-target .bad{color:#dc2626;background:rgba(220,38,38,.14);text-decoration:underline}
.ty-target .cur{background:rgba(31,77,56,.38)}.ty-target .rest{color:var(--sub)}
:root[data-theme=dark] .ty-target .ok{color:#4ade80}:root[data-theme=dark] .ty-target .bad{color:#f87171}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .ty-target .ok{color:#4ade80}:root:not([data-theme=light]) .ty-target .bad{color:#f87171}}
.ty-in{display:block;width:100%;margin-top:10px;padding:12px;font:inherit;font-size:1.15rem;line-height:1.6;color:var(--ink);background:var(--bg);border:2px solid var(--line);border-radius:10px;resize:none}
.ty-in:focus{border-color:var(--b2);outline:0}
.ty-live{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin-top:10px;font-weight:700;font-variant-numeric:tabular-nums}
.ty-live span{color:var(--sub);font-weight:600}
.ty-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;margin-top:14px;text-align:center}
.ty-stats div{padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.ty-stats b{display:block;font-size:1.5rem;font-variant-numeric:tabular-nums}.ty-stats small{color:var(--sub)}
.ty-chart{display:block;width:100%;height:auto;margin-top:14px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.ty-hist{width:100%;margin-top:14px;border-collapse:collapse;font-size:.9rem;font-variant-numeric:tabular-nums}
.ty-hist th,.ty-hist td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:center}.ty-hist th{color:var(--sub);font-weight:600}
/* ===== 조기상환 계산기 (loan-prepay) ===== */
.lp-cmp{display:grid;gap:8px;margin-top:14px;text-align:left}.lp-cmp small{display:flex;justify-content:space-between;color:var(--sub);font-variant-numeric:tabular-nums}
.lp-cmp .bar-s{margin-top:2px;height:14px}.lp-cmp .bar-s i.g{background:#16a34a}
.lp-msg{margin-top:12px;padding:10px 12px;border-radius:10px;border:1px solid var(--line);text-align:left;font-size:.92rem}
.lp-msg.warn{border-color:#f59e0b;background:rgba(245,158,11,.12)}.lp-msg.good{border-color:#16a34a;background:rgba(22,163,74,.12)}
/* ===== 뽀모도로 (pomodoro-bgm) ===== */
.pm-phase{margin:0;font-weight:800;font-size:1.1rem;color:var(--b2)}
.pm-short .pm-phase,.pm-long .pm-phase{color:#16a34a}
.pm-bar{max-width:420px;margin:6px auto 0}.pm-bar i{transition:width .3s linear}
.pm-short .pm-bar i,.pm-long .pm-bar i{background:#16a34a}
.pm-dots{margin:10px 0 0;font-size:1.3rem;letter-spacing:.1em;color:var(--b2)}
/* ===== 음식 칼로리 (food-calorie) ===== */
.fc-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:12px;max-height:320px;overflow-y:auto;padding:2px}
.fc-item{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 10px;text-align:left;font:inherit;font-size:.9rem;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:10px;cursor:pointer}
.fc-item:hover,.fc-item:focus-visible{border-color:var(--b2);outline:0}.fc-item small{color:var(--sub);font-size:.75rem}.fc-item span{font-weight:700;color:var(--b2);font-size:.85rem}
.fc-row{display:grid;grid-template-columns:1fr auto auto auto;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:10px;margin-bottom:6px}
.fc-nm small{display:block;color:var(--sub);font-size:.78rem}.fc-q{display:flex;align-items:center;gap:6px}.fc-q .b{padding:2px 10px;font-size:1rem}.fc-q span{min-width:2ch;text-align:center;font-weight:700}
.fc-sub{min-width:84px;text-align:right;font-variant-numeric:tabular-nums}.fc-row>.b{padding:2px 8px}
@media(max-width:520px){.fc-row{grid-template-columns:1fr auto;}.fc-sub{text-align:left}}
/* ===== BMI (bmi-calculator) ===== */
.bm-wrap{position:relative;margin-top:34px}
.bm-scale{display:flex;height:16px;border-radius:8px;overflow:hidden}.bm-scale i{display:block;height:100%}
.bm-mark{position:absolute;top:-34px;transform:translateX(-50%);font-weight:800;font-size:.85rem;text-align:center;color:var(--ink)}
.bm-mark::after{content:"▼";display:block;line-height:1;font-size:.9rem}
.bm-lab{display:flex;margin-top:4px;font-size:.72rem;color:var(--sub)}.bm-lab span{text-align:center;overflow:hidden;white-space:nowrap;text-overflow:clip}
/* ===== MBTI (mbti-test) ===== */
.mb-prog{height:8px;border-radius:8px;background:var(--line);overflow:hidden;margin:8px 0 6px}.mb-prog i{display:block;height:100%;width:0;background:var(--b2);transition:width .25s}
.mb-q{display:grid;place-items:center;min-height:5.2em;margin:10px 0;padding:6px 4px;font-size:1.25rem;font-weight:700;line-height:1.55;word-break:keep-all}
.mb-lk{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.mb-lk button{padding:12px 4px;font:inherit;font-size:.85rem;line-height:1.3;color:var(--ink);background:var(--bg);border:2px solid var(--line);border-radius:10px;cursor:pointer}
.mb-lk button:hover,.mb-lk button:focus-visible,.mb-lk button[aria-pressed=true]{border-color:var(--b2);outline:0;background:rgba(31,77,56,.14)}
.mb-nav{margin-top:14px;text-align:left}.mb-nav .b[disabled]{opacity:.4;cursor:default}
.mb-code{margin:6px 0 0;font-size:3rem;font-weight:900;letter-spacing:.12em;color:var(--b2)}.mb-nick{margin:0 0 12px;font-size:1.2rem;font-weight:700}
.mb-dim{margin:10px 0;text-align:left}.mb-dim .t{display:flex;justify-content:space-between;gap:8px;font-weight:700;font-size:.88rem}
.mb-dim .bar{height:14px;margin-top:4px;border-radius:7px;overflow:hidden;background:var(--line)}.mb-dim .bar i{display:block;height:100%;background:var(--b2)}
.mb-sec{text-align:left;margin-top:12px}.mb-sec h3{margin:10px 0 4px}.mb-sec ul{margin:0;padding-left:20px}
@media(max-width:520px){.mb-lk{gap:4px}.mb-lk button{font-size:.72rem;padding:10px 2px}}
/* ===== 비밀번호 체크기 (password-checker) ===== */
.pw-bar{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.pw-bar i{display:block;height:10px;border-radius:5px;background:var(--line)}
.pw-lab{margin-top:8px;font-size:1.3rem;font-weight:800}
.pw-ck{list-style:none;margin:12px 0;padding:0;text-align:left}.pw-ck li{padding:3px 0}
.pw-ck .ok::before{content:"✓ ";color:#16a34a;font-weight:800}.pw-ck .no::before{content:"✗ ";color:#dc2626;font-weight:800}
.lp-msg ul{margin:6px 0 0;padding-left:20px}

/* ===== 수면 사이클 (sleep-cycle) ===== */
.sc-list{display:grid;gap:8px;margin-top:14px;text-align:left}
.sc-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.sc-row b{font-size:1.5rem;font-variant-numeric:tabular-nums}
.sc-row small{display:block;color:var(--sub);font-size:.82rem}
.sc-row.rec{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
.sc-badge{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:10px;font-size:.72rem;font-weight:700;color:#fff;background:var(--b2);vertical-align:middle}
.sc-cyc{font-weight:700;white-space:nowrap;color:var(--sub);font-size:.9rem}
/* ===== 모스 부호 (morse-code) ===== */
.mc-area{display:grid;gap:10px}
.mc-area textarea{min-height:92px;resize:vertical;font-size:1.05rem}
.mc-area textarea.mono{font-family:ui-monospace,Menlo,Consolas,monospace;letter-spacing:.06em;font-size:1.15rem}
.mc-ctl{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:12px}
.mc-flash{width:84px;height:84px;margin:14px auto 0;border-radius:50%;border:3px solid var(--line);background:var(--bg);transition:background .02s,box-shadow .02s}
.mc-flash.on{background:#fde047;border-color:#facc15;box-shadow:0 0 36px 10px rgba(250,204,21,.65)}
.mc-tbl{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:6px;margin-top:10px;text-align:left;font-size:.9rem}
.mc-tbl div{display:flex;justify-content:space-between;gap:6px;padding:4px 8px;border:1px solid var(--line);border-radius:8px;font-family:ui-monospace,Menlo,Consolas,monospace}
.mc-tbl b{font-family:inherit}
.mc-det{margin-top:14px;text-align:left}.mc-det summary{cursor:pointer;font-weight:700}
.mc-lab{font-size:.9rem;color:var(--sub);margin:4px 0 0;text-align:left}
/* ===== 식물 물주기 (plant-care) ===== */
.pg-list{display:grid;gap:8px;margin-top:14px;text-align:left}
.pg-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.pg-row small{display:block;color:var(--sub);font-size:.8rem}
.pg-row.today{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
.pg-days{font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}
.pg-sum{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-top:14px}
.pg-sum div{padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);text-align:center}
.pg-sum b{display:block;font-size:1.4rem;color:var(--b2)}.pg-sum small{color:var(--sub)}
.pg-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:12px;text-align:center}
.pg-cal span{padding:6px 0;border:1px solid var(--line);border-radius:8px;font-size:.82rem;background:var(--bg)}
.pg-cal span.h{border:0;background:none;color:var(--sub);font-weight:700}
.pg-cal span.w{background:rgba(31,77,56,.28);border-color:var(--b2);font-weight:800}
.pg-cal span.o{opacity:.35}
/* ===== 카드뉴스 (card-news) ===== */
.cn-prev{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:14px}
.cn-prev figure{margin:0;text-align:center}
.cn-prev canvas{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:8px;background:#fff}
.cn-prev figcaption{margin-top:4px;font-size:.8rem;color:var(--sub)}
.cn-prev .b{margin-top:4px;padding:3px 10px;font-size:.82rem}
.cn-ta{min-height:210px;resize:vertical;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.92rem}
.cn-sw{display:flex;gap:8px;flex-wrap:wrap}
.cn-sw button{width:36px;height:36px;border-radius:50%;border:3px solid var(--line);cursor:pointer;padding:0}
.cn-sw button[aria-pressed=true]{border-color:var(--ink);box-shadow:0 0 0 2px var(--bg) inset}
/* ===== 에임 테스트 (aim-test) ===== */
.am-tabs{display:flex;gap:8px;justify-content:center;margin-bottom:12px}
.am-tabs .b[aria-pressed=true]{background:var(--b2);border-color:var(--b2);color:#fff}
.am-pad{position:relative;width:100%;height:340px;border-radius:16px;border:3px solid var(--line);overflow:hidden;user-select:none;-webkit-user-select:none;touch-action:manipulation;cursor:pointer;display:grid;place-items:center;text-align:center;padding:12px;font-size:1.3rem;font-weight:800;color:#fff;background:#2563eb}
.am-pad.wait{background:#dc2626}.am-pad.go{background:#16a34a}.am-pad.early{background:#f59e0b}
.am-pad.aim{background:var(--bg);color:var(--ink);cursor:crosshair}
.am-pad small{display:block;font-size:.9rem;font-weight:500;opacity:.9}
.am-tg{position:absolute;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fb7185,#be123c);border:3px solid #fff;box-shadow:0 2px 8px rgba(0,0,0,.35);cursor:crosshair;padding:0}
.am-tg::after{content:"";position:absolute;inset:34%;border-radius:50%;background:#fff}
.am-hud{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin-top:10px;font-weight:700;font-variant-numeric:tabular-nums}
.am-hud span{color:var(--sub);font-weight:600}
.am-list{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:10px}
.am-list i{font-style:normal;padding:2px 10px;border:1px solid var(--line);border-radius:10px;font-size:.85rem;font-variant-numeric:tabular-nums}
@media(max-width:520px){.am-pad{height:300px}}
/* ===== 택배 박스 (parcel-box) ===== */
.pb-best{margin-top:14px;padding:14px;border:2px solid var(--b2);border-radius:14px;background:rgba(31,77,56,.1);text-align:left}
.pb-best h3{margin:0 0 4px;font-size:1.3rem}.pb-best small{color:var(--sub)}
.pb-tbl{width:100%;margin-top:12px;border-collapse:collapse;font-size:.9rem;font-variant-numeric:tabular-nums;text-align:center}
.pb-tbl th,.pb-tbl td{padding:6px 4px;border-bottom:1px solid var(--line)}.pb-tbl th{color:var(--sub);font-weight:600}
.pb-tbl tr.ok td:first-child{font-weight:800;color:#16a34a}.pb-tbl tr.no{opacity:.45}.pb-tbl tr.pick{background:rgba(31,77,56,.14)}
.pb-wrap{overflow-x:auto}
.pb-tip{margin:10px 0 0;padding:0 0 0 20px;text-align:left}
/* ===== 모자이크 체커 (mosaic-check) ===== */
.mz-wrap{position:relative;display:inline-block;max-width:100%;margin-top:12px;line-height:0}
.mz-wrap canvas{display:block;max-width:100%;height:auto;border:2px solid var(--line);border-radius:8px;cursor:crosshair;touch-action:none;background:repeating-conic-gradient(#e5e7eb 0 25%,#fff 0 50%) 0 0/16px 16px}
.mz-sel{position:absolute;border:2px dashed #f59e0b;background:rgba(245,158,11,.18);pointer-events:none}
.mz-drop{margin-top:12px;padding:26px 12px;border:3px dashed var(--line);border-radius:14px;color:var(--sub);cursor:pointer}
.mz-drop.over{border-color:var(--b2);background:rgba(31,77,56,.1)}
.mz-risk{display:grid;gap:8px;margin-top:14px;text-align:left}
.mz-r{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.mz-r .dot{width:14px;height:14px;border-radius:50%}
.mz-r small{display:block;color:var(--sub);font-size:.82rem}
.mz-r b.v{font-variant-numeric:tabular-nums}
.mz-r.hi .dot{background:#dc2626}.mz-r.md .dot{background:#f59e0b}.mz-r.lo .dot{background:#16a34a}
/* ===== 주파수 톤 (tone-generator) ===== */
.tg-hz{font-size:2.6rem;font-weight:900;font-variant-numeric:tabular-nums;color:var(--b2);margin:4px 0 0;line-height:1.2}
.tg-hz small{font-size:1rem;color:var(--sub);font-weight:600}
.tg-tabs{display:flex;gap:8px;justify-content:center;margin-bottom:12px}
.tg-tabs .b[aria-pressed=true]{background:var(--b2);border-color:var(--b2);color:#fff}
.tg-pre{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:10px}
.tg-pre .b{padding:4px 10px;font-size:.85rem}
.tg-big{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.tg-big .b{padding:16px 6px;font-size:1.1rem}
.tg-warn{margin-top:10px;padding:8px 12px;border:1px solid #f59e0b;border-radius:10px;background:rgba(245,158,11,.12);font-size:.88rem;text-align:left}
.tg-age{margin-top:14px;padding:14px;border:2px solid var(--b2);border-radius:14px;text-align:center}
.tg-age b{font-size:1.6rem;color:var(--b2)}
/* ===== 대본 쉼표 (breath-marker) ===== */
.bk-out{margin-top:12px;padding:14px;border:2px solid var(--line);border-radius:12px;background:var(--bg);text-align:left;line-height:2.1;font-size:1.08rem;min-height:90px;word-break:keep-all;overflow-wrap:anywhere}
.bk-p{border-radius:5px;padding:1px 2px}
.bk-p.on{background:rgba(31,77,56,.42);box-shadow:0 0 0 2px rgba(31,77,56,.42)}
.bk-m{display:inline-block;margin:0 4px;padding:0 6px;border-radius:6px;font-weight:800;font-size:.9rem;color:#fff;background:var(--b2);vertical-align:1px}
.bk-m.s{background:#f59e0b}.bk-m.l{background:#dc2626}.bk-m.n{background:#7c3aed}
.bk-leg{display:flex;gap:10px;flex-wrap:wrap;font-size:.85rem;color:var(--sub);margin-top:8px;justify-content:center}
.bk-sum{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;margin-top:14px}
.bk-sum div{padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);text-align:center}
.bk-sum b{display:block;font-size:1.3rem;color:var(--b2);font-variant-numeric:tabular-nums}.bk-sum small{color:var(--sub)}
.bk-ta{min-height:160px;resize:vertical}
/* ===== 투명 자막 (alpha-subtitle) ===== */
.sb-prev{position:relative;margin-top:12px;border:2px solid var(--line);border-radius:10px;overflow:hidden;background:repeating-conic-gradient(#d1d5db 0 25%,#f3f4f6 0 50%) 0 0/20px 20px;line-height:0}
.sb-prev canvas{display:block;width:100%;height:auto}
.sb-ta{min-height:76px;resize:vertical}
.sb-out{display:grid;gap:8px;margin-top:14px}
.sb-out .b{width:100%;text-align:center}
.sb-st{margin:8px 0 0;font-size:.9rem;color:var(--sub);text-align:left;min-height:1.4em}
/* ===== 관부가세 (import-tax) ===== */
.cu-ver{margin-top:14px;padding:12px 14px;border-radius:12px;border:2px solid var(--line);text-align:left;font-weight:700}
.cu-ver.ok{border-color:#16a34a;background:rgba(22,163,74,.12)}.cu-ver.no{border-color:#f59e0b;background:rgba(245,158,11,.14)}
.cu-ver small{display:block;font-weight:500;color:var(--sub);margin-top:2px}
.cu-bar{margin-top:8px}
/* ===== EXIF 지우개 (exif-remover) ===== */
.ex-drop{margin-top:6px;padding:28px 12px;border:3px dashed var(--line);border-radius:14px;color:var(--sub);cursor:pointer;text-align:center}
.ex-drop.over{border-color:var(--b2);background:rgba(31,77,56,.08)}
.ex-list{display:grid;gap:12px;margin-top:14px;text-align:left}
.ex-card{display:grid;grid-template-columns:96px 1fr;gap:14px;padding:12px;border:1px solid var(--line);border-radius:14px;background:var(--bg)}
.ex-card img{width:96px;height:96px;object-fit:cover;border-radius:10px;background:var(--line)}
.ex-card h3{margin:0 0 4px;font-size:1rem;word-break:break-all}
.ex-card dl{margin:6px 0;display:grid;grid-template-columns:auto 1fr;gap:2px 12px;font-size:.88rem}
.ex-card dt{color:var(--sub)}.ex-card dd{margin:0;word-break:break-all}
.ex-risk{display:inline-block;padding:2px 10px;border-radius:999px;font-size:.78rem;font-weight:800;color:#fff;background:#dc2626}
.ex-risk.ok{background:#16a34a}.ex-risk.mid{background:#f59e0b}
.ex-after{margin-top:8px;padding:8px 10px;border-radius:10px;background:rgba(22,163,74,.12);font-size:.88rem}
.ex-card .b{margin-top:6px}
@media(max-width:480px){.ex-card{grid-template-columns:1fr}.ex-card img{width:100%;height:150px}}
/* ===== 필요량 계산기 (wall-material) ===== */
.wm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:16px;text-align:left}
.wm-card{padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--bg)}
.wm-card h3{margin:0 0 6px;font-size:1.05rem}
.wm-card .big{font-size:1.8rem;font-weight:800;color:var(--b2);font-variant-numeric:tabular-nums}
.wm-card ul{margin:8px 0 0;padding-left:18px;font-size:.88rem;color:var(--sub)}
.wm-sub{margin:14px 0 4px;font-weight:700;text-align:left}
/* ===== 커피 추출 (coffee-ratio) ===== */
.cf-res{margin-top:14px;display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px}
.cf-res div{padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--bg);text-align:center}
.cf-res b{display:block;font-size:1.35rem;color:var(--b2);font-variant-numeric:tabular-nums}.cf-res small{color:var(--sub)}
.cf-steps{margin:14px 0 0;padding-left:20px;text-align:left}.cf-steps li{margin:4px 0}
.cf-tag{display:inline-block;margin:10px 0 0;padding:3px 12px;border-radius:999px;background:rgba(31,77,56,.12);font-weight:700;font-size:.88rem}
/* ===== 픽셀 아트 (pixel-art) ===== */
.px-wrap{margin:12px auto 0;max-width:512px}
.px-wrap canvas{display:block;width:100%;height:auto;aspect-ratio:1;border:2px solid var(--line);border-radius:8px;cursor:crosshair;touch-action:none;image-rendering:pixelated;background:#fff}
.px-pal{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:12px}
.px-pal button{width:32px;height:32px;border-radius:8px;border:2px solid var(--line);cursor:pointer;padding:0}
.px-pal button[aria-pressed=true]{border-color:var(--ink);box-shadow:0 0 0 2px var(--bg) inset}
.px-tools{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:12px}
.px-tools .b[aria-pressed=true]{background:var(--b2);border-color:var(--b2);color:#fff}
.px-tools input[type=color]{width:44px;height:38px;padding:2px;border-radius:10px;border:1px solid var(--line);background:var(--card)}
/* ===== 네온사인 (neon-sign) ===== */
.ns-stage{margin-top:12px;border-radius:14px;overflow:hidden;background:#05060a;line-height:0}
.ns-stage canvas{display:block;width:100%;height:auto}
.ns-stage:fullscreen{display:grid;place-items:center;border-radius:0}
.ns-stage:fullscreen canvas{max-height:100vh;max-width:100vw;width:auto;height:auto}
.ns-sw{display:flex;gap:8px;flex-wrap:wrap}
.ns-sw button{width:34px;height:34px;border-radius:50%;border:3px solid var(--line);cursor:pointer;padding:0}
.ns-sw button[aria-pressed=true]{border-color:var(--ink)}
.ns-tabs{display:flex;gap:8px;justify-content:center}
.ns-tabs .b[aria-pressed=true]{background:var(--b2);border-color:var(--b2);color:#fff}
.ns-warn{margin:10px 0 0;padding:8px 12px;border:1px solid #f59e0b;border-radius:10px;background:rgba(245,158,11,.12);font-size:.88rem;text-align:left}
/* ===== 액정 점검 (screen-smudge) ===== */
.ss-stage{margin-top:12px;height:300px;border-radius:14px;border:2px solid var(--line);cursor:pointer;display:flex;align-items:flex-end;justify-content:center;overflow:hidden;position:relative}
.ss-stage span{margin:0 0 10px;padding:3px 12px;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;font-size:.82rem;font-weight:700}
.ss-stage:fullscreen{height:100vh;border:0;border-radius:0}
.ss-stage:fullscreen span{opacity:.0}
.ss-stage:fullscreen:hover span{opacity:.9}
/* ===== 안전 영역 (safe-zone) ===== */
.sz-wrap{margin:12px auto 0;max-width:420px}
.sz-wrap.wide{max-width:760px}
.sz-wrap canvas{display:block;width:100%;height:auto;border:2px solid var(--line);border-radius:10px;background:#222}
.sz-small{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;align-items:flex-end;margin-top:14px}
.sz-small figure{margin:0;text-align:center;font-size:.78rem;color:var(--sub)}
.sz-small canvas{display:block;border:1px solid var(--line);border-radius:6px;background:#222}
.sz-gray canvas.pv{filter:grayscale(1)}
.sz-note{margin:10px 0 0;padding:8px 12px;border:1px solid #f59e0b;border-radius:10px;background:rgba(245,158,11,.12);font-size:.88rem;text-align:left}
/* ===== 파형 이미지 (waveform-png) ===== */
.wv-drop{margin-top:6px;padding:26px 12px;border:3px dashed var(--line);border-radius:14px;color:var(--sub);cursor:pointer;text-align:center}
.wv-drop.over{border-color:var(--b2);background:rgba(31,77,56,.08)}
.wv-prev{margin-top:14px;border:2px solid var(--line);border-radius:10px;overflow:hidden;line-height:0;background:repeating-conic-gradient(#d1d5db 0 25%,#f3f4f6 0 50%) 0 0/20px 20px}
.wv-prev canvas{display:block;width:100%;height:auto}
.wv-info{margin:8px 0 0;font-size:.88rem;color:var(--sub)}
/* ===== ASCII 아트 (ascii-art) ===== */
.as-out{margin-top:12px;padding:10px;border:2px solid var(--line);border-radius:12px;background:var(--bg);overflow:auto;max-height:520px;text-align:left}
.as-out pre{margin:0;font-family:ui-monospace,Menlo,Consolas,"Courier New",monospace;font-size:7px;line-height:1.05;letter-spacing:0;white-space:pre;color:var(--ink)}
.as-tabs{display:flex;gap:8px;justify-content:center}
.as-tabs .b[aria-pressed=true]{background:var(--b2);border-color:var(--b2);color:#fff}
.as-ta{min-height:70px;resize:vertical}
/* ===== 하프톤 (halftone) ===== */
.ht-drop{margin-top:6px;padding:26px 12px;border:3px dashed var(--line);border-radius:14px;color:var(--sub);cursor:pointer;text-align:center}
.ht-drop.over{border-color:var(--b2);background:rgba(31,77,56,.08)}
.ht-prev{margin-top:14px;border:2px solid var(--line);border-radius:10px;overflow:hidden;line-height:0;background:repeating-conic-gradient(#d1d5db 0 25%,#f3f4f6 0 50%) 0 0/20px 20px}
.ht-prev canvas{display:block;width:100%;height:auto}
.ht-info{margin:8px 0 0;font-size:.88rem;color:var(--sub);min-height:1.3em}
/* ===== 브라 사이즈 (bra-size) ===== */
.br-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-top:14px;text-align:left}
.br-c{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg);text-align:center}
.br-c small{display:block;color:var(--sub);font-size:.78rem}
.br-c b{font-size:1.45rem;font-variant-numeric:tabular-nums}
.br-c.main{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
.br-tabs{display:flex;gap:8px;margin-bottom:12px}
.br-tabs button{flex:1}
.br-tabs button.on{background:var(--b2);color:#fff}
.br-sis{margin:10px 0 0;padding-left:18px;color:var(--sub);font-size:.9rem;text-align:left}
/* ===== 연료비 (fuel-cost) ===== */
.fc-res{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:14px;text-align:left}
.fc-res div{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.fc-res small{display:block;color:var(--sub);font-size:.78rem}
.fc-res b{font-size:1.25rem;font-variant-numeric:tabular-nums}
.fc-res .tot{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
.fc-tb{width:100%;border-collapse:collapse;margin-top:12px;font-size:.9rem}
.fc-tb th,.fc-tb td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:right}
.fc-tb th:first-child,.fc-tb td:first-child{text-align:left}
/* ===== 레시피 배율 (recipe-scale) ===== */
.rs-tabs{display:flex;gap:8px;margin-bottom:12px}
.rs-tabs button{flex:1}
.rs-tabs button.on{background:var(--b2);color:#fff}
.rs-pre{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.rs-ta{width:100%;min-height:150px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);font:inherit;box-sizing:border-box}
.rs-tb{width:100%;border-collapse:collapse;margin-top:12px;font-size:.92rem}
.rs-tb th,.rs-tb td{padding:7px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.rs-tb td.r,.rs-tb th.r{text-align:right;font-variant-numeric:tabular-nums}
.rs-tb td b{color:var(--b2)}
.rs-box{margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg);text-align:left}
.rs-box h3{font-size:.98rem;margin:0 0 8px}
.rs-kpi{display:flex;flex-wrap:wrap;gap:14px;margin-top:10px}
.rs-kpi div{min-width:120px}.rs-kpi small{display:block;color:var(--sub);font-size:.78rem}.rs-kpi b{font-size:1.3rem}
/* ===== 3줄 요약 (summary-card) ===== */
.sm-ta{width:100%;min-height:170px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);font:inherit;box-sizing:border-box}
.sm-card{margin-top:16px;text-align:left}
.sm-claim{padding:16px;border:2px solid var(--b2);border-radius:14px;background:rgba(31,77,56,.12)}
.sm-claim small,.sm-ev small{display:block;color:var(--sub);font-size:.78rem;margin-bottom:4px;font-weight:700}
.sm-claim p,.sm-ev p{margin:0;line-height:1.55}
.sm-line{width:2px;height:18px;background:var(--b2);margin:0 auto}
.sm-bar{height:2px;background:var(--b2);margin:0 auto}
.sm-row{display:grid;gap:10px}
.sm-ev{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.sm-pyr .sm-row{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.sm-mm{display:grid;grid-template-columns:1fr auto 1fr;gap:0;align-items:center}
.sm-mm .sm-side{display:grid;gap:10px}
.sm-mm .sm-claim{margin:0 16px}
.sm-kw{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.sm-kw span{padding:3px 10px;border-radius:12px;background:var(--line);font-size:.82rem}
.sm-act{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
@media(max-width:640px){.sm-mm{grid-template-columns:1fr}.sm-mm .sm-claim{margin:0 0 10px}}
/* ===== 음식물 쓰레기 체커 (food-waste-checker) ===== */
.fw-chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.fw-chips button{padding:6px 14px;border-radius:18px;border:1px solid var(--line);background:var(--bg);color:var(--fg);cursor:pointer;font:inherit;font-size:.88rem}
.fw-chips button.on{background:var(--b2);color:#fff;border-color:var(--b2)}
.fw-list{display:grid;gap:8px;margin-top:8px;text-align:left}
.fw-it{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.fw-it b{font-size:1.02rem}
.fw-it p{margin:6px 0 0;color:var(--sub);font-size:.88rem;line-height:1.5}
.fw-tag{display:inline-block;margin-left:6px;padding:1px 9px;border-radius:10px;font-size:.74rem;font-weight:700;color:#fff;vertical-align:middle}
.fw-f{background:#3f8a4f}.fw-g{background:#b4513f}.fw-v{background:#b08a2a}.fw-s{background:#5b6b8a}
.fw-fy{background:#3f8a4f}.fw-fl{background:#b08a2a}.fw-fn{background:#8a8a8a}
.fw-cnt{color:var(--sub);font-size:.85rem;margin:6px 0 0;text-align:left}
/* ===== 고도별 기온 (mountain-temp) ===== */
.mt-res{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:14px;text-align:left}
.mt-res div{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.mt-res small{display:block;color:var(--sub);font-size:.78rem}
.mt-res b{font-size:1.5rem;font-variant-numeric:tabular-nums}
.mt-res .main{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
.mt-lvl{margin-top:14px;padding:14px;border-radius:12px;border-left:6px solid var(--b2);background:var(--bg);text-align:left}
.mt-lvl h3{margin:0 0 6px;font-size:1.05rem}
.mt-lvl ul{margin:6px 0 0;padding-left:18px;font-size:.92rem}
.mt-lvl.l0{border-color:#3f8a4f}.mt-lvl.l1{border-color:#8aa83f}.mt-lvl.l2{border-color:#b08a2a}.mt-lvl.l3{border-color:#c26a2a}.mt-lvl.l4{border-color:#b4513f}.mt-lvl.l5{border-color:#7a2a2a}
.mt-tb{width:100%;border-collapse:collapse;margin-top:12px;font-size:.9rem}
.mt-tb th,.mt-tb td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:right}
.mt-tb th:first-child,.mt-tb td:first-child{text-align:left}
/* ===== 글로벌 사이즈 (global-size) ===== */
.gs-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.gs-tabs button{flex:1;min-width:90px}
.gs-tabs button.on{background:var(--b2);color:#fff}
.gs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin-top:14px;text-align:left}
.gs-c{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg);text-align:center}
.gs-c small{display:block;color:var(--sub);font-size:.78rem}
.gs-c b{font-size:1.35rem;font-variant-numeric:tabular-nums}
.gs-c.main{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
/* ===== 수하물 (baggage-calc) ===== */
.bg-bags{display:grid;gap:10px;margin-top:12px;text-align:left}
.bg-bag{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.bg-bag h3{margin:0 0 8px;font-size:.98rem}
.bg-res{margin-top:6px;font-size:.9rem;line-height:1.55}
.bg-ok{color:#3f8a4f;font-weight:700}.bg-ng{color:#b4513f;font-weight:700}
.bg-tot{margin-top:14px;padding:14px;border:2px solid var(--b2);border-radius:12px;background:rgba(31,77,56,.12);text-align:left}
.bg-tot b{font-size:1.5rem;font-variant-numeric:tabular-nums}
.bg-box{margin-top:12px;padding:12px;border:1px dashed var(--line);border-radius:12px;text-align:left}
/* ===== 태양광 (solar-calc) ===== */
.sl-res{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-top:14px;text-align:left}
.sl-res div{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.sl-res small{display:block;color:var(--sub);font-size:.78rem}
.sl-res b{font-size:1.3rem;font-variant-numeric:tabular-nums}
.sl-res .main{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
/* ===== 부동산 계산기 (realestate-calc) ===== */
.re-res{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-top:14px;text-align:left}
.re-res div{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.re-res small{display:block;color:var(--sub);font-size:.78rem}
.re-res b{font-size:1.25rem;font-variant-numeric:tabular-nums}
.re-res .main{border:2px solid var(--b2);background:rgba(31,77,56,.12)}
.re-sec{margin-top:16px;text-align:left}
.re-sec h3{font-size:1.02rem;margin:0}
.re-tb{width:100%;border-collapse:collapse;margin-top:8px;font-size:.9rem}
.re-tb td{padding:6px 8px;border-bottom:1px solid var(--line)}
.re-tb td:last-child{text-align:right;font-variant-numeric:tabular-nums}
/* hidden 속성이 항상 우선하도록 */
[hidden]{display:none!important}

/* ===== 디자인 v2 (베이지·진녹색) ===== */
body{line-height:1.7;-webkit-font-smoothing:antialiased}
.topbar{background:var(--bg);box-shadow:none}
.topbar .top{max-width:1100px}
.topbar .brand{color:var(--ink);text-shadow:none;font-size:1.35rem;letter-spacing:-.02em}
.topbar .search input{border:1px solid var(--line);border-right:0;border-radius:12px 0 0 12px;background:var(--card)}
.topbar .search .go{background:var(--b2);border:1px solid var(--b2);border-radius:0 12px 12px 0;color:#fff}
.topbar .mode,.menu,.lang{border:1px solid var(--line);background:var(--card);color:var(--ink)}
.topbar .mode{display:grid;place-items:center;padding:0}
.lang{font-size:.82rem;font-weight:800;letter-spacing:.02em}
.bar,.topbar+.bar{background:transparent;box-shadow:none}
.topics{width:fit-content;max-width:calc(100% - 32px);margin:10px auto 0;padding:5px;gap:4px;background:var(--tabbg);border-radius:18px}
.topic>button{padding:11px 20px;border-radius:13px;color:var(--ink);font-size:.98rem;font-weight:700;text-shadow:none;box-shadow:none}
.topic:first-child>button{box-shadow:none}
.topic.open>button,.topic>button:focus-visible{background:var(--card);box-shadow:0 1px 3px rgba(20,40,30,.14)}
@media(hover:hover){.topic:hover>button{background:var(--card);box-shadow:0 1px 3px rgba(20,40,30,.14)}}
.panel{background:var(--card);border-top:1px solid var(--line);border-radius:0 0 22px 22px;box-shadow:var(--sh)}
.panel::before{content:"";position:absolute;left:0;right:0;top:-16px;height:16px}
.bar .panel a{font-weight:600;border-radius:12px}
.bar .panel a:hover,.bar .panel a:focus-visible{background:var(--bg)}
@media(max-width:640px){.topics{display:flex;flex-wrap:wrap;width:auto;margin:8px 16px 0}.topic{flex:1 1 30%}.topic>button{padding:11px 4px;font-size:.92rem}}
.side{background:var(--card)}
.side summary{padding:10px 12px;font-weight:700}
.si{padding:7px 10px 7px 14px}
.si[aria-current=page]{background:linear-gradient(90deg,rgba(31,77,56,.12),transparent);border-left-color:var(--b2);font-weight:800}
.eyebrow{display:flex;align-items:center;gap:8px;margin:0 0 14px;font-size:.76rem;font-weight:700;letter-spacing:.14em;color:var(--sub);text-transform:uppercase}
.eyebrow::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--b1)}
.phead{padding:34px 0 6px}
.phead h1,.hero2 h1{margin:0;font-size:clamp(1.9rem,5vw,2.9rem);line-height:1.2;letter-spacing:-.03em;font-weight:800;word-break:keep-all}
.h1b{margin:4px 0 0;font-size:clamp(1.45rem,4vw,2.3rem);line-height:1.25;font-weight:800;letter-spacing:-.03em;color:var(--acc);word-break:keep-all}
.plead{margin:16px 0 0;max-width:64ch;color:var(--sub);font-size:1.02rem;word-break:keep-all}
.pcta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 24px;margin:26px 0 0}
.btn-dark{display:inline-flex;align-items:center;padding:14px 22px;border-radius:12px;background:var(--b2);color:#fff;font-weight:700;text-decoration:none;box-shadow:0 6px 16px rgba(31,77,56,.22);transition:transform .15s}
.btn-dark:hover,.btn-dark:focus-visible{transform:translateY(-2px);outline:0}
.lnk{font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:6px}
#tool{scroll-margin-top:16px}
.hero2{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:28px;align-items:center;padding:38px 0 10px}
.hero2 h1 span{color:var(--acc)}
.hero2-art{position:relative}.art{display:block;width:100%;height:auto}
.pill{position:absolute;left:2%;top:0;z-index:1;padding:9px 16px;border-radius:999px;background:var(--card);box-shadow:0 4px 14px rgba(20,40,30,.1);font-size:.84rem;font-weight:700}
.a-ring{fill:none;stroke:var(--line);stroke-width:1.5}.a-ring2{fill:none;stroke:var(--line);stroke-width:1.5;stroke-dasharray:3 7}
.a-c1,.a-c3{fill:var(--card);stroke:var(--line)}.a-c2{fill:var(--panel)}
.a-w{fill:var(--b1)}.a-w2{fill:var(--line)}.a-r{fill:none;stroke:#c9de9f;stroke-width:6}.a-h{fill:none;stroke:#fff;stroke-width:5;stroke-linecap:round}
.a-b1{fill:#d6e5b8}.a-b2{fill:#b3cf86}.a-b3{fill:#6f9b5a}.a-b4{fill:var(--b2)}
.a-t{animation:artfloat 6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.t2{animation-delay:-1.5s}.t3{animation-delay:-3s}.t4{animation-delay:-4.5s}
@keyframes artfloat{50%{transform:translateY(-7px)}}
@media(prefers-reduced-motion:reduce){.a-t{animation:none}}
@media(max-width:820px){.hero2{grid-template-columns:1fr;padding-top:26px}.hero2-art{max-width:400px;margin:0 auto;width:100%}}
.tabs{display:flex;flex-wrap:wrap;gap:4px;width:fit-content;max-width:100%;margin:30px 0 4px;padding:5px;background:var(--tabbg);border-radius:18px}
.tab{padding:10px 18px;border:0;border-radius:13px;background:none;color:var(--sub);font:600 .95rem inherit;font-family:inherit;cursor:pointer}
.tab.on{background:var(--card);color:var(--ink);box-shadow:0 1px 3px rgba(20,40,30,.14)}
.tsec[hidden]{display:none}.tsec h2{margin:30px 0 14px}
.tool{padding:18px 20px;border-width:3px;border-radius:18px}
.tool b{font-size:1.02rem}.tool small{margin-top:4px;line-height:1.5}
.tool:hover,.tool:focus-visible{transform:translateY(-3px);box-shadow:0 12px 26px rgba(20,40,30,.14);animation:spin var(--d) linear infinite}
@media(prefers-reduced-motion:reduce){.tool:hover,.tool:focus-visible{animation:none}}
.tool-box{margin-top:22px;padding:26px;border:1px solid var(--line);border-radius:22px;background:var(--card);box-shadow:0 1px 2px rgba(20,40,30,.04)}
.tool-box.done{border-color:#f5b400}
.fld input,.fld select,.fld textarea,.row input,.eye-box select{background:var(--card);border:1px solid var(--line);border-radius:12px}
.fld input:focus,.fld select:focus,.fld textarea:focus{border-color:var(--b2);box-shadow:0 0 0 3px rgba(31,77,56,.14)}
.b{border:1px solid var(--line);border-radius:12px;background:var(--card);font-weight:700}
.b.go{background:var(--b2);border-color:var(--b2);color:#fff}
.res div{border-radius:12px}
.res .big{border:1px solid var(--b2);background:rgba(31,77,56,.06)}
.info{border-radius:22px}
footer{border-top:1px solid var(--line)}
.tool-box.split{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:20px;padding:0;border:0;background:none;box-shadow:none}
.split .pin{padding:24px;border:1px solid var(--line);border-radius:22px;background:var(--card)}
.split .pin .fld{grid-template-columns:1fr}
.split .pout{align-self:stretch;padding:28px;border-radius:22px;background:var(--panel);color:#fff}
.split .res{margin:0;gap:0}
.split .res div{padding:14px 0;border:0;border-bottom:1px solid rgba(255,255,255,.14);border-radius:0;color:rgba(255,255,255,.76);align-items:baseline}
.split .res div b{color:#fff}
.split .res .big{order:-1;display:block;margin-bottom:6px;padding:0 0 18px;border:0;border-bottom:1px solid rgba(255,255,255,.22);background:none;font-size:.95rem;font-weight:500}
.split .res .big b{display:block;margin-top:8px;font-size:clamp(2rem,5vw,2.8rem);line-height:1.15;color:#fff}
.split .note{grid-column:1/-1;margin:0}
@media(max-width:820px){.tool-box.split{grid-template-columns:1fr}}
.lang span:not(.gl){display:none}
.lang{padding:0 14px}
.btn-dark span{margin-left:8px}
.split .pin .fld{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:480px){.split .pin .fld{grid-template-columns:1fr}}

.m-f{fill:#b3cf86}.m-m{fill:#6f9b5a}.m-d{fill:var(--b2)}.m-l{fill:var(--line)}.m-w{fill:var(--card)}
.m-s{fill:none;stroke:#8bb35e;stroke-width:5;stroke-linecap:round;stroke-linejoin:round}
.m-sd{fill:none;stroke:var(--b2);stroke-width:5;stroke-linecap:round;stroke-linejoin:round}
.m-sl{fill:none;stroke:var(--card);stroke-width:5;stroke-linecap:round;stroke-linejoin:round}
.m-o{fill:none;stroke:var(--b2);stroke-width:5;stroke-linecap:round}.m-ow{fill:var(--card);stroke:var(--b2);stroke-width:5;stroke-linejoin:round}
.m-g1,.m-g2,.m-g3{fill:none;stroke-width:11;stroke-linecap:round}.m-g1{stroke:#d6e5b8}.m-g2{stroke:#8bb35e}.m-g3{stroke:var(--b2)}
.dk .m-d{fill:#d6e5b8}.dk .m-l{fill:rgba(255,255,255,.22)}.dk .m-f{fill:#9cc16f}.dk .m-m{fill:#cfe3a9}
.dk .m-sd{stroke:#e6efd2}.dk .m-sl{stroke:#1f4d38}.dk .m-o,.dk .m-ow{stroke:#e6efd2}.dk .m-ow{fill:rgba(255,255,255,.1)}.dk .m-w{fill:#2f6b52}
.dk .m-g3{stroke:#e6efd2}.dk .m-g1{stroke:rgba(255,255,255,.28)}
.phead.has-art{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:26px;align-items:center}
.phead-art{width:100%;max-width:350px;justify-self:end}
@media(max-width:820px){.phead.has-art{grid-template-columns:1fr;gap:6px}.phead-art{max-width:250px;justify-self:center}}



/* ===== 헤더 v3 (진녹색 띠 + 연두 메뉴줄) ===== */
:root{--hd:#1f4d38;--hd2:#dff3c4;--hdp:#1f4d38;--hdpt:#fff}
:root[data-theme=dark]{--hd:#1b3a2b;--hd2:#22382a;--hdp:#c4ee86;--hdpt:#16231b}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--hd:#1b3a2b;--hd2:#22382a;--hdp:#c4ee86;--hdpt:#16231b}}
.topbar{background:var(--hd);box-shadow:none}
.topbar .top{max-width:1400px;padding:6px 16px;gap:12px}
.topbar .brand{display:block;margin:0 auto 0 28px;line-height:0;text-shadow:none}
.topbar .brand img{display:block;height:66px;width:auto}
.topbar .search input{border:1px solid rgba(255,255,255,.4);border-right:0}
.topbar .search .go{background:#c4ee86;border:1px solid #c4ee86;color:#1f4d38}
.bar,.topbar+.bar{background:var(--hd2);box-shadow:none}
.topics{width:100%;max-width:1400px;margin:0 auto;padding:7px 16px;gap:4px;background:transparent;border-radius:0;justify-content:flex-start}
.topic>button,.topic>a{border-radius:999px}
.topic:hover>button,.topic.open>button,.topic>button:focus-visible,.topic>a:hover,.topic>a:focus-visible{background:var(--hdp);color:var(--hdpt);box-shadow:none}
@media(max-width:700px){.topbar .top{padding:6px 10px 8px;gap:8px;row-gap:8px;flex-wrap:wrap}.topbar .brand{margin-left:2px}.topbar .brand img{height:36px}.topbar .search{order:9;flex:1 1 100%;min-width:100%}.topbar .search input{width:100%;min-width:0;flex:1}.topics{padding:6px 10px}}
/* ===== /헤더 v3 ===== */

/* ===== 정보글 (articles) ===== */
.shell{grid-template-columns:216px minmax(0,1fr)}
.side summary{padding:10px 10px}
.hero2{display:block;position:relative;padding-top:30px}
.hero2 h1{font-size:clamp(1.7rem,3.4vw,2.4rem)}
.hero2-art{position:absolute;right:0;top:34px;width:190px;max-width:190px}
.hero2-txt h1,.hero2-txt>.plead{max-width:calc(100% - 220px)}
.hero2-art .pill{left:0;top:-14px;padding:5px 11px;font-size:.7rem}
.hero2 .plead{margin-top:12px;font-size:.95rem}
.topic>a{display:block;padding:11px 20px;border-radius:13px;color:var(--ink);font-size:.98rem;font-weight:700;text-decoration:none}
.topic>a:hover,.topic>a:focus-visible{background:var(--card);box-shadow:0 1px 3px rgba(20,40,30,.14);outline:0}
.ahead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:22px 0 10px}
.ahead h2{margin:0;font-size:1.08rem}
.ahead a{font-size:.88rem;font-weight:700;color:var(--sub);text-decoration:none}
.abox{margin-top:22px;padding:14px 16px 16px;border:3px solid transparent;border-radius:18px;background:linear-gradient(var(--bg),var(--bg)) padding-box,linear-gradient(135deg,#c4ee86,#a3de6a) border-box;animation:aboxglow 2.2s ease-in-out infinite}
.abox .ahead{margin:0 0 12px}
@keyframes aboxglow{0%,100%{box-shadow:0 0 2px 0 rgba(150,215,90,.5)}50%{box-shadow:0 0 16px 3px rgba(150,215,90,.85)}}
@media(prefers-reduced-motion:reduce){.abox{animation:none}}
@media(max-width:560px){.abox{padding:10px 10px 12px;border-radius:16px}}
.alist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:0;list-style:none}
.alist li[hidden]{display:none}
.acard{display:grid;grid-template-columns:128px minmax(0,1fr);gap:12px;align-items:center;height:100%;padding:10px;border:1px solid var(--line);border-radius:16px;background:var(--card);color:inherit;text-decoration:none;box-sizing:border-box;transition:transform .15s,box-shadow .15s}
.acard:hover,.acard:focus-visible{transform:translateY(-2px);box-shadow:0 10px 22px rgba(20,40,30,.12);outline:0}
.th{aspect-ratio:4/3;border-radius:12px;overflow:hidden;background:hsl(var(--h) 40% 90%)}
:root[data-theme="dark"] .th{background:hsl(var(--h) 22% 20%)}
.th img,.th svg{display:block;width:100%;height:100%}
.th img{object-fit:cover}
.at{min-width:0}
.at em{font-style:normal;font-size:.74rem;font-weight:700;color:var(--b2)}
.at b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:3px 0 4px;font-size:.96rem;line-height:1.4;word-break:keep-all}
.at small{color:var(--sub);font-size:.78rem}
.achips{display:flex;flex-wrap:wrap;gap:4px;width:fit-content;max-width:100%;margin:22px 0 16px;padding:5px;background:var(--tabbg);border-radius:18px}
.ameta{margin:12px 0 0;color:var(--sub);font-size:.88rem}
.afig{margin:20px 0 0;max-width:760px}
.afig img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:18px}
.post{max-width:760px;margin-top:26px;font-size:1.04rem;line-height:1.9}
.post h2{margin:2em 0 .6em;font-size:1.4rem;line-height:1.4;word-break:keep-all}
.post h3{margin:1.6em 0 .5em;font-size:1.15rem}
.post p{margin:0 0 1.1em;word-break:keep-all}
.post ul,.post ol{margin:0 0 1.2em;padding-left:1.4em}
.post li{margin:.3em 0}
.post blockquote{margin:1.4em 0;padding:.4em 1.2em;border-left:4px solid var(--b2);color:var(--sub)}
.post figure{margin:1.6em 0}
.post figure img{max-width:100%;border-radius:14px}
.post figcaption{margin-top:6px;color:var(--sub);font-size:.85rem;text-align:center}
.post a{color:var(--b2);text-decoration:underline}
.post hr{margin:2em 0;border:0;border-top:1px solid var(--line)}
.reltool{max-width:760px;margin:30px 0}
.reltool a{display:block;padding:18px 20px;border:2px solid var(--b2);border-radius:16px;background:var(--card);color:inherit;text-decoration:none}
.reltool small{display:block;color:var(--sub);font-size:.78rem;font-weight:700}
.reltool b{display:block;margin:2px 0;font-size:1.08rem}
.reltool span{color:var(--sub);font-size:.9rem}
.amore{margin-top:40px}
.amore h2{font-size:1.15rem}
@media(max-width:700px){.alist{grid-template-columns:1fr}}
@media(max-width:820px){.hero2-art{display:none}.hero2-txt h1,.hero2-txt>.plead{max-width:none}}
@media(max-width:640px){.topic>a{padding:11px 4px;font-size:.92rem;text-align:center}}
@media(max-width:560px){.acard{grid-template-columns:104px minmax(0,1fr)}}
/* ===== /정보글 ===== */
