:root{--bg:#fff;--bg2:#f6f6f7;--bg3:#ececef;--line:#e3e3e6;--line2:#cfcfd4;--fg:#111114;--fg2:#55555c;--fg3:#8a8a92;--accent:#111114;--accent-fg:#fff;--ok:#1f9d55;--warn:#c98a00;--bad:#d23c3c;--info:#2f6fed;--r:12px;--r2:8px;--sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans KR", "PingFang SC", "Microsoft YaHei", sans-serif;--mono:"IBM Plex Mono", ui-monospace, Menlo, monospace;--shadow:0 1px 2px #0000000a, 0 8px 24px #0000000d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--fg);font:15px/1.5 var(--sans);-webkit-font-smoothing:antialiased;margin:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}h1{letter-spacing:-.02em;margin:0 0 8px;font-size:28px;font-weight:600}h2{letter-spacing:-.01em;margin:0 0 8px;font-size:20px;font-weight:600}h3{letter-spacing:.08em;text-transform:uppercase;color:var(--fg3);margin:0 0 12px;font-size:12px;font-weight:600}p{margin:0 0 12px}.mut{color:var(--fg2)}.hint{color:var(--fg3);font-size:13px;line-height:1.5}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.sp{flex:1}.shell{flex-direction:column;min-height:100%;display:flex}.topbar{z-index:20;-webkit-backdrop-filter:saturate(180%)blur(12px);backdrop-filter:saturate(180%)blur(12px);border-bottom:1px solid var(--line);background:#ffffffd9;align-items:center;gap:24px;height:60px;padding:0 32px;display:flex;position:sticky;top:0}.topbar .brand{letter-spacing:-.02em;font-size:17px;font-weight:600}.topbar nav{gap:4px;display:flex}.topbar nav a{border-radius:var(--r2);color:var(--fg2);padding:8px 12px;font-weight:500}.topbar nav a.active,.topbar nav a:hover{background:var(--bg2);color:var(--fg)}.page{width:100%;max-width:1120px;margin:0 auto;padding:48px 32px 96px}.page.wide{max-width:none;padding:0}.head{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:32px;display:flex}.head h1{margin:0}.crumbs{color:var(--fg3);gap:8px;margin-bottom:12px;font-size:13px;display:flex}.crumbs a:hover{color:var(--fg)}.btn{border:1px solid var(--line2);border-radius:var(--r2);background:var(--bg);cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:0 16px;font-weight:500;transition:background .15s,border-color .15s;display:inline-flex}.btn:hover{background:var(--bg2)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}.btn.primary:hover{background:#2a2a30}.btn.danger{color:var(--bad);border-color:#f0c9c9}.btn.sm{min-height:32px;padding:0 12px;font-size:13px}.btn.ghost{border-color:#0000}.btn.block{width:100%}.input,select.input,textarea.input{border:1px solid var(--line2);border-radius:var(--r2);background:var(--bg);outline:none;width:100%;min-height:40px;padding:8px 12px}.input:focus{border-color:var(--fg)}.input.sm{min-height:32px;padding:4px 8px;font-size:13px}label.lbl{color:var(--fg2);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.field{margin-bottom:16px}.row{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.kv{grid-template-columns:1fr auto;align-items:center;gap:8px 16px;font-size:13px;display:grid}.kv label{color:var(--fg2)}.kv .input{width:128px}.kv .input.wide{width:200px}select.input{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' fill='none' stroke='%2355555c' stroke-width='1.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;padding-right:28px}.card{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);padding:24px}.card.pad-lg{padding:32px}.grid{gap:24px;display:grid}.grid.cols-2{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.list{flex-direction:column;display:flex}.list .item{border-top:1px solid var(--line);grid-template-columns:1fr auto;align-items:center;gap:16px;padding:18px 0;display:grid}.list .item:first-child{border-top:0}.list .item .title{font-weight:500}.tag{background:var(--bg3);height:24px;color:var(--fg2);border-radius:6px;align-items:center;padding:0 8px;font-size:12px;font-weight:500;display:inline-flex}.tag.ok{color:var(--ok);background:#e6f5ec}.tag.warn{color:var(--warn);background:#fbf1d9}.tag.bad{color:var(--bad);background:#fbe4e4}.tag.info{color:var(--info);background:#e6eefc}.bar{background:var(--bg3);border-radius:3px;height:6px;overflow:hidden}.bar i{background:var(--fg);border-radius:3px;height:100%;transition:width .3s;display:block}.empty{text-align:center;color:var(--fg3);border:1px dashed var(--line2);border-radius:var(--r);padding:64px 24px}.stats{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:16px;display:grid}.stat b{font:500 22px/1.2 var(--mono);font-variant-numeric:tabular-nums;display:block}.stat span{color:var(--fg3);margin-top:4px;font-size:12px;display:block}.toast{background:var(--fg);color:var(--bg);opacity:0;pointer-events:none;z-index:100;border-radius:10px;padding:10px 16px;font-size:14px;transition:all .2s;position:fixed;bottom:32px;left:50%;transform:translate(-50%)translateY(20px)}.toast.show{opacity:1;transform:translate(-50%)}.drop{border:1.5px dashed var(--line2);border-radius:var(--r);cursor:pointer;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;min-height:180px;padding:32px;transition:all .15s;display:flex}.drop.over,.drop:hover{border-color:var(--fg);background:var(--bg2)}.drop b{font-size:16px;font-weight:600}.center{place-items:center;min-height:100%;padding:32px;display:grid}.login{width:100%;max-width:420px}.studio{grid-template-columns:1fr 400px;height:calc(100vh - 60px);min-height:0;display:grid;overflow:hidden}.studio .stage{background:#0e1319;position:relative;overflow:hidden}.studio .stage canvas{display:block}.studio .stage .overlay{pointer-events:none;align-items:center;gap:8px;display:flex;position:absolute;top:16px;left:16px}.studio .stage .overlay>*{pointer-events:auto}.studio .stage .legend{color:#dfe3e8;font:12px var(--mono);flex-direction:column;gap:4px;display:flex;position:absolute;bottom:16px;left:16px}.studio .stage .legend canvas{border-radius:2px;width:160px;height:8px}.studio .stage .legend .lab{justify-content:space-between;width:160px;display:flex}.studio .stage .hud{color:#9aa3ad;font-size:12px;position:absolute;bottom:16px;right:16px}.studio .side{border-left:1px solid var(--line);background:var(--bg);flex-direction:column;gap:32px;min-height:0;padding:24px;display:flex;overflow:auto}.studio .side section{flex-direction:column;gap:12px;display:flex}.obj{border:1px solid var(--line);border-radius:var(--r2);margin-bottom:8px;padding:10px 12px}.obj.sel{border-color:var(--fg)}.obj .hd{cursor:pointer;align-items:center;gap:8px;display:flex}.obj .hd b{font-weight:500;font-family:var(--mono);font-size:13px}.obj .kv{margin-top:10px}.dot{border-radius:50%;flex:none;width:10px;height:10px;display:inline-block}.find{border:1px solid var(--line);border-radius:var(--r2);cursor:pointer;grid-template-columns:10px 1fr auto;align-items:center;gap:10px;margin-bottom:8px;padding:10px 12px;font-size:13px;display:grid}.find:hover{background:var(--bg2)}.find .v{font-family:var(--mono)}.find small{color:var(--fg3);display:block}.progress-panel{color:#dfe3e8;text-align:center;place-items:center;height:100%;padding:32px;display:grid}.progress-panel .bar{background:#26303c;width:320px}.progress-panel .bar i{background:#f0a63a}.thumbs{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:6px;display:grid}.thumbs img{aspect-ratio:16/9;object-fit:cover;background:var(--bg3);border-radius:6px;width:100%}.report{max-width:860px;margin:0 auto;padding:48px 32px}.report table{border-collapse:collapse;width:100%;font-size:13px}.report th,.report td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:8px 10px}.report th{color:var(--fg3);font-weight:500}@media print{.topbar,.no-print{display:none!important}.report{max-width:none;padding:0}body{font-size:12px}.card{border:0;padding:0}}@media (max-width:900px){.topbar{gap:12px;padding:0 16px}.page{padding:24px 16px 64px}.studio{grid-template-rows:55vh 1fr;grid-template-columns:1fr;height:auto}.studio .side{border-left:0;border-top:1px solid var(--line)}.btn{min-height:44px}}
