/* shared dashboard modal (alarm detail / report render / help) */
.dmodal-scrim{position:fixed;inset:0;overscroll-behavior:contain;background:rgba(4,7,14,.42);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);z-index:3000;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:20px;overflow:auto;opacity:0;transition:opacity .18s}
.dmodal-close-out{flex:none;width:46px;height:46px;border-radius:50%;border:1px solid rgba(255,255,255,.18);background:rgba(18,24,38,.6);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:#c7d0e0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.16s;box-shadow:0 10px 26px rgba(0,0,0,.4)}
.dmodal-close-out:hover{color:#fff;border-color:rgba(255,255,255,.35);transform:scale(1.06)}
.dmodal-close-out svg{width:18px;height:18px}
.dmodal-scrim.on{opacity:1}
@keyframes dmborder{to{background-position:300% 0}}
.dmodal{--dmgrad:linear-gradient(120deg,#4f8cff,#79a8ff,#4f8cff);position:relative;border:0;background:rgba(20,26,40,.5);backdrop-filter:blur(30px) saturate(1.5);-webkit-backdrop-filter:blur(30px) saturate(1.5);border-radius:18px;width:100%;max-width:560px;max-height:82vh;display:flex;flex-direction:column;box-shadow:0 30px 80px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.08);transform:translateY(8px) scale(.98);transition:transform .2s;overflow:hidden}
.dmodal::after{content:'';position:absolute;inset:0;border-radius:18px;padding:1.2px;background:var(--dmgrad);background-size:300% 100%;animation:dmborder 11s linear infinite;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;z-index:6}
.dmodal-scrim.on .dmodal{transform:none}
.dmodal.wide{max-width:840px}
.dmodal-h{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid rgba(255,255,255,.08)}
.dmodal-ic{width:34px;height:34px;flex:none;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--acc,#4f8cff);background:color-mix(in srgb,var(--acc,#4f8cff) 16%,transparent)}
.dmodal-ic svg{width:18px;height:18px}
.dmodal-tt{flex:1;min-width:0;font-family:Manrope,sans-serif;font-weight:800;font-size:16px;letter-spacing:-.01em;color:var(--tx,#e7edf7);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dmodal-sub{font-size:11.5px;color:var(--mut,#8a96ac);font-weight:500}
.dmodal-x{flex:none;width:32px;height:32px;border-radius:9px;border:1px solid var(--bd,rgba(255,255,255,.07));background:var(--card2,#1a2132);color:var(--mut,#8a96ac);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.14s}
.dmodal-x:hover{color:#fff;border-color:var(--acc,#4f8cff)}
.dmodal-x svg{width:16px;height:16px}
.dmodal-b{padding:18px;overflow:auto;overscroll-behavior:contain;color:var(--tx,#e7edf7);font-size:14px;line-height:1.6;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.18) transparent}
.dmodal-b::-webkit-scrollbar{width:11px}
.dmodal-b::-webkit-scrollbar-track{background:transparent;margin:6px 0}
.dmodal-b::-webkit-scrollbar-thumb{background:rgba(255,255,255,.24);border-radius:99px}
.dmodal-b::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.38)}
.dmodal-b p{margin:0 0 10px}
.dmodal-f{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:14px 18px;border-top:1px solid var(--bd,rgba(255,255,255,.07))}
.dmodal-frame{width:100%;height:56vh;border:0;border-radius:10px;background:#0f1626}
.dmodal-btn{border:1px solid var(--bd2,rgba(255,255,255,.12));background:var(--card2,#1a2132);color:var(--tx,#e7edf7);border-radius:10px;padding:9px 15px;font-size:13px;font-weight:700;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:7px}
.dmodal-btn:hover{border-color:var(--acc,#4f8cff)}
.dmodal-btn.primary{background:linear-gradient(120deg,var(--acc,#4f8cff),var(--acc2,#22c4c4));border:0;color:#06223b}
.dmd-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.dmd-chip{font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px;border:1px solid var(--bd2,rgba(255,255,255,.12));color:var(--mut,#8a96ac)}
.dmd-chip.crit{color:#ff5b6e;background:color-mix(in srgb,#ff5b6e 14%,transparent);border-color:color-mix(in srgb,#ff5b6e 30%,transparent)}
.dmd-chip.warn{color:#f5a623;background:color-mix(in srgb,#f5a623 14%,transparent);border-color:color-mix(in srgb,#f5a623 30%,transparent)}
.dmd-chip.info{color:#4f8cff;background:color-mix(in srgb,#4f8cff 14%,transparent);border-color:color-mix(in srgb,#4f8cff 30%,transparent)}
.dmd-title{font-family:Manrope,sans-serif;font-weight:800;font-size:16px;margin-bottom:6px;color:var(--tx,#e7edf7)}
.al-row{cursor:pointer}
/* schedule modal fields */
.dmd-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.dmd-field>label{font-size:12px;color:var(--mut,#8a96ac);font-weight:650}
.dmd-field input[type=time],.dmd-field select{background:var(--card2,#1a2132);border:1px solid var(--bd2,rgba(255,255,255,.12));border-radius:10px;padding:11px 12px;font-family:inherit;font-size:14px;color:var(--tx,#e7edf7);outline:none}
.dmd-field input[type=time]:focus,.dmd-field select:focus{border-color:var(--acc,#4f8cff)}
.dmd-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--bd,rgba(255,255,255,.07))}
.dmd-row:first-child{border-top:0}
.dmd-row .tx{flex:1;min-width:0}
.dmd-row .tx .t{font-size:14px;font-weight:700}
.dmd-row .tx .d{font-size:12px;color:var(--mut,#8a96ac);margin-top:2px}
@media(max-width:560px){.dmodal-b{padding:15px}.dmodal-frame{height:66vh}}
/* floating close (bare header) */
.dmodal-xf{position:absolute;top:14px;right:14px;z-index:6;width:32px;height:32px;border-radius:9px;border:1px solid rgba(255,255,255,.14);background:rgba(0,0,0,.25);color:#c7d0e0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.14s}
.dmodal-xf:hover{color:#fff;background:rgba(0,0,0,.4)}
.dmodal-xf svg{width:16px;height:16px}
/* glassmorphism alarm detail */
.dmodal.dmodal-alarm{max-width:412px}
.dmodal-alarm.sev-crit{--dmgrad:linear-gradient(120deg,#ff5b6e,#ff838f,#ff5b6e)}
.dmodal-alarm.sev-warn{--dmgrad:linear-gradient(120deg,#f5a623,#f7bd57,#f5a623)}
.dmodal-alarm.sev-info{--dmgrad:linear-gradient(120deg,#4f8cff,#79a8ff,#4f8cff)}
.dmodal.dmodal-alarm .dmodal-b{padding:0}
.dmd-hero{position:relative;text-align:center;padding:34px 26px 22px;overflow:hidden}
.dmd-hero::before{content:'';position:absolute;top:-46px;left:50%;transform:translateX(-50%);width:210px;height:170px;border-radius:50%;filter:blur(50px);opacity:.45;pointer-events:none;z-index:0}
.dmd-hero.sev-crit::before{background:#ff5b6e}.dmd-hero.sev-warn::before{background:#f5a623}.dmd-hero.sev-info::before{background:#4f8cff}
.dmd-hero>*{position:relative;z-index:1}
.dmd-hero-ic{width:58px;height:58px;border-radius:18px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:13px}
.dmd-hero.sev-crit .dmd-hero-ic{color:#ff5b6e;background:rgba(255,91,110,.16);box-shadow:0 10px 34px rgba(255,91,110,.34)}
.dmd-hero.sev-warn .dmd-hero-ic{color:#f5a623;background:rgba(245,166,35,.16);box-shadow:0 10px 34px rgba(245,166,35,.34)}
.dmd-hero.sev-info .dmd-hero-ic{color:#4f8cff;background:rgba(79,140,255,.16);box-shadow:0 10px 34px rgba(79,140,255,.34)}
.dmd-hero-ic svg{width:28px;height:28px}
.dmd-hero-sev{display:inline-block;font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.09em;padding:3px 13px;border-radius:999px;margin-bottom:11px}
.dmd-hero.sev-crit .dmd-hero-sev{color:#ff8a97;background:rgba(255,91,110,.16)}
.dmd-hero.sev-warn .dmd-hero-sev{color:#ffce6b;background:rgba(245,166,35,.16)}
.dmd-hero.sev-info .dmd-hero-sev{color:#8fb6ff;background:rgba(79,140,255,.16)}
.dmd-hero-title{font-family:Manrope,sans-serif;font-weight:800;font-size:19px;letter-spacing:-.01em;margin-bottom:6px;color:#fff;word-break:break-word}
.dmd-hero-time{font-size:12px;color:var(--mut,#8a96ac)}
.dmd-msg{margin:0 22px 22px;padding:15px 16px;background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.09);border-radius:14px;font-size:14px;line-height:1.7;color:var(--tx,#e7edf7);word-break:break-word}
.dmodal.dmodal-alarm .dmodal-f{border-top:1px solid rgba(255,255,255,.08);padding:0 22px 20px;justify-content:center}
.dmodal.dmodal-alarm .dmodal-btn{width:100%;justify-content:center}
.dmd-thr{margin:0 22px 22px;border:1px solid rgba(255,255,255,.09);border-radius:14px;overflow:hidden}
.dmd-thr-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 15px;border-top:1px solid rgba(255,255,255,.06);font-size:13px}
.dmd-thr-row:first-child{border-top:0}
.dmd-thr-row .l{color:var(--mut,#8a96ac)}
.dmd-thr-row .v{font-family:Manrope,sans-serif;font-weight:700;color:var(--tx,#e7edf7)}
.dmd-thr-row.measured{background:rgba(255,255,255,.035)}
.dmd-thr-row.measured .v{font-size:16px}
.dmd-thr-row.measured.crit .v{color:#ff8a97}
.dmd-thr-row.measured.warn .v{color:#ffce6b}
.dmd-thr-row.hi-crit{background:rgba(255,91,110,.13)}
.dmd-thr-row.hi-crit .v,.dmd-thr-row.hi-crit .l{color:#ff8a97}
.dmd-thr-row.hi-warn{background:rgba(245,166,35,.13)}
.dmd-thr-row.hi-warn .v,.dmd-thr-row.hi-warn .l{color:#ffce6b}
.dmd-summary{padding:13px 15px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:12px;font-size:13.5px;color:var(--tx,#e7edf7);line-height:1.6;margin-bottom:14px}
.dmd-attach{display:flex;align-items:center;gap:12px;width:100%}
.dmd-attach .ic{width:38px;height:38px;flex:none;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--acc,#4f8cff);background:color-mix(in srgb,var(--acc,#4f8cff) 16%,transparent)}
.dmd-attach .ic svg{width:19px;height:19px}
.dmd-attach .tx{flex:1;min-width:0}
.dmd-attach .tx b{display:block;font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dmd-attach .tx span{font-size:11px;color:var(--mut,#8a96ac)}
.dmd-series{margin:0 22px 22px}
.dmd-series-h{font-size:11px;font-weight:800;color:var(--mut2,#5f6b80);text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}
/* 불러오는 중 — 회전 링. 모달은 body 직속이라 페이지의 reduced-motion 범위(main) 밖이다.
   원형이라 radial mask 로 안쪽을 뚫어도 모서리 문제가 없음(알약에서 실패했던 그 기법). */
.dmd-series-load{display:flex;align-items:center;justify-content:center;gap:11px;padding:22px 2px;font-size:12.5px;color:var(--mut,#8a96ac)}
.dmd-ring{width:26px;height:26px;flex:none;border-radius:50%;position:relative;box-shadow:inset 0 0 0 3px rgba(255,255,255,.07)}
.dmd-ring::before{content:'';position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(from 0deg,transparent 0deg,rgba(79,140,255,.22) 150deg,#4f8cff 300deg,#7dd3fc 352deg,transparent 360deg);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 3px));
  mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 3px));
  animation:dmdspin .85s linear infinite}
.dmd-ring::after{content:'';position:absolute;top:1px;left:50%;width:3px;height:3px;margin-left:-1.5px;border-radius:50%;
  background:#bae6fd;box-shadow:0 0 7px 1.5px rgba(125,211,252,.8);
  transform-origin:1.5px 12px;animation:dmdspin .85s linear infinite}   /* 헤드 박스 기준 → 링 중심(13,13) */
@keyframes dmdspin{to{transform:rotate(1turn)}}
.dmd-series-empty{font-size:12.5px;color:var(--mut2,#5f6b80);padding:10px 12px;text-align:center;background:rgba(255,255,255,.03);border-radius:9px}
.dmd-series-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border-radius:9px;font-size:12.5px;background:rgba(255,255,255,.03);margin-bottom:5px}
.dmd-series-row .t{color:var(--mut,#8a96ac);font-variant-numeric:tabular-nums}
.dmd-series-row .v{font-family:Manrope,sans-serif;font-weight:700;color:var(--tx,#e7edf7);font-variant-numeric:tabular-nums}
.dmd-series-row.warn{background:rgba(245,166,35,.12)}.dmd-series-row.warn .v{color:#ffce6b}
.dmd-series-row.crit{background:rgba(255,91,110,.13)}.dmd-series-row.crit .v{color:#ff8a97}
/* schedule time dropdowns */
.dmd-timeflex{display:flex;align-items:center;gap:8px}
.dmd-timeflex select{flex:1;min-width:0}
.dmd-timeflex span{color:var(--mut,#8a96ac);font-weight:800}
@media(max-width:560px){.dmodal.dmodal-alarm{max-width:calc(100vw-28px)}}
.dmodal-btn.danger{border:0;background:linear-gradient(120deg,#ff5b6e,#ff8a97);color:#2a0a10}
.dmd-pending{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px;padding:40px 20px;min-height:200px}
.dmd-pending .ic{width:60px;height:60px;border-radius:18px;display:flex;align-items:center;justify-content:center;color:var(--mut,#8a96ac);background:rgba(255,255,255,.05)}
.dmd-pending .ic svg{width:30px;height:30px}
.dmd-pending .t{font-size:14px;color:var(--mut,#8a96ac);line-height:1.6;max-width:320px}
.dmd-hint{color:var(--dmmut,#8a96ac);font-size:13px;margin-top:10px}
.dmodal-btn.dmb-grad{color:#fff;background:linear-gradient(100deg,#7c3aed,#4f8cff,#22c4c4,#a855f7,#7c3aed);background-size:300% 100%;border:0;animation:dmbgrad 5s linear infinite;box-shadow:0 8px 24px rgba(79,140,255,.4)}
.dmodal-btn.dmb-grad:hover{filter:brightness(1.06)}
.dmodal-btn.dmb-rd.is-unread{border-color:var(--acc,#4f8cff);color:var(--acc,#4f8cff)}
.dmodal-btn.dmb-grad svg{color:#fff}
@keyframes dmbgrad{to{background-position:300% 0}}
.dmd-rich{line-height:1.7}.dmd-rich p{margin:0 0 8px}.dmd-rich p:last-child{margin-bottom:0}.dmd-rich b{font-weight:800;color:var(--tx,#e7edf7)}
.dmd-rich ul{margin:9px 0 0;padding-left:18px}.dmd-rich li{margin:5px 0;line-height:1.6}
.dmd-rich .rt{color:#ffb27d;font-weight:800;background:rgba(245,158,11,.16);padding:1px 6px;border-radius:5px}.dmd-rich .rp{color:#5fe0b0;font-weight:800;background:rgba(16,185,129,.16);padding:1px 6px;border-radius:5px}.dmd-rich .rs-warn{color:#ff6b7e;font-weight:800}.dmd-rich .rs-ok{color:#7db4ff;font-weight:800}.dmd-rich h2,.dmd-rich h3{font-size:14px;font-weight:800;margin:10px 0 5px;color:var(--tx,#e7edf7)}
