{% extends "base.html" %} {% block title %}Area Monitor — SignalOps{% endblock %} {% block extra_style %} .mon-grid{display:grid;grid-template-columns:minmax(0,380px) minmax(0,1fr);gap:16px;align-items:start} .mon-col{display:flex;flex-direction:column;min-width:0} .mon-col>.card{margin-bottom:16px} @media (max-width:900px){.mon-grid{grid-template-columns:minmax(0,1fr)}} .card-hdr{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap} .card-hdr .section-hdr{font-size:13px;margin-bottom:0} .hint{font-size:11px;color:var(--td);line-height:1.7} .hint b{color:var(--t);font-weight:500} .muted{color:var(--tm)} .btn-sm{font-size:11px;padding:6px 10px;letter-spacing:1px} .btn:disabled{opacity:.5;cursor:default} .btn-d{background:rgba(199, 123, 123,0.08);color:var(--danger);border-color:rgba(199, 123, 123,0.28)} .btn-d:hover{background:rgba(199, 123, 123,0.18)} /* monitor list */ .mon-list{display:flex;flex-direction:column;gap:8px} .mon-item{border:1px solid var(--b);border-radius:7px;padding:11px 12px;background:rgba(255,255,255,0.012);cursor:pointer;transition:border-color .15s,background .15s} .mon-item:hover{border-color:rgba(138, 122, 184,0.25)} .mon-item.sel{border-color:rgba(138, 122, 184,0.55);background:rgba(138, 122, 184,0.06)} .mon-item.off{opacity:.62} .mon-top{display:flex;align-items:center;gap:8px;min-width:0} .mon-name{font-family:'Rajdhani',sans-serif;font-size:15px;font-weight:700;color:var(--t);flex:1;min-width:0; white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .mon-meta{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;align-items:center} .mon-status{font-size:10px;color:var(--td);margin-top:7px;line-height:1.6;word-break:break-word} .mon-status .err{color:var(--danger)} .mon-actions{display:flex;gap:6px;margin-top:9px;flex-wrap:wrap} .empty{color:var(--tm);font-size:12px;padding:18px 0;text-align:center;line-height:1.7} /* switch */ .sw{position:relative;display:inline-block;width:34px;height:18px;flex-shrink:0} .sw input{opacity:0;width:0;height:0;position:absolute} .sw span{position:absolute;inset:0;background:var(--e);border:1px solid rgba(255,255,255,0.12);border-radius:10px;transition:.2s;cursor:pointer} .sw span::before{content:'';position:absolute;width:12px;height:12px;left:2px;top:2px;border-radius:50%;background:var(--td);transition:.2s} .sw input:checked+span{background:rgba(116, 176, 149,0.18);border-color:rgba(116, 176, 149,0.45)} .sw input:checked+span::before{transform:translateX(16px);background:var(--g)} .sw input:focus-visible+span{box-shadow:0 0 0 3px rgba(138, 122, 184,0.3)} /* map */ .map-wrap{position:relative;height:520px;border-radius:7px;overflow:hidden;border:1px solid var(--b)} #mon-map{width:100%;height:100%;background:#0C0C10} @media (max-width:900px){.map-wrap{height:50vh}} .draw-bar{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px} .draw-info{font-size:11px;color:var(--td);margin-left:auto} .draw-info.bad{color:var(--danger)} .map-banner{position:absolute;top:10px;left:50%;transform:translateX(-50%);z-index:500;background:rgba(11, 11, 15,0.92); border:1px solid rgba(138, 122, 184,0.4);border-radius:6px;padding:6px 12px;font-size:11px;color:var(--pl);display:none; pointer-events:none;max-width:calc(100% - 20px);text-align:center} .map-banner.on{display:block} .drawing #mon-map{cursor:crosshair} .leaflet-control-attribution{background:rgba(8,11,9,0.7)!important;color:var(--tm)!important;font-size:9px!important} .leaflet-control-attribution a{color:var(--td)!important} .mon-tip{background:rgba(11, 11, 15,0.92);color:var(--t);border:1px solid rgba(138, 122, 184,0.4);font-family:'JetBrains Mono',monospace;font-size:11px} .mon-tip::before{display:none} /* form */ .f-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px} .f-grid .full{grid-column:1/-1} @media (max-width:600px){.f-grid{grid-template-columns:minmax(0,1fr)}} .f-lbl{display:block;font-family:'Rajdhani',sans-serif;font-size:11px;font-weight:700;letter-spacing:2px;color:var(--tm); text-transform:uppercase;margin-bottom:5px} .chk-row{display:flex;flex-wrap:wrap;gap:6px 16px} .chk{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--td);cursor:pointer;user-select:none} .chk input{width:auto;accent-color:var(--p);margin:0} .chk.dis{opacity:.5} .f-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:14px} .f-msg{font-size:11px;min-height:16px} .f-msg.ok{color:var(--g)}.f-msg.err{color:var(--danger)} .edit-tag{font-size:10px;color:var(--pl);letter-spacing:1px} /* notification channels */ .ch-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,0.03);flex-wrap:wrap} .ch-row:last-of-type{border-bottom:none} .ch-name{font-family:'Rajdhani',sans-serif;font-size:14px;font-weight:600;color:var(--t);flex:1;min-width:90px} .ch-msg{flex-basis:100%;font-size:10px;display:none} .ch-msg.ok{color:var(--g);display:block}.ch-msg.err{color:var(--danger);display:block}.ch-msg.info{color:var(--td);display:block} /* events */ .ev-list{display:flex;flex-direction:column} .ev{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 12px;align-items:start;padding:10px 0;border-bottom:1px solid rgba(255,255,255,0.04)} .ev:last-child{border-bottom:none} .ev-time{font-size:11px;color:var(--t);white-space:nowrap} .ev-time small{display:block;color:var(--tm);font-size:9px;margin-top:2px} .ev-body{min-width:0} .ev-badges{display:flex;flex-wrap:wrap;gap:4px} .ev-top{font-size:10px;color:var(--td);margin-top:6px;line-height:1.6} .ev-top div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .ev-side{text-align:right;font-size:11px;white-space:nowrap} .ev-side a{color:var(--pl);text-decoration:none;display:inline-block;margin-top:4px} .ev-side a:hover{text-decoration:underline} .n-ok{color:var(--g)}.n-no{color:var(--tm)} @media (max-width:600px){.ev{grid-template-columns:minmax(0,1fr) auto}.ev-time{grid-column:1/-1}} {% endblock %} {% block content %}