:root{--ink:#0B1A5C;--text:#1B2436;--muted:#6B7690;--faint:#9AA3B8;--accent:#2C61EF;--accent-soft:#E9EFFF;--bg:#EEF1F7;--sur:#FFFFFF;--sur2:#F7F8FC;--line:#DFE4EE;--line2:#EDF0F6;--nav:#0B1A5C;--nav2:#122470;--navtx:#C9D3F5;
--s1:#2C61EF;--s2:#0E8FB0;--s3:#D97706;--s4:#7C3AED;--good:#1E9E6A;--warn:#E8A13A;--crit:#E0524D;--l2:#E07B39;--good-bg:#E4F5EC;--warn-bg:#FFF3DF;--crit-bg:#FDEAE8;--unk:#C8CFDD;--map:#E6EBF3;--road:#FFFFFF;--water:#D5E4F5;
--sans:'Noto Sans KR','Apple SD Gothic Neo','Malgun Gothic',system-ui,sans-serif;--mono:'IBM Plex Mono',ui-monospace,Consolas,monospace;--shadow:0 1px 2px rgba(11,26,92,.06),0 4px 14px rgba(11,26,92,.05)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--ink:#C9D4FF;--text:#E6E9F2;--muted:#9AA4BE;--faint:#6F7890;--accent:#6B8CFF;--accent-soft:#1D2748;--bg:#0F1320;--sur:#171C2B;--sur2:#1C2233;--line:#2A3145;--line2:#232A3C;--nav:#0B1024;--nav2:#141B36;--navtx:#AEB8DA;--s1:#5B7FF5;--s2:#0FA396;--s3:#C4861A;--s4:#9F6BEA;--good:#2FB37D;--warn:#E5A032;--crit:#EF6B66;--l2:#E68A4C;--good-bg:#173626;--warn-bg:#3A2C12;--crit-bg:#3F1F1E;--unk:#3A4257;--map:#1A2033;--road:#242C44;--water:#16223A;--shadow:none}}
:root[data-theme="dark"]{--ink:#C9D4FF;--text:#E6E9F2;--muted:#9AA4BE;--faint:#6F7890;--accent:#6B8CFF;--accent-soft:#1D2748;--bg:#0F1320;--sur:#171C2B;--sur2:#1C2233;--line:#2A3145;--line2:#232A3C;--nav:#0B1024;--nav2:#141B36;--navtx:#AEB8DA;--s1:#5B7FF5;--s2:#0FA396;--s3:#C4861A;--s4:#9F6BEA;--good:#2FB37D;--warn:#E5A032;--crit:#EF6B66;--l2:#E68A4C;--good-bg:#173626;--warn-bg:#3A2C12;--crit-bg:#3F1F1E;--unk:#3A4257;--map:#1A2033;--road:#242C44;--water:#16223A;--shadow:none}
*{box-sizing:border-box}
html,body{height:100%}
body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:13px;line-height:1.45;margin:0}
button{font:inherit;cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.shell{display:grid;grid-template-columns:212px minmax(0,1fr);min-height:100%}
@media(max-width:860px){.shell{grid-template-columns:1fr}.nav{position:fixed;inset:0 auto 0 0;width:240px;transform:translateX(-100%);transition:transform .2s;z-index:30}.nav.open{transform:none}.hamb{display:inline-flex!important}}
.nav{background:var(--nav);color:var(--navtx);display:flex;flex-direction:column;padding:14px 10px calc(14px + env(safe-area-inset-bottom,0px))}
.brand{color:#fff;font-weight:900;font-size:16px;padding:6px 10px 14px;line-height:1.2}
.brand small{display:block;font-weight:500;font-size:10.5px;color:#8FA3E8;letter-spacing:.06em;margin-top:2px}
.nav a{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:8px;color:var(--navtx);cursor:pointer;font-size:13px;font-weight:500;user-select:none}
.nav a:hover{background:var(--nav2);color:#fff}
.nav a.on{background:var(--accent);color:#fff;font-weight:700}
.nav a .n{margin-left:auto;font-family:var(--mono);font-size:10.5px;background:rgba(255,255,255,.14);border-radius:10px;padding:0 6px}
.nav a .n.c{background:var(--crit);color:#fff}
.nav .grp{font-size:10px;letter-spacing:.14em;color:#6F84CC;font-weight:700;margin:12px 11px 4px}
.nav .foot{margin-top:auto;font-size:11px;color:#8FA3E8;padding:10px 11px;border-top:1px solid rgba(255,255,255,.1)}
.nav .foot b{color:#fff;display:block}
.top{display:flex;align-items:center;gap:8px;padding:10px 16px;background:var(--sur);border-bottom:1px solid var(--line);position:sticky;top:env(safe-area-inset-top,0px);z-index:10;flex-wrap:wrap}
.hamb{display:none;border:1px solid var(--line);background:var(--sur);border-radius:8px;width:34px;height:34px;align-items:center;justify-content:center;font-size:18px}
.top h1{font-size:16px;margin:0;color:var(--ink);font-weight:800}
.top .sub{color:var(--muted);font-size:12px}
.sim{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.sim .clk{font-family:var(--mono);font-size:12.5px;color:var(--text);background:var(--sur2);border:1px solid var(--line);border-radius:8px;padding:5px 9px;font-variant-numeric:tabular-nums}
.sim .clk i{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--good);margin-right:6px;animation:blink 1.2s infinite}
.sim .clk.paused i{background:var(--faint);animation:none}
@keyframes blink{50%{opacity:.3}}
@media (prefers-reduced-motion:reduce){.sim .clk i{animation:none}}
.btn{border:1px solid var(--line);background:var(--sur);color:var(--text);border-radius:8px;padding:6px 10px;font-size:12px;white-space:nowrap}
.btn.p{background:var(--accent);color:#fff;border-color:transparent;font-weight:700}
.btn.d{background:var(--crit);color:#fff;border-color:transparent;font-weight:700}
.btn.sm{padding:3px 8px;font-size:11.5px}
.btn.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.main{padding:14px 16px 40px;min-width:0}
.pill{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700;white-space:nowrap}
.pill i{width:6px;height:6px;border-radius:50%;background:currentColor;display:inline-block}
.pill.good{background:var(--good-bg);color:var(--good)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill.crit{background:var(--crit-bg);color:var(--crit)}.pill.neu{background:var(--sur2);color:var(--muted);border:1px solid var(--line)}.pill.acc{background:var(--accent-soft);color:var(--accent)}
.lv{display:inline-block;min-width:18px;height:18px;border-radius:5px;font-size:11px;font-weight:800;text-align:center;line-height:18px;color:#fff;padding:0 3px}
.lv.l1{background:var(--warn)}.lv.l2{background:var(--l2)}.lv.l3{background:var(--crit)}.lv.l0{background:var(--good)}.lv.lx{background:var(--unk)}
.tiles{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-bottom:12px}
@media(max-width:1000px){.tiles{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:520px){.tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
.tile{background:var(--sur);border:1px solid var(--line);border-radius:10px;padding:9px 11px;min-width:0}
.tile .l{font-size:11px;color:var(--muted)}
.tile .v{font-family:var(--mono);font-size:21px;font-weight:600;line-height:1.2;margin-top:2px;font-variant-numeric:tabular-nums}
.tile .v small{font-size:11px;color:var(--muted);font-family:var(--sans);font-weight:400;margin-left:3px}
.tile.bad .v{color:var(--crit)}.tile.wn .v{color:var(--warn)}.tile.ok .v{color:var(--good)}
.tile .s{font-size:11px;color:var(--muted);margin-top:2px}
.card{background:var(--sur);border:1px solid var(--line);border-radius:10px;padding:12px 14px;min-width:0}
.card h3{margin:0 0 8px;font-size:13px;color:var(--ink);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.card h3 .r{margin-left:auto;font-weight:400;font-size:11.5px;color:var(--muted);display:flex;gap:6px;align-items:center}
.g2{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:12px}
.g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
@media(max-width:1000px){.g2,.g3{grid-template-columns:1fr}}
.stack{display:grid;gap:12px}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th{text-align:left;font-size:11px;color:var(--muted);font-weight:600;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:6px 8px;border-bottom:1px solid var(--line2);vertical-align:middle}
tr.row:hover td{background:var(--sur2);cursor:pointer}
td.mono,.mono{font-family:var(--mono);font-size:12px;font-variant-numeric:tabular-nums}
td.mu{color:var(--muted)}
.tw{overflow-x:auto}
.feed{max-height:340px;overflow:auto;display:flex;flex-direction:column;gap:0}
.ev{display:grid;grid-template-columns:auto auto 1fr;gap:8px;align-items:start;padding:6px 0;border-bottom:1px solid var(--line2);font-size:12.5px}
.ev .t{font-family:var(--mono);font-size:11.5px;color:var(--muted);white-space:nowrap;padding-top:1px}
.ev small{display:block;color:var(--muted);font-size:11.5px}
.ev.new{animation:flash 1.5s}
@keyframes flash{from{background:var(--warn-bg)}to{background:transparent}}
.st{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:-1px}
.st.up{background:var(--good)}.st.warn{background:var(--warn)}.st.down{background:var(--crit)}.st.sup{background:var(--crit);opacity:.45}.st.off{background:var(--unk)}
.sitebar{display:grid;grid-template-columns:120px 1fr auto;gap:8px;align-items:center;padding:5px 0;font-size:12.5px}
.bar{display:flex;height:12px;border-radius:4px;overflow:hidden;background:var(--line2)}
.bar i{display:block;height:100%}
.bar i.up{background:var(--good)}.bar i.warn{background:var(--warn)}.bar i.down{background:var(--crit)}
/* alarms */
.al{display:grid;grid-template-columns:auto 1fr auto;gap:6px 10px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line2);font-size:12.5px}
.al .m small{display:block;color:var(--muted);font-size:11.5px}
.al .m b{font-weight:700}
.al .ops{display:flex;gap:4px;align-items:center}
.al.ack{opacity:.6}
.esc{font-family:var(--mono);font-size:10.5px;color:var(--muted);white-space:nowrap}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--sur)}
.seg span{padding:5px 10px;font-size:12px;color:var(--muted);cursor:pointer;white-space:nowrap;user-select:none}
.seg span.on{background:var(--ink);color:#fff;font-weight:700}
.filters{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.filters input,.filters select{border:1px solid var(--line);background:var(--sur);color:var(--text);border-radius:8px;padding:6px 9px;font:inherit;font-size:12.5px}
/* topology */
.topo{position:relative;background:var(--map);border-radius:10px;overflow:hidden;border:1px solid var(--line)}
.topo svg{width:100%;height:auto;display:block}
.topo .tip{position:absolute;background:var(--ink);color:#fff;font-size:11.5px;padding:5px 8px;border-radius:6px;pointer-events:none;display:none;z-index:2;white-space:nowrap;font-family:var(--mono)}
.node{cursor:pointer}
.node text{font-family:var(--sans);fill:var(--text);pointer-events:none}
.tree{font-size:12.5px}
.tree .lvl{margin-left:18px;border-left:1px dashed var(--line);padding-left:12px}
.tree .row{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:6px;flex-wrap:wrap}
.tree .row:hover{background:var(--sur2);cursor:pointer}
.tree .row b{font-weight:600}
.chips{display:flex;gap:3px;flex-wrap:wrap}
.chips i{width:11px;height:11px;border-radius:3px;display:block;cursor:pointer}
.chips i.up{background:var(--good)}.chips i.warn{background:var(--warn)}.chips i.down{background:var(--crit)}.chips i.sup{background:var(--crit);opacity:.4}
.side{background:var(--sur2);border:1px solid var(--line);border-radius:10px;padding:12px;font-size:12.5px;min-height:200px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;font-size:12px}
.kv b{color:var(--muted);font-weight:500}.kv span{font-family:var(--mono);font-size:11.5px}
/* field app */
.fwrap{display:grid;grid-template-columns:340px minmax(0,1fr);gap:16px;align-items:start}
@media(max-width:900px){.fwrap{grid-template-columns:1fr}}
.phone{width:340px;max-width:100%;border:10px solid #14172a;border-radius:34px;background:var(--sur);overflow:hidden;box-shadow:0 14px 40px rgba(0,0,0,.3);position:relative}
.phone .sb{background:var(--nav);color:#fff;padding:8px 14px 6px;font-size:11px;display:flex;justify-content:space-between;font-family:var(--mono)}
.phone .hd{background:var(--nav);color:#fff;padding:2px 14px 10px;font-weight:800;font-size:14px;display:flex;align-items:center;gap:8px}
.phone .hd small{font-weight:500;font-size:10.5px;opacity:.8;margin-left:auto}
.phone .scr{height:520px;overflow:auto;padding:10px 12px 14px;font-size:12.5px;background:var(--bg)}
.phone .tabbar{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);background:var(--sur)}
.phone .tabbar span{text-align:center;padding:7px 0 9px;font-size:10.5px;color:var(--muted);cursor:pointer}
.phone .tabbar span.on{color:var(--accent);font-weight:800}
.phone .tabbar span i{display:block;font-style:normal;font-size:17px;line-height:1.1}
.fcard{background:var(--sur);border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin-bottom:8px}
.fcard .h{display:flex;gap:6px;align-items:center;font-weight:700}
.fcard .h .r{margin-left:auto;font-size:11px;color:var(--muted);font-weight:400;font-family:var(--mono)}
.fcard p{margin:3px 0 0;color:var(--muted);font-size:11.5px}
.fbtn{display:block;width:100%;border:none;border-radius:10px;padding:10px;font-weight:800;font-size:13px;background:var(--accent);color:#fff;margin-top:8px}
.fbtn.g{background:var(--sur);color:var(--text);border:1px solid var(--line);font-weight:600}
.fbtn.d{background:var(--good)}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.fpush{background:var(--crit);color:#fff;border-radius:12px;padding:10px 12px;margin-bottom:8px;font-size:12px;box-shadow:0 6px 18px rgba(224,82,77,.35)}
.fpush b{display:block;font-size:12.5px}
.fpush .ops{display:flex;gap:6px;margin-top:8px}
.fpush .ops button{flex:1;border:none;border-radius:8px;padding:7px;font-weight:800;background:#fff;color:var(--crit)}
.fpush .ops button.g{background:rgba(255,255,255,.2);color:#fff}
.qr{aspect-ratio:1;border-radius:12px;background:#111;position:relative;overflow:hidden;max-width:100%}
.qr::before{content:"";position:absolute;inset:18%;border:2px solid #fff;border-radius:8px;box-shadow:0 0 0 999px rgba(0,0,0,.45)}
.qr i{position:absolute;left:18%;right:18%;height:2px;background:var(--good);top:30%;animation:scan 1.6s infinite alternate}
@keyframes scan{to{top:78%}}
@media (prefers-reduced-motion:reduce){.qr i{animation:none}}
.qr span{position:absolute;bottom:8px;left:0;right:0;text-align:center;color:#fff;font-size:11px}
.fmeta{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;font-size:11.5px}
.fmeta b{color:var(--muted);font-weight:500}.fmeta span{font-family:var(--mono);font-size:11px}
.fsel{width:100%;border:1px solid var(--line);border-radius:8px;padding:7px 9px;font:inherit;font-size:12px;background:var(--sur);color:var(--text);margin-top:4px}
.photos{display:flex;gap:6px;margin-top:6px}
.photos i{width:52px;height:40px;border-radius:6px;background:linear-gradient(160deg,#3a4a6b,#1c2438);display:block}
.photos i.add{background:var(--sur2);border:1px dashed var(--line);display:grid;place-items:center;font-style:normal;color:var(--muted);font-size:18px}
/* kanban */
.kb{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
@media(max-width:1000px){.kb{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.kb{grid-template-columns:1fr}}
.col{background:var(--sur2);border:1px solid var(--line);border-radius:10px;padding:8px;min-height:120px}
.col h4{margin:0 0 6px;font-size:12px;color:var(--muted);display:flex;gap:6px;align-items:center}
.col h4 .n{margin-left:auto;font-family:var(--mono);font-size:11px}
.tk{background:var(--sur);border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin-bottom:6px;font-size:12px}
.tk .h{display:flex;gap:6px;align-items:center;font-weight:700}
.tk .h .id{font-family:var(--mono);font-size:10.5px;color:var(--muted);font-weight:400;margin-left:auto}
.tk p{margin:3px 0 0;color:var(--muted)}
.tk .ops{display:flex;gap:4px;margin-top:6px}
/* charts */
.ch{background:var(--sur);border:1px solid var(--line);border-radius:10px;padding:10px 12px 6px;min-width:0;position:relative}
.ch .t{font-size:12.5px;font-weight:700;display:flex;gap:8px;align-items:baseline}
.ch .t small{font-weight:400;color:var(--muted);font-size:11px}
.ch .t .now{margin-left:auto;font-family:var(--mono);font-size:12px}
.ch svg{width:100%;height:auto;display:block;overflow:visible}
.tl .bar2{display:flex;height:20px;border-radius:6px;overflow:hidden;border:1px solid var(--line)}
.tl .bar2 i{display:block;height:100%}
.tl .bar2 i.up{background:var(--good)}.tl .bar2 i.down{background:var(--crit)}.tl .bar2 i.warn{background:var(--warn)}
.tl .days{display:grid;grid-template-columns:repeat(7,1fr);font-family:var(--mono);font-size:10.5px;color:var(--faint);margin-top:4px}
/* wizard/modal */
.mb{position:fixed;inset:0;background:rgba(5,12,40,.5);display:none;align-items:flex-start;justify-content:center;padding:30px 12px;overflow:auto;z-index:40}
.mb.show{display:flex}
.md{background:var(--sur);border-radius:14px;width:760px;max-width:100%;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.md .hd{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line);font-weight:800;color:var(--ink)}
.md .hd button{border:none;background:none;font-size:18px;color:var(--muted)}
.md .bd{padding:16px 18px}
.steps{display:flex;gap:4px;margin-bottom:14px;flex-wrap:wrap}
.steps span{flex:1;min-width:110px;text-align:center;font-size:11.5px;padding:6px;border-radius:7px;background:var(--sur2);color:var(--muted);border:1px solid var(--line)}
.steps span.on{background:var(--accent);color:#fff;border-color:transparent;font-weight:700}
.steps span.done{background:var(--good-bg);color:var(--good);border-color:transparent}
.fld{display:block;font-size:11.5px;color:var(--muted);margin:10px 0 4px;font-weight:600}
.in{width:100%;border:1px solid var(--line);background:var(--sur);color:var(--text);border-radius:8px;padding:8px 10px;font:inherit}
.prog{height:8px;border-radius:4px;background:var(--line2);overflow:hidden;margin:8px 0}
.prog i{display:block;height:100%;background:var(--accent);transition:width .3s}
.found{max-height:260px;overflow:auto;border:1px solid var(--line);border-radius:8px}
.toast{position:fixed;right:16px;bottom:calc(16px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:6px;z-index:50;max-width:min(380px,calc(100vw - 32px))}
.toast div{background:var(--ink);color:#fff;border-radius:10px;padding:9px 12px;font-size:12.5px;box-shadow:0 8px 24px rgba(0,0,0,.3);display:flex;gap:8px;align-items:flex-start}
.toast div.c{background:var(--crit)}.toast div.w{background:#B4700F}
.toast small{display:block;opacity:.8;font-size:11px}
.rules th,.rules td{font-size:12px}
.rules .inh{color:var(--faint);font-style:italic}
.rules .ov{background:var(--accent-soft);border-radius:4px;padding:0 4px}
.rep{background:var(--sur);border:1px solid var(--line);border-radius:10px;padding:16px 18px;font-size:12.5px;max-width:720px}
.rep h2{margin:0 0 4px;font-size:15px;color:var(--ink)}
.rep .sum{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0 12px}
.rep .sum span{background:var(--sur2);border:1px solid var(--line);border-radius:8px;padding:4px 10px;font-family:var(--mono);font-size:12px}
.rep h4{margin:12px 0 4px;font-size:12.5px;display:flex;gap:6px;align-items:center}
.empty{color:var(--muted);font-size:12.5px;padding:14px 0;text-align:center}
.scen{display:flex;gap:6px;flex-wrap:wrap}
.hint{font-size:11.5px;color:var(--muted);margin-top:6px}
.badge{font-family:var(--mono);font-size:10.5px;background:var(--sur2);border:1px solid var(--line);border-radius:6px;padding:0 5px;color:var(--muted)}

/* ===== DVIGO NMS 추가 스타일 ===== */
.login{min-height:100vh;display:grid;place-items:center;background:var(--nav);padding:20px}
.lbox{background:var(--sur);border-radius:14px;padding:26px 24px;width:360px;max-width:100%;box-shadow:0 20px 60px rgba(0,0,0,.4)}
.lbox .brand{color:var(--ink)}.lbox .brand small{color:var(--muted)}
.topo .bgimg{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:.55;pointer-events:none}
.topo svg.net{position:absolute;inset:0;width:100%;height:100%}
.node.drag{cursor:grabbing}
.node .lbl{font-size:13px;fill:var(--text);paint-order:stroke;stroke:var(--sur);stroke-width:3px;stroke-linejoin:round}
.tilemap{position:relative;overflow:hidden;background:var(--map);border-radius:10px;border:1px solid var(--line);aspect-ratio:16/9;cursor:grab;user-select:none}
.tilemap img.tile{position:absolute;width:256px;height:256px;pointer-events:none}
.tilemap .mk{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid #fff;transform:translate(-50%,-50%);box-shadow:0 1px 4px rgba(0,0,0,.4);cursor:pointer}
.tilemap .mk.up{background:var(--good)}.tilemap .mk.warn{background:var(--warn)}.tilemap .mk.down{background:var(--crit)}.tilemap .mk.unknown{background:var(--unk)}
.tilemap .mk span{position:absolute;top:14px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:10.5px;background:rgba(255,255,255,.85);color:#1B2436;border-radius:4px;padding:0 4px}
.tilemap .zc{position:absolute;right:8px;top:8px;display:flex;flex-direction:column;gap:4px;z-index:3}
.tilemap .zc button{width:28px;height:28px;border-radius:6px;border:1px solid var(--line);background:var(--sur);font-weight:800}
.tilemap .attr{position:absolute;left:6px;bottom:4px;font-size:10px;color:var(--muted);background:rgba(255,255,255,.7);padding:0 4px;border-radius:3px}
.tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:12px;border-bottom:1px solid var(--line)}
.tabs span{padding:7px 12px;font-size:12.5px;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.tabs span.on{color:var(--accent);border-color:var(--accent);font-weight:700}
.frm{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 14px}
.frm .full{grid-column:1/-1}
@media(max-width:640px){.frm{grid-template-columns:1fr}}
.chk{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;margin-right:12px;cursor:pointer}
.ports td{padding:4px 6px}
.ports .ok{color:var(--good)}.ports .dn{color:var(--crit)}
.spark{display:inline-block;vertical-align:middle}
.help{background:var(--accent-soft);border-radius:8px;padding:8px 10px;font-size:12px;color:var(--text);margin-bottom:10px}
.evt-lv0{color:var(--muted)}.evt-lv1{color:var(--warn)}.evt-lv2{color:var(--crit)}
.rowsel td{background:var(--accent-soft)!important}
.cfgrow{display:grid;grid-template-columns:200px 1fr 1fr;gap:8px;align-items:center;padding:5px 0;border-bottom:1px solid var(--line2);font-size:12.5px}
.cfgrow input{border:1px solid var(--line);border-radius:6px;padding:5px 8px;font:inherit;font-size:12px;background:var(--sur);color:var(--text)}
.cfgrow small{color:var(--muted)}
@media(max-width:800px){.cfgrow{grid-template-columns:1fr}}
.rep-frame{width:100%;height:70vh;border:1px solid var(--line);border-radius:8px;background:#fff}
.dropzone{border:2px dashed var(--line);border-radius:10px;padding:18px;text-align:center;color:var(--muted);cursor:pointer}
.dropzone.over{border-color:var(--accent);background:var(--accent-soft)}
.field-app{max-width:480px;margin:0 auto;min-height:100vh;background:var(--bg);display:flex;flex-direction:column}
.field-app .fhd{background:var(--nav);color:#fff;padding:12px 14px;font-weight:800;display:flex;align-items:center;gap:8px;position:sticky;top:0;z-index:5}
.field-app .fhd small{margin-left:auto;font-weight:500;opacity:.85;font-size:11px}
.field-app .fbody{flex:1;padding:10px 12px 70px}
.field-app .tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:480px;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);background:var(--sur);padding-bottom:env(safe-area-inset-bottom,0px)}
.field-app .tabbar span{text-align:center;padding:8px 0 9px;font-size:10.5px;color:var(--muted);cursor:pointer}
.field-app .tabbar span.on{color:var(--accent);font-weight:800}
.field-app .tabbar span i{display:block;font-style:normal;font-size:18px;line-height:1.1}
.photos img{width:64px;height:48px;object-fit:cover;border-radius:6px;border:1px solid var(--line)}
.mini{font-size:11px;color:var(--muted)}
.lic{background:var(--warn-bg);color:#7a4a00;border-radius:8px;padding:6px 10px;font-size:12px;margin-bottom:10px}

body.fieldm .toast{bottom:calc(72px + env(safe-area-inset-bottom,0px))}

/* [v0.1.3] 카메라 화면 캡처 */
.snap{background:#0b1220;border-radius:8px;overflow:hidden;min-height:60px;margin-top:8px}
.snap img{width:100%;display:block;cursor:zoom-in}
.snap .empty{padding:14px;color:#9fb0c8}
.snapbar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px;flex-wrap:wrap}
.camgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.camgrid .cam{background:var(--sur);border:1px solid var(--line);border-radius:10px;overflow:hidden;cursor:pointer;transition:box-shadow .15s}
.camgrid .cam:hover{box-shadow:var(--shadow)}
.camgrid .cam.down{border-color:var(--crit)}
.camgrid .cam img,.camgrid .cam .noimg{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;background:#0b1220}
.camgrid .cam .noimg{display:flex;align-items:center;justify-content:center;color:#9fb0c8;font-size:12px}
.camgrid .cam .cap{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:6px 8px;font-size:12.5px;font-weight:600;color:var(--ink)}
.camgrid .cam .cap span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
