/* 현장용: 글자 18px 이상, 단추 56px 이상, 흰 바탕·검정 글씨·숫자 빨강 */
*{box-sizing:border-box}
html,body{margin:0;background:#f7f2f3;color:#111;font:18px/1.5 "Malgun Gothic","Noto Sans KR",system-ui,sans-serif}
.top{position:sticky;top:0;z-index:5;display:flex;flex-direction:column;padding:10px 16px calc(10px);padding-top:calc(10px + env(safe-area-inset-top));color:#fff;background:linear-gradient(100deg,#5b1323,#7a1d30 45%,#93304a)}
.top b{font-size:22px}.top .y{color:#ffcf5a}.top small{font-size:14px;opacity:.9}
main{padding:12px 16px 110px;max-width:720px;margin:0 auto}
h1{font-size:22px;margin:8px 0 10px}h2{font-size:19px;color:#6d1626;margin:18px 0 8px}
label{display:block;margin:10px 0}
input,textarea{width:100%;font-size:18px;min-height:52px;padding:8px 12px;border:1.5px solid #c9b3b8;border-radius:12px;background:#fff}
input[type=checkbox]{width:26px;min-height:26px;height:26px;vertical-align:middle;margin-right:6px}
input[type=file]{padding:12px}
button{min-height:56px;font-size:18px;font-weight:700;padding:8px 14px;border-radius:12px;border:2px solid #d9b7be;background:#fff;color:#6d1626;cursor:pointer}
button.primary{background:#7a1d30;border-color:#7a1d30;color:#fff;width:100%;margin:10px 0}
button.danger{background:#fff;border-color:#d22f24;color:#d22f24;width:100%}
button:disabled{opacity:.5}
.msg{min-height:1.5em;font-weight:700;color:#6d1626}.hint{color:#333;font-size:16px}.warn{color:#b3261e;font-weight:700;font-size:16px}
.agree{font-size:16px}
.n{color:#D22F24;font-weight:900;font-variant-numeric:tabular-nums}
.cards{list-style:none;margin:0;padding:0}
.card{background:#fff;border:1px solid #eadfe2;border-left:8px solid #d22f24;border-radius:14px;padding:12px;margin:10px 0}
.card .h{display:flex;gap:10px;align-items:baseline}.card .rk{font-size:24px}.card .pl{font-size:20px;font-weight:800}
.card .sub{font-size:15px;color:#333}.card .why{margin:6px 0}.card .first{font-size:15px;background:#faf6f7;border-radius:8px;padding:6px 8px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}.chips span{background:#fdecea;border-radius:999px;padding:2px 10px;font-size:15px}
.card .btns{display:flex;gap:8px;margin-top:8px}.card .btns button{flex:1}
.sum{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:10px 0}.sum div{background:#fff;border-radius:12px;padding:10px;border:1px solid #eadfe2}
.sum b{display:block;font-size:30px}.sum span{font-size:15px}
.box{background:#fff;border:1px solid #eadfe2;border-radius:14px;padding:10px 12px;margin:10px 0}
.box.red{border-left:8px solid #d22f24}.box.violet{border-left:8px solid #8a3fd0}
.list{list-style:none;padding:0;margin:0}.list li{background:#fff;border-radius:10px;padding:8px 10px;margin:6px 0;border:1px solid #eee;font-size:16px}
.raw{font:13px/1.4 Consolas,monospace;white-space:pre-wrap;word-break:break-all;background:#111;color:#eee;border-radius:10px;padding:8px;max-height:55vh;overflow:auto}
.place{font-size:20px;font-weight:800}
.cam{position:relative;background:#000;border-radius:12px;overflow:hidden;aspect-ratio:4/3}
.cam video{width:100%;height:100%;object-fit:cover}
#countdown{position:absolute;right:10px;top:8px;color:#fff;font-size:32px;font-weight:900;text-shadow:0 0 6px #000}
.row{display:flex;gap:8px;margin:8px 0}.row button{flex:1;font-size:16px}
.shots{display:flex;gap:8px;flex-wrap:wrap}.shots img,.shots video{width:30%;border-radius:8px;border:2px solid #1e8e3e}
fieldset{border:1px solid #d9cdd1;border-radius:12px;margin:10px 0}fieldset label{margin:6px 0}
.tabs{position:fixed;left:0;right:0;bottom:0;display:flex;background:#fff;border-top:1px solid #ddd;padding-bottom:env(safe-area-inset-bottom);z-index:6}
.tabs button{flex:1;border:0;border-radius:0;min-height:62px;font-size:17px;background:#fff;color:#444}
.tabs button[aria-selected=true]{color:#7a1d30;border-top:4px solid #7a1d30;background:#fbf3f4}
dialog{width:min(96vw,720px);border:0;border-radius:16px;padding:14px}dialog::backdrop{background:#0007}
.ok{color:#1e8e3e;font-weight:800}.bad{color:#b3261e;font-weight:800}
.sum button{background:#fff;border-radius:12px;padding:10px;border:1px solid #eadfe2;text-align:left;font:inherit;color:inherit;cursor:pointer}
.sum button:active{background:#faf0f1}.sum i{display:block;font-style:normal;font-size:14px;color:#d22f24;font-weight:700}
.back{background:none;border:0;color:#d22f24;font-size:17px;font-weight:700;padding:6px 0;cursor:pointer}
.filt{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}.filt button{border:1px solid #d9c6ca;background:#fff;border-radius:16px;padding:6px 12px;font-size:15px}
.filt button.on{background:#d22f24;color:#fff;border-color:#d22f24}
.card.k2{border-left-color:#e3a21a}.card.k3{border-left-color:#8a8f98}.card.hl{outline:3px solid #e3a21a}
.top .org{font-size:13px;opacity:.85;letter-spacing:.02em}
.al{border-left:6px solid #8a8f98}.al.red{border-left-color:#d22f24}.al.violet{border-left-color:#7b4bb7}.al small{color:#444}
.tag{background:#fff3cd;border-radius:6px;padding:0 6px;font-size:14px;font-weight:700;color:#7a5a00}

.define{background:#fff7e0;border:1px solid #f1d58a;border-radius:12px;padding:10px 12px;font-size:16px;margin:8px 0;display:flex;gap:8px;align-items:center;justify-content:space-between}.define[hidden]{display:none}.define button{border:0;background:none;font-size:18px;cursor:pointer}
/* ---- 움직임(1초 안팎, '움직임 줄이기' 설정이면 끔) ---- */
.mini{display:block;position:relative;width:100%;height:230px;padding:0;border:1px solid #eadfe2;border-radius:16px;background:linear-gradient(#eef3f8,#fbf8f4);overflow:hidden;margin:4px 0 8px}
.mini canvas{width:100%;height:100%;display:block}
.mini-go{position:absolute;right:10px;top:8px;font-size:15px;color:#6d1626;background:rgba(255,255,255,.85);border-radius:999px;padding:2px 10px}
.mini-note{position:absolute;left:10px;bottom:8px;font-size:14px;color:#b3261e;background:rgba(255,255,255,.85);border-radius:999px;padding:2px 10px}
.mini-note:empty{display:none}
.big3d{height:58vh;min-height:320px;border:1px solid #eadfe2;border-radius:16px;background:linear-gradient(#eef3f8,#fbf8f4);overflow:hidden;touch-action:none}
.big3d canvas{width:100%;height:100%;display:block}
.chip{min-height:44px;font-size:16px;padding:4px 12px;border-radius:999px}.chip.hot{border-color:#d22f24;color:#d22f24}
.strip{display:block;width:100%;text-align:left;border-radius:12px;padding:10px 14px;margin:6px 0;font-size:17px;font-weight:600;min-height:52px}
.strip.ok{background:#eaf6ec;border:2px solid #9ccfa5;color:#1f5e2c}
.strip.bad{background:#fdecea;border:2px solid #d22f24;color:#8a1c14;animation:stripPulse 2.4s ease-in-out infinite}
@keyframes stripPulse{0%,100%{background:#fdecea}50%{background:#f9c9c3}}
.prog{margin:8px 0}.steps{display:flex;gap:6px;list-style:none;padding:0;margin:0 0 8px;font-size:15px}
.steps li{flex:1;text-align:center;padding:6px 4px;border-radius:10px;background:#eee;color:#666;transition:background .3s,color .3s}
.steps li.on{background:#7a1d30;color:#fff}.steps li.done{background:#f3d9df;color:#6d1626}
.bar{height:12px;border-radius:999px;background:#eadfe2;overflow:hidden}.bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#d22f24,#f7731c,#ffcf5a);border-radius:999px}
.card.in{animation:cardIn .45s cubic-bezier(.2,.8,.2,1) both}
@keyframes cardIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.ev{height:8px;border-radius:999px;background:#f3e6e9;margin:6px 0;overflow:hidden}.ev i{display:block;height:100%;width:var(--w);background:#d22f24;border-radius:999px;transform-origin:left;animation:evGrow .7s ease-out both}
@keyframes evGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
button,.card,.press{transition:transform .12s ease,box-shadow .12s ease}
button:active,.press:active,.card:active{transform:scale(.97)}
.sum button:active{box-shadow:inset 0 0 0 2px #d22f24}
.tabs:not([hidden]){display:grid;grid-template-columns:repeat(5,1fr)}.tabs button{font-size:16px;padding:6px 2px}
@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
.tabs[hidden]{display:none!important}
.define{display:block;position:relative;padding-right:40px}.define b{color:#b3261e}.define button{position:absolute;right:6px;top:4px;min-height:32px;padding:0 6px}
.strip[hidden],.prog[hidden]{display:none}

/* ===== 상태 색 규칙(홈·단지·순위 공통) =====
   비화재보 #D22F24 빨강 · 경보 #F08A1C 주황 · 고장 #8A3FD0 보라 · 정상 #2E8B57 초록 · 조치 완료 #1F6FB2 파랑 */
:root{--c-fire:#D22F24;--c-alarm:#F08A1C;--c-fault:#8A3FD0;--c-ok:#2E8B57;--c-done:#1F6FB2}
.card.k-fire,.box.k-fire,.sum .k-fire{border-left:8px solid var(--c-fire)}
.card.k-alarm,.box.k-alarm,.sum .k-alarm{border-left:8px solid var(--c-alarm)}
.box.k-fault,.al.k-fault{border-left:8px solid var(--c-fault)}.al.k-fire{border-left:6px solid var(--c-fire)}
.card.done{border-left:8px solid var(--c-done)}
.st{margin-left:auto;font-size:14px;font-weight:800;border-radius:999px;padding:2px 10px;white-space:nowrap}.st.fire{background:#fdecea;color:var(--c-fire)}.st.done{background:#e6f0fa;color:var(--c-done)}
.c-done-t{color:var(--c-done)}
.legend{position:absolute;left:8px;bottom:8px;z-index:6;background:rgba(255,255,255,.9);border-radius:10px;padding:2px 8px;font-size:13px;max-width:70%}
.legend summary{cursor:pointer;font-weight:700;list-style:none}.legend span{display:inline-flex;align-items:center;gap:4px;margin:2px 6px 2px 0}
.legend i{display:inline-block;width:12px;height:12px;border-radius:3px}.c-fire{background:var(--c-fire)}.c-alarm{background:var(--c-alarm)}.c-fault{background:var(--c-fault)}.c-done{background:var(--c-done)}.c-ok{background:var(--c-ok)}

/* ===== 3D 단지 자리 ===== */
.k3dslot{position:relative;border-radius:16px;overflow:hidden;background:linear-gradient(#2a2f4a,#6b5a7a);margin:4px 0 10px}
.k3dslot.home{height:50vh;min-height:260px;cursor:pointer}
.k3dslot.site{height:58vh;min-height:320px}
.k3dslot.nogl::after{content:attr(data-msg);position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;padding:16px;text-align:center}
.k3dslot #sceneBox126,.k3dslot #site3d126{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;max-width:none!important}
.k3dslot #site3d126 canvas{width:100%!important;height:100%!important;display:block}
.k3dslot.home #sceneBox126{pointer-events:none}   /* 홈: 손가락으로 내리면 화면만 내려가고 3D는 돌지 않음 */
.k3dslot.home .scene-building-rail1224,.k3dslot.home .status-panel1233,.k3dslot.home .toolbar1234,.k3dslot.home .hint3d{display:none!important}
.k3dslot .scene-tools126,.k3dslot .hint3d{display:none!important}
.k3d-go{position:absolute;right:10px;top:8px;z-index:6;font-size:15px;font-weight:700;color:#5b1323;background:rgba(255,255,255,.9);border-radius:999px;padding:3px 12px}
.k3dfull{position:fixed;inset:0;z-index:50;background:#1c1e2c;display:flex;flex-direction:column}
.k3dfull[hidden]{display:none}
.k3dfull-bar{display:flex;align-items:center;justify-content:space-between;color:#fff;padding:calc(8px + env(safe-area-inset-top)) 12px 8px}
.k3dfull-bar button{min-height:44px;background:#fff;color:#5b1323;border:0}
.k3dslot.full{flex:1;border-radius:0;margin:0}
.k3dslot.full #site3d126 canvas{touch-action:none!important}
.k3dfull-tools{display:flex;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom));background:#1c1e2c}
.k3dfull-tools button{flex:1;min-height:48px;font-size:18px;padding:4px}
body.noscroll{overflow:hidden}

/* ===== 홈 ===== */
.mini-card{padding:10px 12px;margin:8px 0}.mini-card .pl{font-size:18px}.mini-card .rk{font-size:22px}
.today li{display:flex;align-items:center;min-height:52px;font-size:17px;font-weight:600;cursor:pointer;border-left:6px solid #ccc}
.today li.t-fire{border-left-color:var(--c-fire)}.today li.t-fault{border-left-color:var(--c-fault)}.today li.t-ok{border-left-color:var(--c-ok);cursor:default}
#go-upload{margin-top:14px}
.prog .mini{height:170px;margin:0 0 8px;border:1px solid #eadfe2;border-radius:14px;background:linear-gradient(#eef3f8,#fbf8f4);position:relative;overflow:hidden}
.prog .mini canvas{width:100%;height:100%;display:block}

/* ===== 더보기 ===== */
.menu{display:flex;flex-direction:column;gap:8px}.menu button{text-align:left;width:100%;display:flex;flex-direction:column;align-items:flex-start;min-height:64px}
.menu small{font-size:14px;font-weight:400;color:#555}
#page-b h3{font-size:17px;margin:12px 0 4px;color:#6d1626}
.shots img{cursor:crosshair}
.k3dslot.home .lbl{transform:scale(.72);transform-origin:center bottom}
.k3dslot.home .lbl *{pointer-events:none}
.k3dslot.site .lbl,.k3dslot.full .lbl{transform:scale(.85);transform-origin:center bottom}
.top{z-index:30}.tabs{z-index:30}
.legend,.k3d-go{z-index:4}

.ver{text-align:center;color:#888;font-size:13px;margin:24px 0 8px}
.demo-btn{width:100%;margin:6px 0;display:flex;flex-direction:column;align-items:center}.demo-btn small{font-size:14px;font-weight:400;color:#555}
.demo-bar{position:sticky;top:0;z-index:31;background:#1F6FB2;color:#fff;font-size:14px;font-weight:700;text-align:center;padding:4px 8px}
.demo-bar[hidden]{display:none}
.sum .split{display:block;font-style:normal;font-size:13px;color:#555;line-height:1.3;margin:2px 0}

.toast{position:fixed;left:50%;bottom:90px;transform:translateX(-50%);background:rgba(20,20,20,.88);color:#fff;padding:10px 18px;border-radius:999px;font-size:16px;z-index:60;opacity:0;transition:opacity .2s;pointer-events:none}.toast.on{opacity:1}

.linkish{background:none;border:0;padding:0;min-height:0;font:inherit;color:#6d1626;text-decoration:underline;cursor:pointer}
.house-body .vestibule-scroll1220{overflow-x:auto;-webkit-overflow-scrolling:touch}
.house-body{font-size:15px}
#unitInspection1221{position:fixed;inset:0;z-index:45;overflow:auto;background:#fff;padding:12px 14px calc(80px + env(safe-area-inset-bottom))}

/* 실시간 판 */
.live{background:#fff;border:1px solid #eadfe2;border-radius:14px;padding:10px 12px;margin:6px 0 10px}
.live-top{display:flex;align-items:center;gap:8px;font-size:16px}
.dot{width:12px;height:12px;border-radius:50%;background:#9aa0a6;flex:none}.dot.live{background:#2E8B57}.dot.replay{background:#F08A1C;animation:stripPulse 1.6s ease-in-out infinite}
.live[data-state=replay] .live-top b{color:#b35a00}
.live-totals{font-size:16px;margin:6px 0}.live-totals small{color:#777}
.live-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin:6px 0}.live-tabs button{min-height:40px;font-size:14px;padding:2px;border-radius:10px}
.live-tabs button[aria-selected=true]{background:#7a1d30;color:#fff;border-color:#7a1d30}
.live-list{max-height:260px;overflow:auto}.live-list li{border-left:6px solid #ccc;cursor:pointer}.live-list li.lv-fire{border-left-color:var(--c-fire)}.live-list li.lv-alarm{border-left-color:var(--c-alarm)}.live-list li.lv-fault{border-left-color:var(--c-fault)}
.live-replay{display:flex;gap:6px;margin-top:6px}.live-replay select{flex:1;min-height:44px;font-size:14px;border-radius:10px}.live-replay button{min-height:44px;font-size:15px}

.tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:8px 0}
.tile{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;min-height:84px;border-left:6px solid #ccc;font-weight:400}.tile b{font-size:18px;font-weight:800}.tile span{font-size:14px;color:#333}
.tile.k-fire{border-left-color:var(--c-fire)}.tile.k-fault{border-left-color:var(--c-fault)}
.c-fault-t{color:var(--c-fault);font-weight:700}.c-test-t{color:#7a6a00;font-weight:700}
.st.test{background:#fff3cd;color:#7a5a00}
.z-fire{border-left:6px solid var(--c-fire)!important}.z-fault{border-left:6px solid var(--c-fault)!important}.z-rec{border-left:6px solid #bbb!important}.z-none{border-left:6px solid #eee!important;color:#888}
.unfold{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px}.ucol{display:flex;flex-direction:column;gap:3px;align-items:center}
.ucell{min-height:30px;min-width:44px;padding:2px 4px;font-size:12px;border-radius:6px;border:1px solid #ccc;background:#fff;color:#333;font-weight:700}
.ucell.fire{background:var(--c-fire);color:#fff;border-color:var(--c-fire)}.ucell.fault{background:var(--c-fault);color:#fff;border-color:var(--c-fault)}.ucell.none{background:#eee;color:#999}
.tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.tbl{border-collapse:collapse;font-size:14px;min-width:620px}.tbl th,.tbl td{border:1px solid #ddd;padding:4px 6px;text-align:left;white-space:nowrap}.tbl th{background:#f6eef0}
.row2{display:flex;gap:8px;flex-wrap:wrap}.row2>*{flex:1}
.person{border:1px solid #eadfe2;border-radius:12px;padding:10px;margin:8px 0}.person.add{background:#faf6f7}.pon{display:inline-flex;align-items:center;margin-right:8px}
.qrrow{display:flex;gap:10px;align-items:center;margin:6px 0}.qr{width:110px;height:110px;border:1px solid #ddd;border-radius:6px}.qrrow code{display:block;background:#f3eef0;border-radius:6px;padding:4px 6px;font-size:13px;word-break:break-all}
select{min-height:44px;font-size:16px;border-radius:10px}

.helper-frame{width:100%;height:calc(100vh - 230px);min-height:480px;border:1px solid #eadfe2;border-radius:12px;background:#fff}

/* 호수배치도: 키오스크처럼 위 이동 줄, 표 안에서 밀어 보기, 머리줄·층 칸 고정 */
.crumb{position:sticky;top:0;z-index:8;display:flex;justify-content:space-between;align-items:center;gap:6px;background:rgba(255,250,248,.96);border-bottom:1px solid #eadfe2;padding:6px 0;margin:-4px 0 6px}
.crumb a{color:#6d1626;font-weight:700;cursor:pointer}.crumb b{color:#6d1626}.crumb button{min-height:42px;font-size:15px;padding:4px 10px;margin-left:4px}
#houseBody126 .vestibule-scroll1220{max-height:70vh;overflow:auto;-webkit-overflow-scrolling:touch;border:1px solid #c9d2d8;border-radius:10px}
#houseBody126 .vestibule-head1220{position:sticky;top:0;z-index:3;background:#eef2f4}
#houseBody126 .vestibule-row1220>b:first-child{position:sticky;left:0;z-index:2}
#houseBody126 .vestibule-plan1220{margin:0}

.tabs button{font-size:15px}

.live-add{display:inline-block;background:#F08A1C;color:#fff;border-radius:999px;padding:0 8px;font-size:12px;font-weight:700;margin-top:2px}
.tile.pulse{animation:stripPulse 1.6s ease-in-out 3}

.tabs:not([hidden]){grid-template-columns:repeat(6,1fr)}.tabs button{font-size:13px;padding:4px 1px;line-height:1.2}
.menu a.callc{display:flex;flex-direction:column;align-items:flex-start;text-decoration:none;color:#6d1626;background:#fff;border:2px solid #d9b7be;border-radius:12px;padding:8px 14px;min-height:64px}.menu a.callc small{font-size:15px;color:#333}

/* 단지 카드: 키오스크 그림·움직임 */
#site-tiles.tiles{grid-template-columns:repeat(3,1fr);gap:7px}
.tile.pic{position:relative;overflow:hidden;align-items:center;text-align:center;justify-content:flex-start;border-left:0;border:1px solid #e1d4d9;border-top:5px solid #e1d4d9;border-radius:16px;background:#fffdfd;box-shadow:0 4px 0 #6e22331a,0 8px 14px #5127330f;padding:8px 4px 9px;min-height:0;gap:1px}
.tile.pic.k-fire{border-top-color:var(--c-fire)}.tile.pic.k-fault{border-top-color:var(--c-fault)}
.tile.pic svg{width:66%;height:auto;aspect-ratio:1;display:block;overflow:visible;margin-bottom:2px}
.tile.pic b{font-size:16px;word-break:keep-all}.tile.pic span{font-size:13px;line-height:1.3}
.tile.pic span .n{font-size:16px;color:var(--c-fire)}
.tile.pic .live-add{font-size:11.5px}
.tile.pic::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(108deg,transparent 5%,#ffffff00 22%,#ffffff80 49%,#ffffff00 76%,transparent 95%) -140% 0/45% 100% no-repeat;animation:m-shine 6s linear infinite;animation-delay:var(--sd,0s)}
.tile.pic:active{transform:translateY(3px) scale(.985)}
.mp{transform-box:fill-box;transform-origin:center;animation-duration:2.8s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-delay:var(--pd,var(--d,0s))}
.m-float{animation-name:m-float;animation-duration:3.2s}
.m-alarm{animation-name:m-alarm;animation-duration:1.6s}
.m-scan{animation-name:m-scan;animation-duration:3.4s;animation-timing-function:linear}
.m-window{animation-name:m-window;animation-duration:3.8s}
.m-car{animation-name:m-car;animation-duration:3.5s}
.m-rotor{transform-box:view-box;animation-name:m-spin;animation-duration:3s;animation-timing-function:linear}
.m-smoke{animation-name:m-smoke;animation-duration:3.1s;animation-timing-function:ease-out}
.m-bounce{animation-name:m-bounce;animation-duration:2.7s}
@keyframes m-shine{0%,65%{background-position:-140% 0}100%{background-position:240% 0}}
@keyframes m-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-3.5px)}}
@keyframes m-alarm{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes m-scan{0%{transform:translateY(0);opacity:0}15%{opacity:.55}85%{opacity:.55}100%{transform:translateY(105px);opacity:0}}
@keyframes m-window{0%,100%{fill:#b9d9e7}48%,68%{fill:#ffcf72}}
@keyframes m-car{0%,15%,100%{transform:translateX(0)}50%,65%{transform:translateX(-14px)}}
@keyframes m-spin{to{transform:rotate(360deg)}}
@keyframes m-smoke{0%{transform:translate(0,0) scale(.7);opacity:.5}100%{transform:translate(5px,-14px) scale(1.25);opacity:0}}
@keyframes m-bounce{0%,70%,100%{transform:translateY(0)}35%{transform:translateY(-6px)}52%{transform:translateY(-2px)}}

/* 위치 카드(키오스크 탭) */
.ztabs{display:flex;gap:6px;overflow-x:auto;padding:4px 0 8px;scrollbar-width:none}
.ztabs button{flex:0 0 auto;border-radius:999px;padding:9px 14px;font-size:15px;background:#fff;border:1px solid #d9c6cc;color:#5b2232}
.ztabs button[aria-selected=true]{background:#7d263d;color:#fff;border-color:transparent}
.zk{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:6px 0}
.zk button{position:relative;display:flex;flex-direction:column;align-items:flex-start;padding:10px;border-radius:14px;background:#fff;border:1px solid #e1d4d9;box-shadow:0 3px 0 #e1d5d8}
.zk small{font-size:13px;color:#555}.zk b{font-size:28px;color:var(--c-fire)}.zk i{position:absolute;right:9px;bottom:8px;font-style:normal;color:#999}
.znote{font-size:13.5px;color:#444;background:#faf3f5;border-radius:10px;padding:8px}
.ztw{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid #e3d6db;border-radius:10px;max-height:62vh}
.ztbl{border-collapse:collapse;font-size:13px;min-width:100%}
.ztbl th{position:sticky;top:0;background:#f1e6e8;white-space:nowrap;padding:6px 8px;text-align:left}
.ztbl td{padding:6px 8px;border-top:1px solid #eee;white-space:nowrap;vertical-align:top}
.ztbl td.nat-l{color:#b23a2a;font-weight:700}.ztbl td.nat-s{color:#1f6fa8;font-weight:700}

.zrec{background:#fff;border:1px solid #e3d6db;border-left:5px solid #c9a3ae;border-radius:12px;margin:8px 0;padding:8px 10px}
.zrh{font-weight:800;color:#5b2232;margin-bottom:4px}
.zrec dl{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:0;font-size:14px}
.zrec dt{color:#666;white-space:nowrap}.zrec dd{margin:0;word-break:keep-all;overflow-wrap:anywhere}
.zrec dd.nat-l{color:#b23a2a;font-weight:700}.zrec dd.nat-s{color:#1f6fa8;font-weight:700}

.m-rise{transform-box:view-box;animation-name:m-rise;animation-duration:3.6s;animation-timing-function:ease-in}
@keyframes m-rise{0%{transform:translateY(0);opacity:0}10%{opacity:1}85%{opacity:1}100%{transform:translateY(-104px);opacity:0}}
header.top{position:relative}
.hdr-tools{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.hdr-tools button,.hdr-tools .music-controls126 button{font-size:13px!important;min-height:32px!important;padding:4px 10px!important;border-radius:999px!important;background:#ffffff1f!important;color:#fff!important;border:1px solid #ffffff55!important;font-weight:700}
.hdr-tools button[aria-pressed=false]{opacity:.7}
#musicToggle126[aria-pressed=true]{background:#fff5d9!important;color:#63202a!important}
#musicPanel126{font-size:16px!important;width:calc(100vw - 32px)!important;padding:18px!important}
#musicPanel126 h2{font-size:20px!important}

/* 숫자 움직임(게임처럼): 통통 튀기 · 늘어나면 크게 튀어 오르기 */
.nm-bob,.sum [data-to]{display:inline-block;animation:nm-bob 3.2s ease-in-out infinite;animation-delay:var(--nmd,0s);transform-origin:50% 80%}
.nm-pop{animation:nm-pop .7s cubic-bezier(.2,1.6,.4,1) 1,nm-bob 3.2s ease-in-out .7s infinite!important}
@keyframes nm-bob{0%,74%,100%{transform:none}80%{transform:translateY(-5px) scale(1.14)}86%{transform:translateY(1px) scale(.97)}92%{transform:translateY(-1px)}}
@keyframes nm-pop{0%{transform:scale(1);color:inherit}35%{transform:scale(1.7) translateY(-4px);color:#ff3b30;text-shadow:0 0 10px #ffb199}100%{transform:scale(1)}}
#live-list li.lv-new{animation:lv-in .55s cubic-bezier(.2,1.3,.4,1) 1,lv-glow 1.6s ease-out 1}
@keyframes lv-in{0%{transform:translateY(-22px) scale(.96);opacity:0}100%{transform:none;opacity:1}}
@keyframes lv-glow{0%{box-shadow:0 0 0 4px #ff6b5a99;background:#fff1ee}100%{box-shadow:0 0 0 0 #ff6b5a00}}

#site3d126 [data-place126]{cursor:pointer;pointer-events:auto}
#site3d126 [data-place126]:active{transform:scale(.94)}

/* 현장조치 카운터 */
.act-counter{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 6px;width:100%;margin:8px 0 4px;padding:10px 12px;border-radius:14px;background:linear-gradient(135deg,#e9f7ef,#fff);border:1px solid #9fd3b4;box-shadow:0 3px 0 #cfe9d9;text-align:left;color:#14532d}
.act-counter>span{font-weight:800;font-size:16px}.act-counter>b{font-size:28px;color:#15803d}
.act-counter small{flex:1 1 100%;font-size:13.5px;color:#245}.act-counter small b{color:#15803d}
.act-counter i{position:absolute;right:16px;font-style:normal;color:#4a7}
.act-counter{position:relative}.act-counter .pend{font-style:normal;color:#b45309;font-weight:700}
.tile.pic .act-t{color:#15803d;font-weight:700}.tile.pic .act-t .n{color:#15803d;font-size:14px}

/* 실시간 확인 판(키오스크와 같은 숫자) */
.ackboard{background:#fff;border:1px solid #e3d6db;border-radius:16px;padding:10px;margin:10px 0;box-shadow:0 3px 0 #eadde1}
.ab-head{display:flex;justify-content:space-between;align-items:baseline}.ab-head b{font-size:17px}.ab-head small{color:#777}
.ab-warn{background:#c62828;color:#fff;border-radius:12px;padding:10px;font-weight:700;margin-bottom:8px;animation:abw 1.6s ease-in-out infinite}
@keyframes abw{50%{background:#e53935}}
.ab-last{display:block;width:100%;text-align:left;margin:8px 0;padding:9px 10px;border-radius:12px;font-weight:700;border:0;background:#fdeaea;color:#8a1c1c}
.ab-last.lv-w{background:#fff3e0;color:#8a4b00}.ab-last.lv-f{background:#f3e8fb;color:#5b2a86}
.ab-count{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.ab-count button{border-radius:12px;padding:8px;display:flex;flex-direction:column;align-items:center;border:1px solid #ddd;background:#fff}
.ab-count span{font-size:13px;color:#444}.ab-count b{font-size:26px}
.ab-wait b{color:#d32f2f}.ab-done b{color:#b8860b}.ab-acted b{color:#15803d}
.ab-wait{border-color:#f3b4b4!important;background:#fff5f5!important}.ab-done{border-color:#f0d78c!important;background:#fffbea!important}.ab-acted{border-color:#9fd3b4!important;background:#effaf3!important}
.ab-list{margin-top:8px;display:flex;flex-direction:column;gap:6px;max-height:60vh;overflow:auto}
.ab-item{display:flex;gap:8px;align-items:center;justify-content:space-between;border-radius:12px;padding:8px 10px;font-size:14px;border-left:6px solid}
.ab-item.alarm{background:#fff2f2;border-color:#d32f2f}.ab-item.acked{background:#fff9db;border-color:#e0b100}.ab-item.acked b{color:#8a6d00}
.ab-item.acted{background:#ecfbf1;border-color:#16a34a}.ab-item.acted b{color:#15803d}
.ab-item button{flex:0 0 auto;background:#d32f2f;color:#fff;border:0;border-radius:10px;padding:9px 12px;font-weight:800}
/* 받는 사람 관리 */
.person.paused{opacity:.65}.person .ph{font-size:16px;margin-bottom:4px}
.steps{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin:4px 0}.steps span{font-size:12.5px;padding:3px 8px;border-radius:999px;background:#eee;color:#777}
.steps span.on{background:#16a34a;color:#fff}.steps i{font-style:normal;color:#aaa}
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.pgrid label{font-size:13px}
.qrrow{display:flex;gap:10px;align-items:center;margin:6px 0}.qrrow .qr{width:150px;height:150px;background:#fff;border:1px solid #ddd;border-radius:8px}
.danger{color:#b91c1c}.c-warn-t{color:#b8860b;font-weight:700}
.steps-help li{margin:8px 0;line-height:1.5}

/* 기록 올리기: 건물 종류 카드(키오스크와 같은 4가지) */
.bt-h{margin:6px 0}
.btypes{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:6px 0 4px}
.bt{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;padding:12px;border-radius:16px;background:#fff;border:1px solid #e3d6db;border-top:5px solid #4b5f7a;box-shadow:0 3px 0 #e6dde0;min-height:118px}
.bt:nth-child(3){border-top-color:#5d6b75}.bt:nth-child(4){border-top-color:#6b4a7a}
.bt .bt-ic{font-size:26px;width:44px;height:44px;border-radius:12px;background:#f3eef0;display:flex;align-items:center;justify-content:center}
.bt b{font-size:20px;color:#2d2a40}.bt small{font-size:12.5px;color:#555}
.bt .bt-tag{position:absolute;top:10px;right:10px;font-style:normal;font-size:12px;font-weight:700;padding:3px 9px;border-radius:999px;background:#eef0f4;color:#555}
.bt[aria-pressed=true]{background:linear-gradient(135deg,#8e2234,#5b1220);border-color:#5b1220;border-top-color:#5b1220;color:#fff}
.bt[aria-pressed=true] b,.bt[aria-pressed=true] small{color:#fff}.bt[aria-pressed=true] .bt-ic{background:#ffffff26}
.bt[aria-pressed=true] .bt-tag{background:#ffffff30;color:#fff}.bt .bt-tag.ok{background:#e7f6ea;color:#166534}

.ntfyq{margin:6px 0;background:#f6f7fb;border-radius:10px;padding:6px 8px}.ntfyq summary{font-weight:700;color:#334}
.ntfyq code{word-break:break-all;font-size:13px}

.outbox .outstate{font-size:16px;padding:8px 10px;border-radius:10px}.outbox .outstate.on{background:#e7f6ea;color:#166534}.outbox .outstate.off{background:#f3f4f6;color:#374151}
.outbox button[disabled]{opacity:.45}

/* 3D 이름표: 동 이름표는 늘 맨 앞·진하게, 시설 이름표는 겹칠 때만 작게 */
.k3dslot .lbl[data-place126$="동"]{z-index:5!important;opacity:1!important}
.k3dslot .lbl.shrink1227{scale:.68;transform-origin:center bottom;opacity:.9;z-index:1!important}
.k3dslot .scene-building-rail1224{display:none!important}

/* 1.9.7 스크롤 부드럽게 */
body.scrolling :is(.nm-bob,.nm-pop,.sum [data-to],.mp,.strip.bad,.dot.replay,.ab-warn,.lamp126,.alarm-count128,.tile.pic){animation-play-state:paused!important}
body.scrolling .tile.pic::after{display:none}

/* 중점관리(키오스크와 같은 구성) */
.fo-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:8px 0}
.fo-card{display:flex;flex-direction:column;align-items:flex-start;text-align:left;padding:10px;border-radius:14px;border:1px solid #e3d6db;background:#fff;gap:2px}
.fo-card span{font-weight:800}.fo-card b{font-size:30px;line-height:1.1}.fo-card small{font-size:12px;color:#666}.fo-card em{font-style:normal;font-size:12px;color:#555}.fo-card i{font-style:normal;font-size:12px;color:#8a1c2b;margin-top:2px}
.fo-card.red{border-color:#e6a6a6;background:#fff5f5}.fo-card.red b{color:#c62828}.fo-card.amber{border-color:#f0d58a;background:#fffbea}.fo-card.amber b{color:#a16207}.fo-card.blue{border-color:#a9c7ef;background:#f3f8ff}.fo-card.blue b{color:#1d4ed8}
.fo-conc{background:#fff;border:1px solid #e3d6db;border-radius:12px;padding:10px;margin:8px 0}.fo-conc b{font-size:22px;color:#8a1c2b}
.fo-h{margin:16px 0 4px;font-size:19px}
.fo-row{background:#fff;border:1px solid #e3d6db;border-left:6px solid #c62828;border-radius:14px;padding:10px;margin:8px 0}
.fo-row.st-observing{border-left-color:#eab308}.fo-row.st-resolved{border-left-color:#16a34a}.fo-row.st-none,.fo-row.st-normal{border-left-color:#c9ced6}.fo-row.st-needs{border-left-color:#94a3b8}.fo-row.fo-fault{border-left-color:#7e3fb0}
.fo-top{display:flex;gap:8px;align-items:flex-start}.fo-rank{min-width:44px;text-align:center}.fo-rank b{display:block;font-size:24px;color:#8a1c2b}.fo-rank span{display:block;font-size:11px;background:#c62828;color:#fff;border-radius:8px;padding:1px 4px}
.fo-loc{flex:1}.fo-loc h3{margin:2px 0;font-size:17px}.fo-loc small{color:#666}
.fo-badge{display:inline-block;font-size:12px;border-radius:999px;padding:1px 8px;background:#fde2e2;color:#9b1c1c}.fo-badge.b-observing{background:#fef3c7;color:#92400e}.fo-badge.b-resolved{background:#dcfce7;color:#166534}.fo-badge.b-none,.fo-badge.b-normal,.fo-badge.b-needs{background:#eef0f3;color:#475569}.fo-badge.b-app{background:#e0f2fe;color:#075985}
.fo-num{display:flex;flex-direction:column;align-items:flex-end;font-size:13px}.fo-num b{font-size:20px;color:#c62828}.fo-fault .fo-num b{color:#7e3fb0}
.fo-more summary{cursor:pointer;color:#8a1c2b;font-size:14px;margin-top:6px}.fo-more p{font-size:14px}
.fo-btns{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-top:6px}.fo-btns button{min-height:40px;font-size:14px}

/* 로그인: QR 큰 단추 + 또는 직접 입력 */
.big-qr{width:100%;min-height:64px;font-size:20px;margin:10px 0}
.qr-box{position:relative;border-radius:14px;overflow:hidden;background:#000;margin:6px 0}.qr-box video{width:100%;display:block;max-height:60vh;object-fit:cover}.qr-box p{color:#fff;position:absolute;left:8px;right:8px;bottom:44px;text-align:center}.qr-box button{position:absolute;right:8px;bottom:8px}
.or{display:flex;align-items:center;gap:8px;color:#6b7280;margin:14px 0 6px}.or::before,.or::after{content:'';flex:1;border-top:1px solid #d9cdd1}
.login-btn{width:100%;min-height:48px;font-size:18px;font-weight:800}
/* 중점관리 안의 세 칸 */
.seg{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;background:#f3e9ec;border-radius:12px;padding:4px;margin:4px 0 10px}.seg button{min-height:40px;border:0;border-radius:9px;background:transparent;font-weight:700;font-size:14px}.seg button[aria-selected=true]{background:#fff;color:#8a1c2b;box-shadow:0 1px 3px #0002}

/* 1순위: 원인 기록·대응 결과·축적 정리·조치 취소 */
.ck-list{display:flex;flex-direction:column;gap:4px;max-height:30vh;overflow:auto;border:1px solid #e3d6db;border-radius:10px;padding:6px;margin-bottom:8px}
.res3{display:grid;grid-template-columns:1fr;gap:6px;margin:6px 0}.res3 label{border:2px solid #e3d6db;border-radius:12px;padding:10px;font-weight:800}.res3 .r0{border-color:#86efac}.res3 .r1{border-color:#fca5a5}.res3 .r2{border-color:#fcd34d}
.rs{font-weight:700}.rs-0{background:#dcfce7!important;color:#166534}.rs-1{background:#fee2e2!important;color:#991b1b}.rs-2{background:#fef3c7!important;color:#92400e}
.acc-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:8px 0}.acc-c{display:flex;flex-direction:column;align-items:flex-start;background:#fff;border:1px solid #e3d6db;border-radius:12px;padding:10px;text-align:left}.acc-c b{font-size:28px;color:#8a1c2b}
.acc-def{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;font-size:14px}.acc-def dt{font-weight:800}
li.cancelled{opacity:.6}li.cancelled .st{background:#e5e7eb;color:#374151}
button.small{min-height:34px;font-size:13px;margin-top:4px}
.shot{position:relative;display:inline-block}.shot img{width:84px;height:84px;object-fit:cover;border-radius:8px}.shot button{position:absolute;top:2px;right:2px;min-height:0;padding:0 6px}
.res3 input[type=radio]{width:22px!important;height:22px;min-height:0;margin:0 8px 0 0;vertical-align:middle;flex:none}.res3 label{display:flex;align-items:center}
.ck-list input[type=checkbox]{width:20px!important;height:20px;min-height:0;margin-right:8px}.ck-list label{display:flex;align-items:center}
.seg button{font-size:12.5px;white-space:nowrap;letter-spacing:-.3px;padding:0 4px}
/* 운영자 화면(분양·단지 목록) */
.op-strip{position:sticky;top:0;z-index:50;background:#2f3b45;color:#fff;padding:6px 12px;font-size:13px;display:flex;gap:8px;align-items:center;justify-content:center}
.op-strip button{padding:3px 10px;font-size:12px}
.op-bar{display:flex;gap:8px;margin:10px 0}.op-bar input{flex:1}
.op-site{display:block;width:100%;text-align:left;margin:8px 0;padding:12px 14px;border-radius:14px;background:#fff;border:1px solid #e3d6db}
.op-site small{color:#777}.op-chips{display:flex;flex-wrap:wrap;gap:5px;margin:6px 0}
.op-chip{font-size:12px;padding:2px 8px;border-radius:10px;background:#eef0f2;color:#445}
.op-chip.ok{background:#e1f3e6;color:#1d6b35}.op-chip.warn{background:#fff1d0;color:#8a5a00}.op-chip.bad{background:#fbe1e3;color:#9b1c2c}
.op-step h2{display:flex;align-items:center;gap:8px}.op-no{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#7d263d;color:#fff;font-size:13px}
.op-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:6px}
.op-p{border-top:1px solid #eee;padding:8px 0}
.op-qr svg{width:200px;height:200px;display:block;margin:8px auto;background:#fff}
.op-code{font-size:20px;letter-spacing:2px}
.op-map{position:relative;height:180px;background:#eef3ea;border-radius:12px;margin:8px 0;overflow:hidden}
.op-map span{position:absolute;background:#fff;border:1px solid #7d263d;border-radius:6px;padding:2px 6px;font-size:12px;white-space:nowrap}
.op-t{width:100%;border-collapse:collapse;font-size:13px}.op-t th,.op-t td{border-bottom:1px solid #eee;padding:4px 3px;text-align:left}
.op-t select,.op-t input{font-size:13px;padding:3px}
.warnbox{background:#fff7e6}
@media(min-width:900px){#v-page .page-b,#page-b{max-width:860px;margin:0 auto}}
.join-row{display:flex;gap:8px;margin-top:10px}.join-row button{flex:1}
.pend-strip{position:sticky;top:0;z-index:60;background:#fff1d0;color:#6b4500;padding:8px 12px;font-size:13px;text-align:center}
body.pending #tabs [data-v=act],body.pending [data-goto=act],body.pending #b-up,body.pending [data-v2=upload],body.pending .act-btn,body.pending [data-fa]{opacity:.35;pointer-events:none}
/* 마감 보고서 */
.rp-sum{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}.rp-sum div{flex:1;min-width:70px;background:#fff;border:1px solid #eadde1;border-radius:12px;padding:8px;text-align:center}
.rp-sum b{display:block;font-size:24px}.rp-sum small{font-size:14px;color:#555}
.rp-pick{display:flex;gap:10px;margin:8px 0}.rp-pick label{flex:1}
.rp-days{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-top:8px}.rp-days button{padding:10px 0;font-size:16px}
.rp-bars{display:flex;align-items:flex-end;gap:4px;height:150px;padding:4px 0}.rp-bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%}
.rp-bar i{display:block;width:70%;background:#D22F24;border-radius:4px 4px 0 0;min-height:2px}.rp-bar b{font-size:12px}.rp-bar small{font-size:11px;color:#666}
.rp-cmp{display:flex;gap:8px}.rp-cmp div{flex:1;background:#faf5f6;border-radius:10px;padding:6px;text-align:center;font-size:15px}.rp-cmp b{display:block;font-size:20px}
.tag-past{background:#eef0f2;color:#445;padding:4px 10px;border-radius:8px;display:inline-block;font-size:14px}
.rp-home{background:#fff;border:1px solid #eadde1;border-radius:16px;padding:10px 12px;margin:10px 0}.rp-h1{display:flex;justify-content:space-between;align-items:baseline}.rp-h1 small{color:#666}
.rp-h2{font-size:14px;color:#444;display:flex;flex-wrap:wrap;gap:6px;align-items:center}.rp-h2 button{margin-left:auto;padding:4px 10px;font-size:14px}
/* 17번 위치 카드 일곱 칸 */
.c7 section{border:1px solid #eadde1;border-radius:14px;padding:10px 12px;margin:10px 0;background:#fff}
.c7 h4{margin:0 0 6px;font-size:18px;display:flex;align-items:center;gap:6px}.c7 h4 span{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#7d263d;color:#fff;font-size:14px}
.c7 h4 small{font-weight:400;color:#777;font-size:13px}.c7-big{font-size:20px;margin:2px 0}
.c7-nats{display:flex;flex-wrap:wrap;gap:6px}.c7-nat{border:2px solid;border-radius:10px;padding:2px 8px;font-size:15px}
.c7-cause{background:#faf7f8}.c7-rec{border-top:1px dashed #e2d3d8;padding:8px 0;display:flex;flex-direction:column;gap:2px}.c7-rec button{align-self:flex-start;background:#F2B705;border-color:#d9a300;color:#3b2c00}
.c7-tag{color:#8a5a00;font-size:13px}.c7-tr{border-top:1px dashed #e2d3d8;padding:6px 0}.c7-row{width:100%;text-align:left}
.act-btn{background:#F2B705!important;color:#3b2c00!important;border-color:#d9a300!important}
/* 15-5 기준서 5 글자 크기: 본문·카드·단추·탭 18px 이상, 표 16px 이상(줄이지 않음 · [가−][가+]로만 바꿈) */
body{font-size:18px}
.view p,.view li,.view label,.view button,.view input,.view select,.view textarea,.view dd,.view dt,.box,.menu button,.page-b p,.list li,dialog p,dialog label,dialog button{font-size:18px}
#tabs button{font-size:18px!important;padding-left:0;padding-right:0}
.hdr-tools{flex-wrap:wrap}.hdr-tools button{font-size:18px}
.hint,small,.view small,.znote{font-size:16px}
td,th,.tbl td,.tbl th,.op-t td,.op-t th{font-size:16px}
.seg{overflow-x:auto;-webkit-overflow-scrolling:touch}.seg button{font-size:18px!important;white-space:nowrap;flex:0 0 auto}
.zoom-btns{display:inline-flex;gap:4px}.zoom-btns button{min-width:44px}
#musicToggle126,#musicVolumeOpen126{font-size:18px!important}
p.ver{font-size:16px}
p.ver{font-size:18px}
#tabs button{white-space:nowrap;letter-spacing:-0.6px}
#house-b td,#house-b th{white-space:normal;word-break:keep-all;overflow:visible}
#tabs{gap:2px}#tabs button{padding:0 1px;min-width:0}
.hdr-tools button,.hdr-tools button *{font-size:18px!important}
.c7-test{background:#eef0f2;color:#445;border:1px solid #b8b0b3;border-radius:8px;padding:0 6px;font-size:16px}
.unit-ck{display:flex;justify-content:space-between;align-items:center;gap:8px}
.to-top{position:fixed;right:12px;bottom:84px;z-index:40;border-radius:20px;padding:8px 12px;font-size:18px;box-shadow:0 2px 8px rgba(0,0,0,.2)}.dong-nav button:disabled{opacity:.4}
.free-dlg{max-width:520px;width:92vw;border:0;border-radius:16px;padding:16px}.free-x{float:right}
.safe-band{border-color:#D22F24;background:#fff5f4}
.op-row{display:flex;gap:6px;align-items:stretch}.op-row .op-site{flex:1}.op-home{flex:0 0 auto}.op-strip select{font-size:16px;max-width:62vw;text-overflow:ellipsis}

.to-top{position:fixed;right:14px;bottom:86px;z-index:40;min-height:48px;padding:0 14px;border-radius:24px;border:0;background:#6d1626;color:#fff;font-weight:700;font-size:18px;box-shadow:0 2px 8px #0004}
.c7-plan .seg button{font-size:16px}

.upd-bar{position:fixed;left:12px;right:12px;bottom:84px;z-index:60;background:#fff;border:3px solid #6d1626;border-radius:18px;padding:14px;box-shadow:0 6px 24px #0005;text-align:center}.upd-bar p{margin:4px 0;font-size:20px}.upd-bar #upd-go{width:100%;min-height:64px;font-size:26px;margin:8px 0}.upd-bar #upd-later{width:100%;min-height:48px}

.shell-tag{display:block;font-size:13px;opacity:.85;color:#fff}

/* 2.1.9 아래 메뉴 6칸 — 칸마다 기준서 색(와인·빨강·파랑·주황·보라·회색) */
#tabs{display:grid!important;grid-template-columns:repeat(6,1fr);gap:0}
#tabs button{font-size:16px!important;font-weight:800;white-space:nowrap;padding:0!important;min-width:0;border-top:4px solid transparent;color:#555;letter-spacing:-.5px}
#tabs .t-home{--tc:#7a1d30}#tabs .t-live{--tc:#D22F24}#tabs .t-site{--tc:#2587DB}#tabs .t-focus{--tc:#E8790C}#tabs .t-safe{--tc:#8A3FD0}#tabs .t-more{--tc:#6b6b6b}
#tabs button{color:var(--tc)}#tabs button[aria-selected=true]{background:color-mix(in srgb,var(--tc) 14%,#fff);border-top-color:var(--tc)}
.home-info h2{margin:0 0 6px;color:#7a1d30}.home-contract>div{background:#faf5f6;border-radius:12px;padding:10px;display:flex;flex-direction:column;gap:2px}
.bt-chips span{border:1px solid #d8c6cc;border-radius:16px;padding:4px 10px;margin:2px;display:inline-block}.bt-chips .on{background:#7a1d30;color:#fff}
#v-live h1{color:#D22F24}.lv-top{background:#fde7e5!important;font-weight:700}
.teaser{border:2px solid #7a1d30;text-align:center}
body.nocontract #live-list li:nth-child(n+3),body.nocontract #site-list,body.nocontract #page-b .box ul,body.nocontract #page-b .card,body.nocontract #rank{filter:blur(5px);pointer-events:none;user-select:none}
.num-ev{border:1px solid #d22f2433;background:#fff5f4;border-radius:10px;padding:0 8px;font-weight:800;color:#b3261e;min-height:36px}.num-ev small{font-size:13px;color:#666;font-weight:600}
.jd-crumb{font-weight:700}.jd-today{display:flex;flex-direction:column;gap:6px;border-left:6px solid #D22F24}.ev-lines li{font-size:16px}.raw1{color:#555;word-break:break-all}
.dlg-in{max-height:80vh;overflow:auto}.dlg-body{max-height:62vh;overflow:auto}

.tile b{overflow-wrap:anywhere;word-break:break-all}
.web-bar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:space-between;background:#fff6d6;border-bottom:1px solid #e6c65a;color:#4a3b00;font-size:13px;padding:6px 12px;line-height:1.4}
.web-bar span{flex:1 1 220px}
.web-bar button{font-size:14px;padding:6px 10px;border-radius:8px;border:1px solid #7a1d30;background:#7a1d30;color:#fff;white-space:nowrap}
.web-add-dlg{max-width:94vw;border:none;border-radius:14px;padding:12px}
.web-add-dlg img{width:100%;height:auto;display:block}
.web-add-dlg p{font-size:15px;line-height:1.5}
.login-two{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0}
.login-two .big-qr{margin:0;min-height:72px;font-size:18px;line-height:1.3;padding:8px}
.login-bar{display:flex;gap:8px;align-items:center;justify-content:space-between;background:#2f3a48;color:#fff;font-size:15px;font-weight:700;padding:8px 12px;position:sticky;top:0;z-index:50}
.login-bar button{font-size:15px;padding:6px 16px;border-radius:8px;border:none;background:#ffd54a;color:#222;font-weight:700}
.need-login{border:2px solid #7a1d30;background:#fff7f8;text-align:center}
.need-login b{font-size:18px;color:#7a1d30}.need-login button{margin-top:6px;min-width:140px}
.k3dslot{position:relative}
.layout-note{position:absolute;left:8px;bottom:8px;z-index:6;font-size:11px;line-height:1.3;padding:3px 7px;border-radius:6px;background:rgba(20,24,34,.62);color:#fff;pointer-events:none;max-width:70%}
.act-test{display:block;font-size:12px;color:#8a8f98;font-weight:400}
.op-strip{justify-content:space-between;font-size:14px}.op-strip select{flex:1 1 auto;min-width:0;max-width:none;width:auto;font-size:16px}.op-strip button{flex:0 0 auto}
/* 시연판 로그인: 아이디·비밀번호·[들어가기]만 */
body.eval-login #v-connect .login-two,body.eval-login #v-connect #qr-box,body.eval-login #v-connect .or,body.eval-login #v-connect .agree,body.eval-login #v-connect .login-btn+.hint,body.eval-login #v-connect #b-demo,body.eval-login #v-connect .join-row,body.eval-login #v-connect #b-contact,body.eval-login #v-connect #join-box{display:none!important}
body.eval-login #v-connect .login-btn{width:100%;min-height:56px;font-size:20px;margin-top:10px}
.view-bar{background:#e8f0fb;color:#1f3d66;font-size:13px;font-weight:700;padding:6px 12px;text-align:center;border-bottom:1px solid #bcd0ea}
.evalpw label{display:block;margin-top:6px}.evalpw button{margin-top:8px}
.pwa-install{display:block;width:100%;border:0;border-radius:0;background:#ffd54a;color:#3a2a00;font-size:20px;font-weight:800;padding:14px 12px;text-align:center;position:sticky;top:0;z-index:70;box-shadow:0 2px 8px #0003}
.pwa-install small{display:block;font-size:13px;font-weight:500;margin-top:2px}
.pwa-install[hidden]{display:none}
/* ★보완-04 사건 카드 처리 흐름 9단계 · 기록창 · 현장조치 10칸 */
.ev-card{display:block!important;border-left:6px solid var(--fc,#D22F24)}
.flow{display:flex;flex-wrap:wrap;align-items:center;gap:3px;margin:2px 0 8px}
.fl-st{display:inline-flex;flex-direction:column;border-radius:8px;padding:2px 6px;font-size:11px;line-height:1.25;background:#f1eef0;color:#8b8186}
.fl-st b{font-weight:700}.fl-st small{font-size:10px}
.fl-st.done{background:#eef7ee;color:#285e2c}
.fl-st.now{background:var(--fc,#D22F24);color:#fff;font-size:14px;padding:4px 9px;box-shadow:0 1px 4px #0003}
.fl-ar{color:#b8b0b3;font-size:12px}
.ev-text{display:block;margin:2px 0 6px}
.ev-btns{display:flex;flex-wrap:wrap;gap:6px}.ev-btns button{font-size:14px;padding:6px 10px}
.ev-ack{background:#F2B705;border:0;color:#3a2a00;font-weight:700}.ev-act{background:#7a1d30;border:0;color:#fff;font-weight:700}
.fl-log{font-size:12px;margin:6px 0 0;padding-left:18px}.fl-log small{color:#777}
.af-sec{border:1px solid #e5dde0;border-radius:12px;padding:8px 10px;margin:8px 0;background:#fff}
.af-sec h3,.af-sec-h{font-size:16px;margin:2px 0 6px}.af-n{display:inline-block;min-width:28px;color:#7a1d30;font-weight:800}
.af-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:3px 0;border-bottom:1px dashed #eee}.af-row>span{min-width:76px;font-weight:600}
.af-r{font-size:14px}.af-val{width:80px;font-size:14px;padding:4px}
.af-rec{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:4px 0}.af-rec .on,.af-aij.on{background:#1E8E3E;color:#fff;border-color:#1E8E3E}
.af-miss{border:3px solid #D22F24!important;background:#fff5f4}
#af-cause,#af-why{width:100%;margin-top:4px}
.rp-bar{position:sticky;top:0;z-index:72;background:#14324d;color:#fff;font-size:13px;padding:6px 10px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:space-between}
.rp-bar .rp-prog{flex:1 1 100%;height:6px;background:#ffffff33;border-radius:3px;overflow:hidden}.rp-bar .rp-prog i{display:block;height:100%;background:#ffd54a}
.rp-bar button{font-size:13px;padding:3px 8px;border-radius:6px;border:0;background:#ffd54a;color:#222}
.ev-fire-b{background:#D22F24!important;color:#fff!important;border:0;font-weight:700}.ev-fire{color:#D22F24}.ev-re{color:#8a5a00}.ev-q{color:#1F6FB2}
.af-stop{margin-top:6px;padding:6px 8px;background:#fff6f4;border-radius:8px;color:#5a1a14;font-size:13px}.af-jd.on{background:#1E8E3E;color:#fff}
.jd-tabs{margin-bottom:8px}.tbl.wk td,.tbl.wk th{white-space:nowrap;font-size:13px}.tbl.wk small.up{color:#D22F24}.tbl.wk small.down{color:#1E8E3E}
/* 화면 하나로 길게: 작은 스크롤 상자 없앰 */
.live-list,.ab-list,.ck-list,.raw{max-height:none!important;overflow:visible!important}
#houseBody126 .vestibule-scroll1220{max-height:none!important;overflow-y:visible!important;overflow-x:auto}
/* 위에 붙는 단추 줄(띠 아래에 차례로) */
.op-strip,.rp-bar,.login-bar,.view-bar{position:sticky}
.pwa-install{position:static!important}
.live-tabs,.seg,.jd-tabs{position:sticky;top:var(--stk,0px);z-index:30;background:#fff;box-shadow:0 2px 6px #0000000f}
#live-slot .live-tabs{margin:0 -16px 8px;padding:6px 16px}
.ackboard.ab-off{display:none!important}
/* 9단계 흐름: 평소 한 줄 막대(지금 단계만 크게, 나머지는 점) → 누르면 펼침 */
.flow-line{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;margin:0 0 6px;cursor:pointer;overflow:hidden}
.fl-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#d8cfd3;flex:0 0 auto}.fl-dot.d{background:#1E8E3E}
.fl-now{color:#fff;border-radius:8px;padding:4px 9px;font-weight:800;font-size:15px;white-space:nowrap;flex:0 0 auto}
.fl-more{margin-left:auto;color:#999;font-size:13px}.flow-line.open .fl-more{transform:rotate(180deg)}
.flow[hidden],.ev-log[hidden]{display:none!important}
/* ===== F11 모든 화면 한 규칙(네이버식) ===== */
.nk-bar{position:sticky;top:var(--stk,0px);z-index:35;display:flex;gap:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;background:#f7f3f4;margin:0 -16px 10px;padding:8px 16px;box-shadow:0 2px 6px #0000000f}
.nk-bar::-webkit-scrollbar{display:none}
.nk-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;border-radius:999px;border:1.5px solid var(--nk);background:#fff;color:var(--nk);font-size:15px;font-weight:700;padding:7px 14px;min-height:40px;white-space:nowrap}
.nk-chip span{font-size:16px}.nk-chip[aria-selected=true]{background:var(--nk);color:#fff}
.nk-off{display:none!important}.nk-h1{display:none!important}
#live-slot .live-tabs{display:none!important}
.nk-list{display:flex;flex-direction:column;gap:8px}
.nk-card{display:block;width:100%;text-align:left;background:#fff;border:1px solid #eadfe2;border-radius:14px;padding:12px 14px;box-shadow:0 1px 3px #0000000d}
.nk-card b{display:block;font-size:16px}.nk-card small{color:#6b6064}.nk-card .n{color:#7a1d30;font-size:18px}
/* 동별·시설: 카드가 세로로 길게 */
#v-site[data-nk="동별"] .tiles,#v-site[data-nk="시설"] .tiles{display:flex!important;flex-direction:column;gap:10px}
#v-site[data-nk="동별"] .tile,#v-site[data-nk="시설"] .tile{display:grid!important;grid-template-columns:96px 1fr;column-gap:12px;align-items:center;text-align:left;width:100%;min-height:0}
#v-site[data-nk="동별"] .tile>*:not(:first-child),#v-site[data-nk="시설"] .tile>*:not(:first-child){grid-column:2}
#v-site[data-nk="동별"] .tile>:first-child,#v-site[data-nk="시설"] .tile>:first-child{grid-row:1/span 6;max-width:96px}
/* 흰 카드·같은 간격·큰 숫자 */
.view .box,.view .cards>li,.view .tile{background:#fff;border-radius:14px}
.view .box{margin:10px 0}.view .n{font-variant-numeric:tabular-nums}
/* 머리글: 작은 아이콘 한 줄, 내리면 접힘(위에 붙지 않음) */
header.top{position:static!important;padding:6px 12px!important;flex-direction:row!important;flex-wrap:wrap;align-items:center;gap:4px 8px}
header.top .org{font-size:10px!important;opacity:.8;width:100%}
header.top>b{font-size:16px!important;margin-right:auto}
header.top .hdr-tools{margin:0!important;gap:4px!important;flex-wrap:nowrap!important}
header.top .hdr-tools button,header.top .hdr-tools .music-controls126 button{font-size:15px!important;min-height:32px!important;min-width:34px;padding:2px 7px!important}
header.top #who{display:none}
.seg.nk-bar{display:flex!important;grid-template-columns:none!important;border-radius:0}
.seg.nk-bar button.nk-chip{border:1.5px solid var(--nk)!important;background:#fff!important;color:var(--nk)!important;border-radius:999px!important;font-size:15px!important}
.seg.nk-bar button.nk-chip[aria-selected=true]{background:var(--nk)!important;color:#fff!important}
/* ===== F11 네이버 화면 모양 ===== */
.nk-bar{gap:4px!important;background:#fff!important;padding:8px 12px!important}
.nk-chip{flex-direction:column;gap:4px!important;border:0!important;background:transparent!important;color:#333!important;padding:2px 4px!important;min-width:64px;min-height:0!important;font-size:13px!important;font-weight:500!important;border-radius:12px!important}
.nk-chip .nk-ic{display:flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:50%;font-size:22px;color:#fff;box-shadow:0 2px 6px #0002}
.nk-chip b{font-weight:600;font-size:13px}
.nk-chip[aria-selected=true]{background:transparent!important;color:#111!important}.nk-chip[aria-selected=true] b{font-weight:800;border-bottom:3px solid var(--nk);padding-bottom:1px}
.nk-chip[aria-selected=true] .nk-ic{outline:3px solid #fff;box-shadow:0 0 0 5px var(--nk)}
/* 목록 카드: 왼쪽 그림 + 제목 두 줄 + 정보 한 줄 */
.nv-th{width:96px;height:72px;flex:0 0 96px;border-radius:10px;display:block}
#live-list>li.nv{display:flex!important;gap:12px;align-items:flex-start;background:#fff;border-radius:12px;padding:10px;margin:0 0 8px;border:1px solid #eee}
.nv-txt{flex:1;min-width:0}
.nv-t,.nv-txt .ev-text{font-size:18px;font-weight:700;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nv-i,.nv-i small,.nv-txt small{font-size:16px!important;color:#777;font-weight:400}
.nv-row{display:flex;gap:12px;align-items:flex-start;margin:4px 0 8px}
#top3>li.nv{display:grid;grid-template-columns:96px 1fr;column-gap:12px}#top3>li.nv>.nv-th{grid-row:1/span 6}
.nv-hide{display:none!important}
.nv-more{display:block;width:100%;background:#fff;border:1px solid #e6e6e6;border-radius:12px;padding:12px;font-size:16px;font-weight:700;color:#333;margin-top:6px}
/* 홈 배너 */
.nv-banner{display:block;width:100%;text-align:left;border:0;border-radius:18px;padding:16px 18px;margin:4px 0 12px;color:#fff;background:linear-gradient(135deg,#7a1d30,#c2384f);box-shadow:0 4px 14px #7a1d3040}
.nv-banner.warn{background:linear-gradient(135deg,#b3261e,#e8790c)}
.nv-banner small{display:block;font-size:14px;opacity:.85}.nv-banner b{display:block;font-size:22px;margin:4px 0}.nv-banner span{font-size:15px;opacity:.9}
/* 동별·시설·경계구역: 타일 격자(언론사 격자처럼) */
#v-site[data-nk="동별"] .tiles,#v-site[data-nk="시설"] .tiles{display:grid!important;grid-template-columns:repeat(3,1fr)!important;gap:0!important;border:1px solid #e5e5e5;border-radius:12px;overflow:hidden;background:#fff}
#v-site[data-nk="동별"] .tile,#v-site[data-nk="시설"] .tile{display:flex!important;flex-direction:column;align-items:center;text-align:center;border-radius:0!important;border:0;border-right:1px solid #eee;border-bottom:1px solid #eee;box-shadow:none;padding:8px 4px}
#v-site[data-nk="동별"] .tile>:first-child,#v-site[data-nk="시설"] .tile>:first-child{max-width:72px}
#nk-zones .nk-list{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border:1px solid #e5e5e5;border-radius:12px;overflow:hidden;background:#fff}
#nk-zones .nk-card{border-radius:0;border:0;border-right:1px solid #eee;border-bottom:1px solid #eee;box-shadow:none;padding:10px 6px;text-align:center}
#nk-zones .nk-card b{font-size:14px}#nk-zones .nk-card .n{display:block;font-size:20px}#nk-zones .nk-card small{font-size:12px}
#nk-zones .nv-more{grid-column:1/-1;border-radius:0}
/* 글자: 제목 18px 굵게 · 보조 16px 회색 */
.view h2{font-size:19px;font-weight:800}.view .hint{font-size:16px;color:#777}
/* ===== F11 첫 화면 = 그림 박스 + 짧은 이름(두 줄 박스 격자) ===== */
.nk-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:6px 0 14px}
.nk-box{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:132px;background:#fff;border:1.5px solid color-mix(in srgb,var(--bc) 25%,#fff);border-radius:20px;padding:14px 8px;box-shadow:0 3px 10px #0000000f}
.nk-pic{display:flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:20px;background:currentColor}
.nk-pic svg{width:44px;height:44px;color:inherit}.nk-pic svg *[fill="currentColor"],.nk-pic svg [stroke="currentColor"]{color:inherit}
.nk-box b{font-size:18px;font-weight:800;color:#222}
.nk-box em{position:absolute;top:10px;right:12px;font-style:normal;font-weight:800;font-size:18px;color:var(--bc)}
.nk-back{position:sticky;top:var(--stk,0px);z-index:35;display:flex;align-items:center;gap:10px;background:#fff;margin:0 -16px 10px;padding:8px 16px;box-shadow:0 2px 6px #0000000f}
.nk-back button{border:0;background:#f1eef0;border-radius:999px;padding:8px 14px;font-size:16px;font-weight:700}
.nk-back b{font-size:19px;font-weight:800;color:var(--bc)}.nk-pic.sm{width:34px;height:34px;border-radius:10px}.nk-pic.sm svg{width:24px;height:24px}
