:root{--bg: #f6f7fb;--card: #ffffff;--text: #191d1b;--text-2: #4a524d;--muted: #7a837e;--faint: #a4aca7;--line: #e0e4e1;--line-2: #e7eae8;--line-3: #f1f3f2;--well: #eef1ef;--well-2: #f2f4f2;--seg: #e9ecef;--green: oklch(.55 .14 160);--green-2: oklch(.45 .13 160);--green-3: oklch(.4 .12 160);--green-deep: oklch(.35 .09 160);--green-ink: oklch(.3 .07 160);--green-side: oklch(.26 .06 160);--green-soft: oklch(.72 .1 160);--green-tint: #e6f4ee;--green-tint-2: #e8f5ee;--amber: #b26b13;--amber-tint: #fef4e8;--blue: #4356c9;--blue-tint: #eef2ff;--red: #c0392b;--red-2: #e05a4e;--red-tint: #fdecea;--red-ink: #7d2f27;--shadow: 0 1px 3px rgba(15, 40, 30, .06);--radius: 16px;--radius-d: 14px;--font: "Noto Sans KR", system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body,#root{height:100%}html{background:var(--bg)}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.45;word-break:keep-all;overflow-wrap:break-word;-webkit-tap-highlight-color:transparent}button,a,.press{touch-action:manipulation}html,body{touch-action:pan-x pan-y}html,body{overflow-x:clip}.sheet{overflow-x:hidden}button,.chip{-webkit-user-select:none;user-select:none}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer}a{color:var(--green)}::-webkit-scrollbar{display:none}*{scrollbar-width:none}.card{background:var(--card);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}.card.tight{padding:12px 16px}.card.dark{background:var(--green-deep);color:#fff}.card.ink{background:var(--green-ink);color:#fff}.ops .card{border-radius:var(--radius-d)}.row{display:flex;align-items:center;gap:10px}.between{display:flex;align-items:center;justify-content:space-between;gap:10px}.col{display:flex;flex-direction:column;gap:10px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.mt6{margin-top:6px}.mt10{margin-top:10px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt20{margin-top:20px}.mt26{margin-top:26px}.h1{font-size:22px;font-weight:900;letter-spacing:-.5px}.h1.d{font-size:21px}.h2{font-size:14px;font-weight:700}.h3{font-size:13.5px;font-weight:700}.cap{font-size:12px;color:var(--muted)}.cap2{font-size:11px;color:var(--faint)}.cap3{font-size:11.5px;color:var(--faint)}.num{font-size:21px;font-weight:900;letter-spacing:-.5px}.num.s{font-size:15px}.num.d{font-size:22px}.good{color:var(--green-2)}.bad{color:var(--amber)}.mono{font-variant-numeric:tabular-nums}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link{background:none;border:none;padding:0;color:var(--green);font-weight:500}.btn{border:none;border-radius:12px;padding:13px;font-size:14px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--green);color:#fff}.btn.full{width:100%}.btn.ghost{background:var(--card);color:var(--text);border:1px solid var(--line)}.btn.soft{background:var(--well-2);color:var(--text-2)}.btn.sm{padding:7px 14px;font-size:12px;border-radius:9px}.btn.xs{padding:5px 11px;font-size:11.5px;border-radius:8px}.btn.danger{background:var(--red-tint);color:var(--red)}.btn.amber{background:var(--amber-tint);color:var(--amber)}.btn.blue{background:var(--blue-tint);color:var(--blue)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.icon{width:38px;height:38px;border-radius:50%;padding:0;background:var(--card);border:1px solid var(--line-2);color:var(--text-2);position:relative}.btn.icon .dot{position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--red-2);border:1.5px solid #fff}.chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;white-space:nowrap}.chip.green{background:var(--green-tint);color:var(--green-2)}.chip.amber{background:var(--amber-tint);color:var(--amber)}.chip.blue{background:var(--blue-tint);color:var(--blue)}.chip.red{background:var(--red-tint);color:var(--red)}.chip.gray{background:var(--well-2);color:var(--text-2)}.chip.dark{background:var(--text);color:#fff}.chip.pill{border-radius:99px;padding:6px 13px;font-size:12px}.seg{display:flex;gap:6px;background:var(--seg);border-radius:12px;padding:4px}.seg button{flex:1;border:none;border-radius:9px;padding:8px 2px;font-size:13px;font-weight:500;color:var(--muted);background:transparent;white-space:nowrap}.seg button.on{background:var(--card);color:var(--text);font-weight:700;box-shadow:var(--shadow)}.tabs{display:flex;border-bottom:2px solid var(--line)}.tabs button{background:none;border:none;padding:10px 14px;font-size:13px;font-weight:500;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-2px}.tabs button.on{color:var(--text);font-weight:700;border-bottom-color:var(--green)}.input{width:100%;border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-size:14px;background:var(--card);outline:none}.input:focus{border-color:var(--green)}.input.sm{padding:9px 12px;font-size:13px;border-radius:10px}textarea.input{min-height:96px;resize:vertical;line-height:1.5}select.input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%237a837e' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 12px center;padding-right:34px}.label{font-size:12px;font-weight:700;color:var(--muted);margin:14px 4px 6px}.field{display:flex;flex-direction:column;gap:6px}.field>span{font-size:12px;font-weight:700;color:var(--muted)}.bar{height:8px;background:var(--well);border-radius:99px;overflow:hidden}.bar>i{display:block;height:100%;background:var(--green);border-radius:99px}.bar.thin{height:7px}.bar.white{background:#fff3}.bar.white>i{background:#fff}.list{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.list>.item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line-3)}.list>.item:last-child{border-bottom:none}.list>.item.press{cursor:pointer}.list>.item.press:active{background:var(--well-2)}.sheet-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a140f73;z-index:50;display:flex;align-items:flex-end;justify-content:center}.sheet{background:var(--bg);width:100%;max-width:560px;max-height:92vh;max-height:92dvh;overflow-y:auto;border-radius:22px 22px 0 0;padding:12px 20px calc(28px + env(safe-area-inset-bottom));animation:up .22s ease;overscroll-behavior:contain}.sheet .handle{width:40px;height:4px;border-radius:99px;background:var(--line);margin:0 auto 14px}@keyframes up{0%{transform:translateY(40px);opacity:.6}to{transform:none;opacity:1}}.ops .sheet-back{align-items:center}.ops .sheet{border-radius:18px;max-width:640px;padding:22px 24px 26px}.ops .sheet .handle{display:none}.toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translate(-50%);background:var(--text);color:#fff;padding:11px 16px;border-radius:12px;font-size:13px;font-weight:700;z-index:60;box-shadow:0 6px 20px #0003;max-width:90vw}.toast.err{background:var(--red)}.sk{background:linear-gradient(90deg,#eef1ef 25%,#f6f7f6,#eef1ef 75%);background-size:200% 100%;animation:sk 1.2s infinite;border-radius:10px}@keyframes sk{0%{background-position:200% 0}to{background-position:-200% 0}}.app-shell{min-height:100%;display:flex;flex-direction:column;max-width:430px;margin:0 auto;position:relative}@media(min-width:700px){.app-shell{box-shadow:0 0 0 1px var(--line-2);background:var(--bg)}}.app-main{flex:1;padding:8px max(20px,env(safe-area-inset-right)) calc(96px + env(safe-area-inset-bottom)) max(20px,env(safe-area-inset-left))}.tabbar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:430px;background:#fffffff5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line-2);display:flex;padding:8px 8px calc(8px + env(safe-area-inset-bottom));z-index:40}.tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;background:none;border:none;padding:4px 0;color:var(--faint);font-size:10.5px;font-weight:700}.tabbar button.on{color:var(--green-2)}.tabbar .tabdot{position:absolute;top:2px;right:calc(50% - 16px);width:8px;height:8px;border-radius:50%;background:var(--red);border:1.5px solid #fff}.ops{min-height:100%;display:flex}.ops .side{width:216px;flex:none;background:var(--green-side);color:#fff;display:flex;flex-direction:column;padding:22px 14px;position:sticky;top:0;height:100vh;height:100dvh}.ops .side nav{display:flex;flex-direction:column;gap:3px;margin-top:26px}.ops .side nav button{display:flex;align-items:center;gap:10px;width:100%;background:none;border:none;border-radius:10px;padding:10px 12px;font-size:13px;font-weight:500;color:#ffffffb8;text-align:left}.ops .side nav button.on{background:#ffffff1f;color:#fff;font-weight:700}.ops .side nav button .badge{margin-left:auto;background:var(--red-2);color:#fff;font-size:10px;font-weight:900;border-radius:99px;padding:2px 7px}.ops .main{flex:1;min-width:0;padding:26px 32px 40px;max-width:1400px}.ops .mtab,.ops .ops-mtop{display:none}@media(max-width:860px),(max-height:520px){.ops .side{display:none}.ops .main{padding:14px max(16px,env(safe-area-inset-right)) calc(90px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}.ops{flex-direction:column}.ops .ops-mtop{display:flex;align-items:center;justify-content:space-between;padding:10px 16px 2px}.ops .mtab{display:flex;position:fixed;bottom:0;left:0;right:0;background:#fffffff5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line-2);padding:8px max(6px,env(safe-area-inset-right)) calc(8px + env(safe-area-inset-bottom)) max(6px,env(safe-area-inset-left));z-index:40}.ops .mtab button{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;background:none;border:none;padding:4px 0;color:var(--faint);font-size:10.5px;font-weight:700}.ops .mtab button.on{color:var(--green-2)}.grid4,.grid3{grid-template-columns:1fr 1fr}.ops .grid2{grid-template-columns:1fr}.ops .h1.d{font-size:19px}}.tbl{background:var(--card);border-radius:0 0 14px 14px;box-shadow:var(--shadow);overflow-x:auto}.tbl .in{min-width:960px}.tbl .hd,.tbl .r{display:flex;align-items:center;padding:10px 16px;border-bottom:1px solid var(--line-3)}.tbl .hd{font-size:10.5px;color:var(--faint);font-weight:700;background:#fafbfa;padding:11px 16px}.tbl .hs{background:none;border:none;padding:0;font:inherit;color:inherit;text-align:inherit;cursor:pointer}.tbl .hs:hover{color:var(--text-2)}.tbl .sortbar{display:none}.tbl .ft{display:flex;align-items:center;padding:12px 16px;background:#fafbfa;font-weight:900}.tbl .c-name{flex:2.8;min-width:0;display:flex;align-items:center;gap:9px}.tbl .c-s,.tbl .c-v{flex:.9}.tbl .c-n{flex:.8;text-align:right;font-size:13px;font-weight:900}.tbl .c-m{flex:.9;text-align:right;font-size:12.5px;font-weight:700}.tbl .c-x{flex:.8;text-align:right;font-size:12px;color:var(--text-2)}.tbl .thumb{width:30px;height:30px;border-radius:7px;background:var(--well);flex:none;object-fit:cover}.tbl .nm{background:none;border:none;padding:0;text-align:left;font-size:13px;font-weight:700;color:var(--text);max-width:100%}.tbl .nm.drill{color:var(--green-3)}@media(pointer:coarse){.input,.input.sm,select.input,textarea.input{font-size:16px}.btn.xs{padding:8px 13px;font-size:12px}.btn.sm{padding:10px 15px}.chip.pill{padding:8px 14px}.seg button{padding:10px 2px}.tabs button{padding:12px 14px}.link{padding:6px 4px;margin:-6px -4px}}@media(max-width:700px){.tbl .in{min-width:0}.tbl .hd{display:none}.tbl .r,.tbl .ft{flex-wrap:wrap;gap:8px 16px;padding:12px 14px}.tbl .c-name{flex:1 1 100%}.tbl .c-s,.tbl .c-v,.tbl .c-n,.tbl .c-m,.tbl .c-x{flex:none;text-align:left}.tbl [data-l]:before{content:attr(data-l);display:block;font-size:9.5px;font-weight:700;color:var(--faint);margin-bottom:1px}.tbl .sortbar{display:flex}.tbl .xm,.tbl .ft .c-s,.tbl .ft .c-v{display:none}.ops .sheet-back{align-items:flex-end}.ops .sheet{border-radius:22px 22px 0 0;max-width:none;padding:14px 20px calc(28px + env(safe-area-inset-bottom))}.ops .sheet .handle{display:block}}.doc-cover{border-radius:18px;padding:26px 28px 24px;background:linear-gradient(135deg,var(--da-tint),#fff 70%);border:1px solid var(--line-2);display:flex;gap:20px;align-items:center}.doc-cover .n{font-size:40px;font-weight:900;letter-spacing:-1px;color:var(--da);line-height:1;flex:none}.doc-cover .t{font-size:24px;font-weight:900;letter-spacing:-.5px;color:var(--text)}.doc-cover .g{font-size:13px;color:var(--muted);margin-top:4px;line-height:1.5}.doc-cover .m{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}.doc-cover .e{font-size:40px;margin-left:auto;flex:none}.doc-cover img.th{width:148px;height:92px;object-fit:cover;border-radius:12px;margin-left:auto;flex:none;border:1px solid var(--line-2);background:#fff}.doc-html{font-size:14px;line-height:1.85;color:var(--text-2);max-width:720px;counter-reset:sec}.doc-html>h2:first-child{display:none}.doc-html>h2:first-child+p{font-size:12px;color:var(--faint);background:var(--well);border-radius:10px;padding:8px 12px;line-height:1.6}.doc-html h2{font-size:19px;font-weight:900;color:var(--text);margin:26px 0 8px;letter-spacing:-.4px}.doc-html h3{counter-increment:sec;display:flex;align-items:baseline;gap:10px;font-size:17px;font-weight:900;color:var(--text);letter-spacing:-.3px;margin:34px 0 10px;padding-top:16px;border-top:2.5px solid var(--text)}.doc-html h3:before{content:counter(sec,decimal-leading-zero);font-size:12.5px;font-weight:900;color:var(--da);letter-spacing:1px;transform:translateY(-1px)}.doc-html h4{font-size:14px;font-weight:800;color:var(--text);margin:18px 0 5px}.doc-html p{margin:8px 0}.doc-html ul,.doc-html ol{margin:8px 0;padding-left:20px}.doc-html li{margin:4px 0;padding-left:2px}.doc-html ul>li::marker{color:var(--da)}.doc-html .tw{overflow-x:auto;margin:12px 0}.doc-html table{border-collapse:collapse;width:100%;font-size:12.8px;line-height:1.55}.doc-html th,.doc-html td{padding:8px 12px 8px 0;text-align:left;vertical-align:top;border-bottom:1px solid var(--line-3)}.doc-html th{border-bottom:2px solid var(--text);font-weight:800;color:var(--text);font-size:11.5px;letter-spacing:.3px;white-space:nowrap}.doc-html td:first-child{font-weight:700;color:var(--text);white-space:nowrap}.doc-html tr:hover td{background:var(--well)}.doc-html code{background:var(--well-2);border-radius:5px;padding:1px 5px;font-size:12px}.doc-html pre{background:var(--well-2);border-radius:10px;padding:12px 14px;overflow-x:auto;font-size:12px}.doc-html blockquote{position:relative;border:1px solid var(--line-2);border-left:3px solid var(--da);border-radius:12px;margin:12px 0;padding:26px 16px 10px;color:var(--text-2);background:var(--well)}.doc-html blockquote:before{content:"✂ 복사해서 쓰는 원문";position:absolute;top:8px;left:16px;font-size:10.5px;font-weight:800;letter-spacing:.5px;color:var(--da)}.doc-html hr{border:none;border-top:1px solid var(--line-2);margin:22px 0}.doc-html .co.warn{background:var(--amber-tint);border-radius:10px;padding:6px 14px;margin:10px 0}.doc-html .co.warn p,.doc-html li.co-warn{color:var(--amber)}.doc-html .chip.ok{background:var(--green-tint);color:var(--green-2)}.doc-html .chip.todo{background:var(--well-2);color:var(--muted)}.doc-html b{color:var(--text)}.doc-html details.fold{border:1.5px solid var(--line-2);border-radius:14px;margin:14px 0;background:#fff;overflow:hidden}.doc-html details.fold summary{cursor:pointer;padding:12px 16px;font-weight:800;font-size:13px;color:var(--text);background:var(--da-tint);list-style:none;display:flex;gap:9px;align-items:center;-webkit-user-select:none;user-select:none}.doc-html details.fold summary::-webkit-details-marker{display:none}.doc-html details.fold summary:before{content:"▸";color:var(--da);transition:transform .15s;flex:none}.doc-html details.fold summary:after{content:"펼치기";margin-left:auto;font-size:11px;font-weight:700;color:var(--muted);flex:none}.doc-html details.fold[open] summary:before{transform:rotate(90deg)}.doc-html details.fold[open] summary:after{content:"접기"}.doc-html details.fold .fold-body{padding:2px 16px 12px}@media(max-width:560px){.doc-cover{padding:18px 20px;gap:14px}.doc-cover img.th,.doc-cover .e{display:none}.doc-cover .n{font-size:28px}.doc-cover .t{font-size:19px}}.lib-card{cursor:pointer;border-radius:18px;background:#fff;box-shadow:var(--shadow);overflow:hidden;transition:transform .15s,box-shadow .15s;display:flex;flex-direction:column}.lib-card:hover{transform:translateY(-3px);box-shadow:0 10px 28px #0f281e1f}.lib-card .thumb{aspect-ratio:16/9;background:var(--da-tint);display:flex;align-items:center;justify-content:center;font-size:40px;position:relative}.lib-card .thumb img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.lib-card .bd{padding:14px 16px 16px;display:flex;flex-direction:column;gap:6px;flex:1}.lib-card .num{font-size:11px;font-weight:900;letter-spacing:1.5px;color:var(--da)}.lib-card ul{margin:4px 0 0;padding-left:16px;font-size:12.3px;color:var(--text-2);line-height:1.6}.lib-card ul li{margin:2px 0}.lib-card ul li::marker{color:var(--da)}@media print{body{background:#fff}.tabbar,.mtab,.side,.no-print{display:none!important}.app-shell{max-width:none;box-shadow:none}.card{box-shadow:none;border:1px solid var(--line-3);break-inside:avoid}}.loading{display:flex;flex-direction:column;align-items:center;gap:12px;padding:44px 20px;text-align:center}.loading-pin{width:56px;height:56px;border-radius:16px;box-shadow:0 8px 20px #14281e24;animation:pin-bob 1.4s ease-in-out infinite}.loading-msg{font-size:13.5px;color:var(--muted);line-height:1.6;max-width:280px}.loading-bar{width:160px;height:6px;border-radius:99px;background:var(--well);overflow:hidden}.loading-fill{width:40%;height:100%;border-radius:99px;background:var(--green);animation:bar-slide 1.2s ease-in-out infinite}@keyframes pin-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-7px)}}@keyframes bar-slide{0%{transform:translate(-120%)}to{transform:translate(300%)}}@media(prefers-reduced-motion:reduce){.loading-pin,.loading-fill{animation:none}.loading-fill{width:100%;opacity:.5}}.refreshing{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);padding:8px 4px 0}.dimmed{opacity:.45;pointer-events:none;transition:opacity .2s}.tour{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60}.tour-hole{position:fixed;border-radius:14px;box-shadow:0 0 0 9999px #0c18129e,0 0 0 3px var(--green);transition:top .25s ease,left .25s ease,width .25s ease,height .25s ease;pointer-events:none}.tour-tip{position:fixed;left:16px;right:16px;max-width:400px;margin:0 auto;background:var(--card);border-radius:16px;padding:14px 16px;box-shadow:0 12px 34px #00000047;animation:tip-in .22s ease}.tour-n{font-size:11px;font-weight:700;color:var(--green-2);letter-spacing:.04em}.tour-title{font-size:15.5px;font-weight:800;margin-top:3px}.tour-body{font-size:13px;color:var(--text-2);line-height:1.65;margin-top:5px}@keyframes tip-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.tour-tip{animation:none}.tour-hole{transition:none}}.inv-line{display:flex;flex-direction:column;gap:6px;padding:8px 0;border-bottom:1px dashed var(--line)}.inv-line:last-of-type{border-bottom:none}
