{% extends "base.html" %} {% block title %}Maritime — SignalOps{% endblock %} {% block extra_style %} /* ── Layout ── */ .mt-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:10px} .mt-head-right{display:flex;align-items:center;gap:10px} .mt-lbl{font-size:10px;color:var(--tm);letter-spacing:2px;margin-bottom:6px;text-transform:uppercase} .mt-ctl-row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap} .mt-coords{display:flex;gap:8px} .mt-coords input{width:130px} .mt-presets{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;align-items:center} .mt-chip{font-family:'Rajdhani',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.8px; padding:5px 10px;border-radius:5px;cursor:pointer;border:1px solid rgba(255,255,255,0.08); background:transparent;color:var(--td);transition:all .15s;white-space:nowrap} .mt-chip:hover{color:var(--t);border-color:rgba(138, 122, 184,0.3)} .mt-chip.active{background:rgba(138, 122, 184,0.14);color:var(--pl);border-color:rgba(138, 122, 184,0.35)} .mt-chip .dotc{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle} .mt-chip .cnt{color:var(--tm);margin-left:4px;font-family:'JetBrains Mono',monospace;font-size:10px} #case-tools{display:flex;gap:6px;align-items:center;flex-wrap:wrap;min-height:0} #case-tools:empty{display:none} .stat-box{background:var(--s);border:1px solid var(--b);border-radius:8px;padding:10px 14px;text-align:center;min-width:0} .stat-box .val{font-family:'Rajdhani',sans-serif;font-size:24px;font-weight:700;line-height:1} .stat-box .lbl{font-size:9px;letter-spacing:2px;color:var(--tm);margin-top:3px;text-transform:uppercase} #stats-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:12px} .cat-mini{display:flex;flex-wrap:wrap;gap:4px 8px;justify-content:center;font-size:10px;color:var(--td);line-height:1.4} .cat-mini span b{color:var(--t);font-weight:600} #mt-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:10px;height:calc(100vh - 330px);min-height:460px} .mt-map-card{position:relative;z-index:0;isolation:isolate;border:1px solid var(--b);border-radius:8px;overflow:hidden;background:#0C0C10;min-height:0} #ais-map{position:absolute;inset:0} .mt-side{background:var(--s);border:1px solid var(--b);border-radius:8px;display:flex;flex-direction:column;min-height:0;min-width:0} .mt-side-top{padding:10px;border-bottom:1px solid var(--b);display:flex;flex-direction:column;gap:8px} .mt-side-row{display:flex;gap:6px} .mt-side-row select{width:auto;flex:0 0 auto;padding:6px 8px;font-size:11px} .mt-side-row input{flex:1;min-width:0;padding:6px 10px;font-size:11px} #cat-chips{display:flex;flex-wrap:wrap;gap:4px} #cat-chips .mt-chip{padding:3px 7px;font-size:10px} #vessel-list{overflow-y:auto;flex:1;min-height:0} .v-row{display:flex;align-items:center;gap:9px;padding:8px 10px;border-bottom:1px solid rgba(255,255,255,0.03);cursor:pointer} .v-row:hover{background:rgba(138, 122, 184,0.06)} .v-row.selected{background:rgba(138, 122, 184,0.14)} .v-row.stale{opacity:0.55} .v-ico{width:22px;height:22px;flex:0 0 22px;display:flex;align-items:center;justify-content:center} .v-main{flex:1;min-width:0} .v-name{font-size:11.5px;color:var(--t);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .v-sub{font-size:10px;color:var(--td);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .v-right{text-align:right;flex:0 0 auto} .v-spd{font-family:'Rajdhani',sans-serif;font-size:14px;font-weight:700;color:var(--t)} .v-risk{display:inline-block;padding:1px 6px;border-radius:3px;font-size:9px;font-weight:700;letter-spacing:.5px} .r-lo{background:rgba(116, 176, 149,0.1);color:#74B095} .r-md{background:rgba(201, 161, 90,0.14);color:#C9A15A} .r-hi{background:rgba(199, 123, 123,0.16);color:#C77B7B} .empty-note{padding:24px 14px;text-align:center;color:var(--tm);font-size:11px;line-height:1.6} /* notices */ .mt-notice{border-radius:8px;padding:10px 14px;margin-bottom:10px;font-size:11.5px;line-height:1.55;display:flex;gap:10px;align-items:flex-start} .mt-notice b{font-family:'Rajdhani',sans-serif;letter-spacing:1px;font-size:13px} .mt-notice a{color:var(--pl)} .n-warn{background:rgba(201, 161, 90,0.08);border:1px solid rgba(201, 161, 90,0.3);color:#D9BD8C} .n-info{background:rgba(96,165,250,0.08);border:1px solid rgba(96,165,250,0.3);color:#BFDBFE} .n-err{background:rgba(199, 123, 123,0.08);border:1px solid rgba(199, 123, 123,0.35);color:#FECACA} .n-tr{display:block;color:var(--td);font-size:10.5px;margin-top:2px} /* detail */ .detail-panel{background:var(--s);border:1px solid rgba(138, 122, 184,0.3);border-radius:8px;padding:16px;display:none;margin-top:12px} .dp-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:12px} #dp-title{font-family:'Rajdhani',sans-serif;font-size:20px;font-weight:700;letter-spacing:1px;color:var(--t);word-break:break-word} .dp-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px} .detail-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:5px 12px;font-size:11px;align-items:baseline} .detail-grid .dk{color:var(--tm);letter-spacing:1px;font-size:10px;text-transform:uppercase;white-space:nowrap} .detail-grid .dv{color:var(--t);font-weight:600;word-break:break-word} .detail-section-hdr{font-size:9px;color:var(--tm);letter-spacing:2.5px;margin-bottom:10px;text-transform:uppercase;font-family:'Rajdhani',sans-serif;font-weight:700;padding-bottom:4px;border-bottom:1px solid rgba(138, 122, 184,0.15)} .flag-item{border-left:2px solid #C77B7B;padding:4px 0 4px 9px;margin-bottom:8px} .flag-item.info{border-left-color:#7C9BC9} .flag-item .ft{font-size:11px;color:var(--t);font-weight:600} .flag-item .fx{font-size:10px;color:var(--td);margin-top:2px;line-height:1.45} .dp-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px} .dp-links a,.dp-links button{font-size:11px;padding:6px 12px;text-decoration:none;display:inline-flex;align-items:center} .cat-badge{display:inline-block;padding:2px 8px;border-radius:3px;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;border:1px solid} /* map bits */ .ship-ico{background:transparent;border:none} .ship-ico svg{display:block;overflow:visible} .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} .mt-legend{position:absolute;left:10px;bottom:10px;z-index:500;background:rgba(11, 11, 15,0.88);border:1px solid rgba(138, 122, 184,0.25); border-radius:8px;padding:7px 9px;font-size:9.5px;color:var(--td);display:flex;flex-wrap:wrap;gap:4px 10px;max-width:calc(100% - 20px);pointer-events:none} .mt-legend i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;vertical-align:middle} .refresh-ring{width:14px;height:14px;border-radius:50%;border:2px solid rgba(138, 122, 184,0.2);border-top-color:var(--p);animation:spin 1s linear infinite;display:inline-block;vertical-align:middle} @media (max-width:900px){ .mt-head{flex-wrap:wrap} .mt-ctl-row > div{flex:1 1 100%;min-width:0} .mt-coords input{flex:1;width:auto;min-width:0} .mt-coords .btn{flex:0 0 auto;min-width:44px} .mt-ctl-row .btn{min-height:40px} #radius-sel{width:100%} #stats-row{grid-template-columns:repeat(3,minmax(0,1fr))} #mt-layout{grid-template-columns:minmax(0,1fr);height:auto;min-height:0} .mt-map-card{height:55vh;min-height:320px} .mt-side{max-height:520px} .dp-cols{grid-template-columns:minmax(0,1fr)} .v-row{min-height:44px} } @media (max-width:600px){ #stats-row{grid-template-columns:repeat(2,minmax(0,1fr))} #stats-row .stat-box:last-child{grid-column:1 / -1} .stat-box{padding:8px 10px} .stat-box .val{font-size:20px} .detail-panel{padding:12px} #dp-title{font-size:16px} } {% endblock %} {% block content %}