:root{font-family:PingFang SC,Microsoft YaHei,Noto Sans SC,sans-serif;color:#13253f;background-color:#f3f6fa}html{height:100%}*{box-sizing:border-box;scrollbar-width:none}*::-webkit-scrollbar{width:0;height:0}body{margin:0;height:100%;min-height:100vh;background:linear-gradient(135deg,#f4f8fc,#e9f1f8);overflow:hidden}#root{height:100%;min-height:100vh;overflow:hidden}.app-shell{--sidebar-width: 248px;min-height:100vh;position:relative;min-width:0;background:#f3f6fa}.app-sider.ant-layout-sider{position:sticky;top:0;height:100vh;z-index:1002;overflow:hidden;background:linear-gradient(180deg,#0c2340,#11345a);box-shadow:6px 0 24px #08172714}.app-sider .ant-layout-sider-children{display:flex;flex-direction:column;height:100%;min-width:0;min-height:0}.app-sider-scroll{flex:1;min-height:0;overflow-y:auto;padding:18px 0 8px}.app-sider-menu.ant-menu{min-height:100%;background:transparent;border-inline-end:none}.app-sider-menu.ant-menu .ant-menu-item-group-title{padding:14px 24px 8px}.app-sider-group-label{color:#d6e6f78a;font-size:13px;letter-spacing:.08em}.app-sider-menu.ant-menu .ant-menu-item{margin-inline:12px;margin-block:4px;width:auto;border-radius:12px;height:auto;padding-top:9px;padding-bottom:9px;line-height:1.4}.app-sider-menu-item-label{color:inherit;font-size:16px}.app-sider-footer{padding:12px 16px 20px}.app-sider-footer .ant-btn{height:38px;border-color:#ffffff38;color:#e8f1fb;background:#ffffff0a}.app-sider-footer .ant-btn:hover,.app-sider-footer .ant-btn:focus-visible{color:#fff;border-color:#ffffff52;background:#ffffff1a}.sidebar-toggle{position:fixed;top:50%;left:0;width:28px;height:76px;border:none;border-radius:0 8px 8px 0;background:#0817272e;box-shadow:none;opacity:0;display:grid;place-items:center;padding:0;cursor:pointer;z-index:1105;transform:translateY(-50%);transition:left .24s ease,opacity .2s ease,background .2s ease,transform .24s ease}.sidebar-toggle-open{left:var(--sidebar-width);border-radius:8px;transform:translate(-50%,-50%)}.sidebar-toggle:hover,.sidebar-toggle:focus-visible{opacity:1;background:#0817274d}.sidebar-toggle:focus-visible{outline:2px solid rgba(22,119,255,.5);outline-offset:2px}.sidebar-toggle-handle{display:block;width:6px;height:56px;border-radius:999px;background:#e6ecf3f0;box-shadow:0 0 0 1px #0817271f,0 8px 22px #08172738;transition:background .2s ease,box-shadow .2s ease}.sidebar-toggle:hover .sidebar-toggle-handle,.sidebar-toggle:focus-visible .sidebar-toggle-handle{background:#fff;box-shadow:0 0 0 1px #08172729,0 10px 26px #08172747}.sidebar-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;border:none;background:transparent;z-index:1001;display:none}.content{padding:18px 20px;min-width:0;height:100vh;min-height:100vh;overflow:hidden}.content-home{padding:0}.content>*{width:100%;min-width:0;height:100%;min-height:0}.auth-loading{min-height:100vh;display:grid;place-items:center}.login-page{min-height:100vh;display:grid;place-items:center;padding:0 32px 0 0;position:relative;overflow:hidden}.login-page-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at 14% 20%,rgba(62,101,145,.1),transparent 30%),radial-gradient(circle at 22% 72%,rgba(62,101,145,.06),transparent 26%),radial-gradient(circle at 42% 18%,rgba(168,187,210,.1),transparent 22%),linear-gradient(135deg,#eef3f8,#f5f8fc 55%,#f3f7fb)}.login-panel{width:100%;display:grid;grid-template-columns:minmax(0,1.618fr) minmax(420px,1fr);gap:clamp(28px,3vw,48px);align-items:stretch;position:relative;z-index:1;min-height:100vh}.login-page-intro{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:24px 0;color:#102a43;min-height:100%;overflow:hidden}.login-intro-visual{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;border-radius:0;background:radial-gradient(circle at 20% 28%,rgba(255,255,255,.28),transparent 24%),linear-gradient(180deg,#ffffff0f,#fff0)}.login-intro-visual:before,.login-intro-visual:after{content:"";position:absolute;pointer-events:none}.login-intro-visual:before{top:0;right:6%;bottom:0;left:0;background:linear-gradient(rgba(16,42,67,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(16,42,67,.05) 1px,transparent 1px);background-size:64px 64px;-webkit-mask-image:linear-gradient(125deg,#000000f2,#0000001f);mask-image:linear-gradient(125deg,#000000f2,#0000001f)}.login-intro-visual:after{top:1%;right:5%;width:42%;height:46%;background:linear-gradient(135deg,#7c96b21a,#7c96b205);clip-path:polygon(22% 0,100% 0,78% 100%,0 100%);transform:rotate(8deg)}.login-visual-grid,.login-visual-path,.login-visual-node,.login-visual-plane{position:absolute}.login-visual-grid{top:3%;right:6%;bottom:2%;left:0;background-image:linear-gradient(rgba(16,42,67,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(16,42,67,.045) 1px,transparent 1px);background-size:60px 60px;-webkit-mask-image:linear-gradient(125deg,#000000eb,#0000001a);mask-image:linear-gradient(125deg,#000000eb,#0000001a)}.login-visual-path{border:1px solid rgba(39,79,119,.18);border-radius:999px;background:#ffffff14}.login-visual-path-primary{left:-12%;top:-6%;width:96%;height:48%;transform:rotate(-14deg)}.login-visual-path-secondary{right:0;bottom:-8%;width:70%;height:40%;transform:rotate(-24deg)}.login-visual-node{width:12px;height:12px;border-radius:999px;background:#1d4ed8;box-shadow:0 0 0 8px #1d4ed814}.login-visual-node-primary{left:16%;top:18%}.login-visual-node-secondary{left:58%;top:34%}.login-visual-node-tertiary{right:12%;bottom:14%}.login-visual-plane{background:linear-gradient(135deg,#7897b81f,#7897b805);border:1px solid rgba(64,96,129,.08)}.login-visual-plane-top{top:-2%;right:-8%;width:46%;height:50%;transform:rotate(14deg)}.login-visual-plane-bottom{left:-20%;bottom:-14%;width:44%;height:46%;transform:rotate(-12deg)}.login-page-tag{display:inline-block;margin-bottom:10px;color:#486581;font-size:13px;letter-spacing:.14em;position:relative;z-index:1;margin-top:24px;margin-left:24px}.login-page-title.ant-typography{color:#102a43;font-size:clamp(32px,3.8vw,44px);font-weight:600;line-height:1.18;max-width:8em;position:relative;z-index:1;margin:0 0 24px 24px}.login-form-shell{width:min(100%,420px);align-self:center;justify-self:center;padding:56px 48px 56px 44px;position:relative;z-index:2;background:linear-gradient(180deg,#f1f6fbeb,#eef4fac2);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-left:1px solid rgba(16,42,67,.08);box-shadow:inset 0 1px #ffffff73}.login-eyebrow{display:inline-block;color:#486581;font-size:12px;font-weight:500;letter-spacing:.08em}.login-card-header{width:100%;position:relative;align-items:flex-start}.login-card-header .ant-typography{margin-bottom:0}.login-header-accent{display:block;width:22px;height:3px;border-radius:999px;background:#2450c7;margin-bottom:10px}.login-card-header .ant-typography h3,.login-card-header h3.ant-typography{color:#102a43;font-size:20px;font-weight:600;line-height:1.4}.login-form{margin-top:28px}.login-error{margin-bottom:16px}.login-form-shell .ant-form-item{margin-bottom:22px}.login-form-shell .ant-form-item-label>label{color:#17324d;font-weight:500}.login-form-shell .ant-input-affix-wrapper,.login-form-shell .ant-input{height:46px;border-radius:12px;background:#ffffffd6;border-color:#102a431a}.login-form-shell .ant-input-affix-wrapper{display:flex;align-items:center;padding-top:0;padding-bottom:0}.login-form-shell .ant-input-affix-wrapper input.ant-input{height:auto;line-height:1.5715;padding-top:0;padding-bottom:0}.login-form-shell .ant-btn{height:48px;border-radius:12px;font-weight:600}.login-form-shell .ant-btn-primary{background:#2450c7}.login-form-shell .ant-btn-primary:hover,.login-form-shell .ant-btn-primary:focus-visible{background:#2148b4}.login-form-shell .ant-input::placeholder,.login-form-shell .ant-input-affix-wrapper input::placeholder{color:#8fa1b3}@media (max-width: 900px){.login-panel{grid-template-columns:1fr;gap:24px;max-width:440px;min-height:auto}.login-page-intro{min-height:180px;padding:0;justify-content:flex-end}.login-intro-visual{top:-4%;right:0;bottom:60px;left:-6%}.login-form-shell{max-width:none;justify-self:stretch;width:100%}.login-page-title.ant-typography{max-width:none;font-size:34px}.login-form-shell{padding:24px 0 0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;border-left:none;box-shadow:none}}@media (max-width: 640px){.login-page{padding:24px 16px}.login-panel{max-width:100%}.login-page-intro{min-height:120px}.login-intro-visual{top:-8%;right:8%;bottom:28px;left:-10%;opacity:.9}.login-card-header .ant-typography h3,.login-card-header h3.ant-typography{font-size:18px}.login-form-shell .ant-input-affix-wrapper,.login-form-shell .ant-input,.login-form-shell .ant-btn{width:100%}}.page-card{max-width:840px;border-radius:14px;background:#fff;padding:24px;box-shadow:0 10px 30px #0f2d4a1f;min-width:0}.page-card h2{margin:0 0 12px}.page-card p{margin:8px 0;color:#35546f}.sub-nav{margin:16px 0;display:flex;flex-wrap:wrap;gap:8px}.sub-nav-link{text-decoration:none;font-size:14px;color:#0f2d4a;border:1px solid #c9dced;border-radius:8px;padding:6px 12px}.sub-nav-link-active{border-color:#1b4d78;background:#e8f2fb}.sub-page-content{padding-top:8px;min-width:0}.equipment-layout-card{max-width:none}.equipment-layout-title{margin:0}.equipment-list-page{display:grid;gap:14px;min-width:0;overflow-x:hidden}.equipment-filter-form{display:block;padding:8px 10px;border:1px solid #e8ecf2;border-radius:8px;background:#fafcff}.equipment-filter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:6px 8px}.equipment-filter-item{margin-bottom:0}.equipment-filter-item-full{grid-column:1 / -1}.equipment-filter-item .ant-form-item-control-input,.equipment-filter-item .ant-select,.equipment-filter-item .ant-input{width:100%}.equipment-filter-actions{margin-top:6px;margin-bottom:0}.port-filter-bar.ant-form{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:12px 16px;border:1px solid #e5ebf3;border-radius:12px;background:#f8fafc}.port-filter-bar.ant-form-inline .ant-form-item{margin-right:0;margin-bottom:0}.port-filter-bar.ant-form-inline .port-filter-item{display:grid;grid-template-columns:max-content minmax(0,auto);align-items:center;gap:8px}.port-filter-item .ant-form-item-label{padding-bottom:0}.port-filter-item .ant-form-item-label>label{width:auto;height:32px;justify-content:flex-start;color:#52667d;white-space:nowrap}.port-filter-item .ant-form-item-control{flex:none}.port-filter-item .ant-input,.port-filter-item .ant-select,.port-filter-item .ant-picker{width:220px}.port-filter-item-wide .ant-input,.port-filter-item-wide .ant-select,.port-filter-item-wide .ant-picker{width:280px}.port-filter-actions{margin-inline-start:auto}.port-filter-actions .ant-form-item-control-input-content{display:flex;align-items:center}.port-filter-actions .ant-space{gap:8px}.equipment-table-wrap{width:100%;max-width:100%;min-width:0;overflow-x:auto}.equipment-toolbar{display:flex;justify-content:flex-start}.equipment-location-hint{margin-top:10px;color:#4b6783;font-size:13px}.equipment-zone-page{display:grid;grid-template-columns:360px 1fr;gap:12px;align-items:start}.equipment-zone-table-card .ant-card-body{padding:8px}.equipment-zone-map-card{min-height:580px}.equipment-zone-map-card .ant-card-body{height:100%}.equipment-map-rotated-frame{position:relative;width:100%;height:520px;overflow:hidden;border-radius:8px}.equipment-map-rotated-frame-compact{height:100%;min-height:0}.equipment-location-map,.equipment-zone-map{width:100%;height:100%}.equipment-map-bg{transform-origin:center}.equipment-rotated-bg{position:absolute;pointer-events:none;transform-origin:center;opacity:.92}.equipment-rotated-bg img{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none}.equipment-map-empty-mask{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#ffffffc7;pointer-events:none}.equipment-location-marker span{display:block;width:16px;height:16px;border-radius:999px;background:#1677ff;border:2px solid #ffffff;box-shadow:0 2px 8px #1677ff8c}.equipment-benchmark-marker span{width:18px;height:18px;background:#fa541c;box-shadow:0 4px 12px #fa541c6b}.equipment-map-benchmark-page{min-width:0}.equipment-map-benchmark-controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-width:0}.equipment-map-benchmark-control-block{display:grid;gap:8px;min-width:0}.equipment-map-benchmark-control-block span{color:#35546f;font-size:13px}.equipment-map-benchmark-meta{margin-top:14px;display:grid;gap:12px;min-width:0}.equipment-map-benchmark-meta .ant-typography{margin-bottom:0}.equipment-map-benchmark-hint{margin-bottom:12px;display:flex;flex-wrap:wrap;gap:8px 12px;color:#4b6783}.equipment-map-benchmark-panel{display:grid;gap:12px;min-width:0}.equipment-map-benchmark-panel-header{display:grid;gap:6px;min-width:0}.equipment-map-benchmark-compare-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;min-width:0}.equipment-map-benchmark-frame{height:620px}.equipment-map-benchmark-canvas{cursor:crosshair}.equipment-benchmark-popup{display:grid;gap:4px;font-size:12px;line-height:1.5;color:#1f3349}.equipment-benchmark-popup strong{font-size:13px}.equipment-map-benchmark-result{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-width:0}.equipment-map-benchmark-result-compare{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.equipment-map-benchmark-result>div{display:grid;gap:6px;padding:14px 16px;border-radius:12px;border:1px solid #dce7f2;background:linear-gradient(180deg,#f8fbff,#eef5fc);min-width:0}.equipment-map-benchmark-result span{color:#5a7690;font-size:13px}.equipment-map-benchmark-result strong{color:#102a43;font-size:15px;word-break:break-all}.equipment-map-benchmark-result .ant-btn{justify-self:start}.equipment-south-overlay-group-bar{margin-bottom:12px;display:flex;flex-wrap:wrap;gap:8px}.equipment-south-overlay-page{height:100%;min-height:0;overflow:hidden}.equipment-south-scroll-page{display:block;height:100%;min-height:100%;overflow-y:auto;overflow-x:hidden;padding-right:2px}.equipment-south-static-page{display:grid;grid-template-rows:minmax(0,1fr);height:100%;min-height:0;overflow:hidden}.equipment-south-static-scroll{min-height:0;overflow-y:auto;overflow-x:hidden;padding-right:2px}.equipment-south-reference-stage-frame{overflow:hidden;border-radius:12px}.equipment-south-reference-stage-frame>div{transform:rotate(var(--south-display-rotate-deg, 0deg)) scale(var(--south-display-scale, 1));transform-origin:center center}.equipment-south-reference-summary .ant-descriptions-view{background:#f7fafc;border:1px solid #e7eef5;border-radius:10px}.equipment-south-reference-summary .ant-descriptions-row>th,.equipment-south-reference-summary .ant-descriptions-row>td{padding-top:10px;padding-bottom:10px}.equipment-south-display-stage-shell{position:relative;height:clamp(760px,calc(100vh - 230px),980px);min-height:760px;overflow:hidden;border-radius:14px;background:radial-gradient(circle at 20% 18%,rgba(90,138,185,.18),transparent 26%),linear-gradient(180deg,#0a2138,#071727);box-shadow:inset 0 0 0 1px #ffffff14}.south-port-map-shell-compact{height:100%;min-height:0;border-radius:8px}.equipment-south-display-stage-pan{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;overflow:hidden;touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none}.equipment-south-display-stage-pan:active{cursor:grabbing}.equipment-south-display-stage-content{width:100%;height:100%}.equipment-south-overlay-scroll{display:grid;gap:10px;height:100%;min-height:0;overflow-y:auto;overflow-x:hidden;padding-right:2px}.equipment-south-overlay-stage{position:relative;width:100%;aspect-ratio:1791.52 / 1088.16;overflow:hidden;border:1px solid #dce7f2;border-radius:8px;background:#f4f8fc}.equipment-south-overlay-image,.equipment-south-overlay-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.equipment-south-overlay-image{object-fit:fill;-webkit-user-select:none;user-select:none;pointer-events:none}.equipment-south-overlay-svg{overflow:visible;pointer-events:none}.equipment-south-overlay-region{pointer-events:all;cursor:pointer;transition:opacity .2s ease,filter .2s ease}.equipment-south-overlay-region:hover{filter:brightness(.96)}.equipment-south-overlay-landmark{fill:#faad14;stroke:#5c3b00;stroke-width:2px;pointer-events:all;cursor:crosshair}.equipment-south-overlay-region-label,.equipment-south-overlay-landmark-label{paint-order:stroke;stroke:#fffffff5;stroke-width:3px;stroke-linejoin:round;pointer-events:all;cursor:pointer}.equipment-south-overlay-region-label{font-size:16px;font-weight:700}.equipment-south-overlay-landmark-label{font-size:15px;font-weight:700;fill:#5c3b00}.equipment-south-overlay-tooltip{position:absolute;z-index:4;min-width:220px;max-width:320px;padding:10px 12px;border:1px solid rgba(9,30,66,.14);border-radius:10px;background:#fffffff5;box-shadow:0 10px 30px #0f172a29;color:#1f2937;font-size:12px;line-height:1.55;pointer-events:none}.quick-links{margin-top:18px;display:flex;flex-wrap:wrap;gap:8px}.quick-links a{text-decoration:none;font-size:13px;color:#0f2d4a;border:1px solid #c9dced;border-radius:999px;padding:4px 10px}.port-page{display:grid;gap:10px;min-width:0;height:100%;min-height:0;overflow:hidden}.port-page-header{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;min-width:0}.port-page-title-block{min-width:0}.port-page-header-actions{justify-content:flex-end}.port-page-header .ant-typography{margin-bottom:0}.port-page-title.ant-typography{margin-bottom:0;font-size:20px;line-height:1.2}.port-page-subtitle.ant-typography{margin-top:2px;color:#667f98;font-size:13px;line-height:1.5}.port-detail-action.ant-btn{padding-inline:0;height:auto}.port-table-primary-text{display:inline-block;padding-left:2px;color:#102a43;font-weight:600;line-height:1.5}.port-stat-grid,.port-overview-grid,.port-detail-grid,.port-dual-page,.port-command-page{min-width:0}.port-card{border-radius:10px;border:1px solid #e3eaf1;box-shadow:none;background:#fff;min-width:0}.port-card .ant-card-head{min-height:48px;padding:0 16px;border-bottom:1px solid #eef2f6}.port-card .ant-card-head-title{font-size:15px}.port-card .ant-card-body{padding:12px 16px}.port-table-wrap{width:100%;max-width:100%;min-width:0;overflow-x:auto}.port-page-table-card{min-height:clamp(360px,calc(100vh - 246px),620px);overflow:hidden}.port-page-table-card .ant-card-body{display:flex;flex-direction:column;min-height:0;height:100%;padding:0}.port-page-table-card .port-table-wrap{min-height:0;height:100%}.port-stable-table.ant-table-wrapper,.port-stable-table .ant-spin-nested-loading,.port-stable-table .ant-spin-container{display:flex;flex-direction:column;flex:1;min-height:100%}.port-stable-table .ant-table{display:flex;flex-direction:column;flex:1;height:100%}.port-stable-table .ant-table-container{flex:1;border-start-start-radius:0;border-start-end-radius:0}.port-stable-table .ant-table-body,.port-stable-table .ant-table-content{scrollbar-width:thin;scrollbar-color:#9fb4c8 #edf3f8}.port-stable-table .ant-table-body::-webkit-scrollbar,.port-stable-table .ant-table-content::-webkit-scrollbar{width:10px;height:10px}.port-stable-table .ant-table-body::-webkit-scrollbar-track,.port-stable-table .ant-table-content::-webkit-scrollbar-track{background:#edf3f8;border-radius:999px}.port-stable-table .ant-table-body::-webkit-scrollbar-thumb,.port-stable-table .ant-table-content::-webkit-scrollbar-thumb{background:#9fb4c8;border-radius:999px;border:2px solid #edf3f8}.port-stable-table .ant-table-thead>tr>th{padding:12px 16px;background:#fafbfd;color:#53687d;font-size:13px;font-weight:600;border-bottom:1px solid #e8edf3}.port-stable-table .ant-table-tbody>tr>td{padding:14px 16px;color:#24384d;border-bottom:1px solid #edf1f5;background:#fff}.port-stable-table .ant-table.ant-table-small .ant-table-thead>tr>th,.port-stable-table .ant-table.ant-table-small .ant-table-tbody>tr>td{padding:14px 16px}.port-stable-table .ant-table-thead>tr>th.ant-table-cell-fix-left,.port-stable-table .ant-table-thead>tr>th.ant-table-cell-fix-right,.port-stable-table .ant-table-tbody>tr>td.ant-table-cell-fix-left,.port-stable-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{background:inherit}.port-stable-table .ant-table-tbody>tr:hover>td{background:#fafcff!important}.port-stable-table .ant-table-placeholder .ant-table-cell{height:260px}.port-stable-table .ant-pagination{margin-top:auto;padding:10px 16px 14px;border-top:1px solid #eef2f6}.port-summary-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;min-width:0}.port-summary-strip-item{min-width:0;padding:10px 14px;border-radius:10px;border:1px solid #e1e8f0;background:#ffffffc7}.port-summary-strip-item .ant-statistic{line-height:1}.port-summary-strip-item .ant-statistic-content{font-size:24px}.port-summary-strip-item .ant-statistic-content-value{color:#16324d}.port-summary-strip-item strong{color:#16324d;font-size:24px;line-height:1.1;font-weight:600}.port-summary-strip-label{margin-bottom:6px;color:#6a8198;font-size:12px;line-height:1.4}.port-dual-page{display:grid;grid-template-columns:380px minmax(0,1fr);gap:16px}.port-workbench{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:16px;min-width:0;min-height:0}.port-workbench-main,.port-workbench-side{display:grid;gap:16px;min-width:0;min-height:0}.port-workbench-main{overflow:hidden}.port-workbench-side{overflow:auto;padding-right:2px}.port-command-page{display:grid;grid-template-columns:420px minmax(0,1fr);gap:16px}.port-side-stack,.port-main-stack,.port-detail-stack{display:grid;gap:16px;min-width:0;min-height:0;overflow:auto;padding-right:2px}.port-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.port-map-card .ant-card-body{min-width:0;min-height:0}.port-secondary-drawer .ant-drawer-header{padding:14px 16px;border-bottom:1px solid #eef2f6}.port-secondary-drawer .ant-drawer-body{padding:12px 16px 16px;overflow:auto}.port-drawer-stack{display:grid;gap:12px;min-width:0;min-height:0}.port-detail-map-frame{height:420px;min-height:0;overflow:hidden;border:1px solid #e3eaf1;border-radius:10px;background:#dbe7f3}.port-detail-map-frame .equipment-map-rotated-frame{border-radius:10px}.port-form-card .ant-card-body{display:grid;gap:12px}.hardware-lab-page{--hardware-lab-content-height: calc(100vh - 36px) ;min-height:0;height:var(--hardware-lab-content-height);max-height:var(--hardware-lab-content-height);display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:12px;overflow:hidden}.hardware-lab-tabs.ant-tabs,.hardware-lab-inner-tabs.ant-tabs{height:100%;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden}.hardware-lab-tabs.ant-tabs>.ant-tabs-nav{margin-bottom:12px}.hardware-lab-tabs>.ant-tabs-content-holder,.hardware-lab-inner-tabs>.ant-tabs-content-holder{min-height:0;overflow:hidden}.hardware-lab-tabs .ant-tabs-content,.hardware-lab-tabs .ant-tabs-tabpane,.hardware-lab-inner-tabs .ant-tabs-content,.hardware-lab-inner-tabs .ant-tabs-tabpane{height:100%;min-height:0;overflow:hidden}.hardware-lab-flow{display:grid;grid-template-columns:330px minmax(0,1fr);gap:16px;min-width:0;min-height:0;height:100%;overflow:hidden}.hardware-lab-flow.hardware-lab-observe-layout{grid-template-columns:minmax(0,60%) minmax(0,40%)}.hardware-lab-left,.hardware-lab-center{display:grid;gap:16px;min-width:0;min-height:0;align-content:start}.hardware-lab-left{overflow:hidden}.hardware-lab-center{grid-template-rows:auto minmax(0,1fr);overflow:hidden}.hardware-lab-inspection-center{grid-template-rows:none;overflow:auto;padding-right:2px}.hardware-lab-device-card .ant-card-body{min-width:0;min-height:0;padding-bottom:14px}.hardware-lab-device-card .ant-tabs-nav{margin-bottom:12px}.hardware-lab-device-form .ant-form-item,.hardware-lab-existing-device .ant-form-item{margin-bottom:10px}.hardware-lab-existing-device{width:100%}.hardware-lab-selected-device{padding-top:2px}.hardware-lab-map-card .ant-card-body{display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;min-width:0;min-height:0;height:100%}.hardware-lab-map-card .port-draw-map-frame{height:100%;min-height:0;margin-top:0}.hardware-lab-panel .ant-card-body{min-width:0}.hardware-lab-map-card{min-height:0}.hardware-lab-actions,.hardware-lab-actions .ant-btn,.hardware-lab-actions .ant-space-compact,.hardware-lab-actions .ant-collapse,.hardware-lab-observe-stack{width:100%}.hardware-lab-observe-shell{display:grid;gap:16px;max-width:880px}.hardware-lab-observe-tabs .ant-tabs-nav{margin-bottom:12px}.hardware-lab-observe-descriptions .ant-descriptions-view{background:#fafcff;border-radius:10px;padding:8px 12px}.hardware-lab-log-block{margin:6px 0 0;padding:10px 12px;border-radius:8px;background:#f7f9fc;color:#223042;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.hardware-local-pile-card .ant-card-body{min-width:0}.hardware-local-pile-stack{width:100%}.hardware-local-pile-select-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.hardware-local-pile-select.ant-form-item{margin-bottom:0}.hardware-local-pile-map{position:relative;height:320px;min-height:260px;overflow:hidden;border:1px solid #dce7f2;border-radius:8px;background:#eef4f8}.hardware-local-pile-map-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.hardware-local-pile-map-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:none;background:#f6fafdd1}.hardware-local-pile-marker{background:transparent;border:0}.hardware-local-pile-marker span{display:grid;place-items:center;width:28px;height:28px;border:3px solid #ffffff;border-radius:50%;color:#fff;font-size:13px;font-weight:700;box-shadow:0 6px 14px #0f233738}.hardware-observed-device-marker{background:transparent;border:0}.hardware-observed-device-marker span{display:block;border:3px solid #ffffff;border-radius:50%;box-shadow:0 6px 14px #0f233738}.hardware-local-pile-status-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.hardware-local-pile-status{display:grid;gap:6px;min-width:0;padding:10px;border:1px solid #e3eaf1;border-radius:8px;background:#fbfdff}.hardware-local-pile-status-title{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.hardware-local-pile-status-title .ant-typography{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hardware-local-pile-status-line{display:grid;grid-template-columns:42px minmax(0,1fr);gap:6px;align-items:center;min-width:0;font-size:12px}.hardware-local-pile-status-line span{color:#6a8198}.hardware-local-pile-status-line .ant-typography{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.hardware-lab-observe-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr) minmax(0,1fr);gap:12px;min-height:0;overflow:hidden}.hardware-lab-observe-grid>.hardware-lab-map-card{grid-row:1 / span 2}.hardware-lab-observe-grid .ant-card,.hardware-lab-observe-grid .ant-card-body{min-height:0}.hardware-lab-observe-grid .hardware-lab-panel .ant-card-body{display:grid;min-height:0}.hardware-lab-stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.hardware-lab-alarm-list{width:100%}.port-card-tabs .ant-tabs-nav{margin-bottom:12px}.port-compact-hint.ant-typography{margin:0;color:#667f98;font-size:12px;line-height:1.6}.job-plan-list-cell{display:grid;gap:2px}.job-plan-filter-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px 10px;align-items:end}.job-plan-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.job-plan-table-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-end}.job-plan-table-header .ant-typography{margin-bottom:0}.job-plan-filter-action{display:flex;align-items:flex-end}.job-plan-filter-action .ant-form-item-control{width:100%}.job-plan-drawer-toolbar{margin-bottom:16px}.port-playback-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.port-playback-toolbar-main{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.port-playback-toolbar-meta{display:flex;gap:12px;align-items:center;flex-wrap:wrap;color:#5a7690;font-size:13px}.port-playback-slider-wrap{display:grid;gap:6px;margin-bottom:12px}.port-playback-filter-grid{display:grid;gap:12px;margin-bottom:12px}.port-playback-filter-range{display:grid;gap:6px;color:#27445f;font-size:13px}.port-playback-filter-range .ant-picker{width:100%}.port-playback-slider-meta{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;color:#5a7690;font-size:13px}.port-overview-items{display:grid;gap:10px}.port-overview-item{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:12px;border-radius:12px;background:#f7fbff;border:1px solid #e5eef7}.port-overview-item span{word-break:break-word}.port-json-block{margin:0;padding:12px;border-radius:12px;background:#0f2237;color:#ecf6ff;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;overflow-x:auto}.port-tag-cloud{display:flex;flex-wrap:wrap;gap:8px}.port-ol-frame{position:relative}.port-ol-map{width:100%;height:100%;position:relative;z-index:2}.port-ol-map .ol-viewport,.port-ol-map .ol-overlaycontainer-stopevent,.port-ol-map .ol-overlaycontainer{border-radius:8px}.port-ol-map .ol-viewport{background:transparent}.port-ol-bg-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;transform-origin:center}.port-ol-bg-overlay img,.port-ol-bg-overlay svg{width:100%;height:100%;display:block}.port-draw-map-frame{margin-top:12px;height:360px;border-radius:12px;overflow:hidden;border:1px solid #dce7f2}.port-draw-map-canvas{cursor:crosshair}.home-map-screen{position:relative;height:100%;min-height:0;overflow:hidden;background:#f3f6fa}.home-map-screen .equipment-map-rotated-frame{height:100%;border-radius:0}.home-map-screen .equipment-zone-map,.home-map-screen .equipment-location-map{height:100%}.home-map-screen .south-port-map-shell{background:transparent;box-shadow:none}.home-map-overlay{position:absolute;z-index:920;min-width:0}.home-map-topbar{top:0;left:0;right:0;min-height:190px;display:grid;grid-template-rows:64px auto;align-content:start;gap:22px;padding:20px 32px 22px;border-bottom:1px solid rgba(202,216,230,.78);background:linear-gradient(180deg,#f9fcffeb,#f4f9fdc2);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 10px 28px #162d4414}.home-map-title-row{position:relative;width:100%;min-height:64px;display:grid;grid-template-columns:minmax(120px,1fr) auto minmax(120px,1fr);align-items:center;gap:16px}.home-map-menu-toggle.ant-btn{justify-self:start;width:40px;height:40px;border:1px solid rgba(28,70,108,.18);border-radius:6px;color:#173e63;background:#ffffffb8;font-weight:600;cursor:pointer;box-shadow:0 8px 20px #162d4414}.home-map-menu-toggle.ant-btn .anticon{font-size:18px}.home-map-menu-toggle.ant-btn:hover,.home-map-menu-toggle.ant-btn:focus-visible{border-color:#1677ff61;color:#0f4f8c;background:#fff}.home-map-title{margin:0;color:#102a43;font-size:46px;line-height:1.08;font-weight:700;text-align:center}.home-map-stat-board{width:min(100%,1180px);justify-self:center;min-width:0;display:flex;align-items:center;gap:32px}.home-map-stat-groups{display:grid;grid-template-columns:minmax(280px,auto) minmax(420px,auto);justify-content:center;gap:36px;flex:1}.home-map-stat-group{min-width:0;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:12px}.home-map-stat-group+.home-map-stat-group{padding-left:32px;border-left:1px solid rgba(145,164,184,.3)}.home-map-stat-group-label{color:#2e597a;font-size:16px;font-weight:600;letter-spacing:0;white-space:nowrap}.home-map-stat-strip{min-width:0;display:flex;align-items:center;flex-wrap:wrap;gap:10px 18px}.home-map-stat-item{min-width:132px;display:inline-grid;grid-template-columns:34px minmax(64px,auto) auto auto;align-items:center;gap:7px;white-space:nowrap}.home-map-stat-item span{color:#516b83;font-size:14px}.home-map-stat-icon{width:32px;height:32px;background-size:contain;background-position:center;background-repeat:no-repeat}.home-map-stat-icon-front{background-image:url(/front-slot.svg)}.home-map-stat-icon-yard{background-image:url(/yard-slot.svg)}.home-map-stat-icon-vehicle{background-image:url(/haul-truck.svg)}.home-map-stat-icon-tag{background-image:url(/tag.svg)}.home-map-stat-icon-pile{background-image:url(/pile.svg)}.home-map-stat-icon-handheld{background-image:url(/handheld.svg)}.home-map-stat-item strong{color:#102a43;font-size:24px;line-height:1.1;font-weight:600}.home-map-stat-item small{font-size:18px;color:#6d8194}.home-map-realtime-note{justify-self:center;max-width:min(100%,720px);color:#8a5a00;font-size:14px;line-height:1.35;text-align:center;background:#fff7e6e0;border:1px solid rgba(250,173,20,.36);border-radius:6px;padding:6px 12px}.home-map-topbar-actions{justify-self:end;min-width:max-content;display:flex;align-items:center;gap:8px;padding-left:2px}.home-map-topbar-actions .ant-segmented{background:#e0e9f2d1}.home-map-search-bar{width:260px;flex-shrink:0}.home-map-search-bar .ant-input{border:1px solid rgba(28,70,108,.18);border-radius:6px;background:#ffffffc7;color:#102a43;font-size:14px}.home-map-search-bar .ant-input::placeholder{color:#7d94a8}.home-map-search-bar .ant-input:hover{border-color:#1677ff61}.home-map-search-bar .ant-input:focus,.home-map-search-bar .ant-input-focused{border-color:#1677ff;box-shadow:0 0 0 2px #1677ff1f}.home-map-search-bar .ant-input-search-button{border-radius:0 6px 6px 0;border-color:#1c466c2e}.home-map-drawer-body{min-height:0;overflow:auto}.home-map-overlay-panel{top:168px;right:20px;bottom:20px;width:min(420px,calc(100vw - 40px));z-index:960}.home-map-focus-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1200;padding:0;background:#dbe7f3}.home-map-focus-close{position:absolute;top:18px;left:18px;z-index:4;border:1px solid rgba(255,255,255,.28);border-radius:999px;padding:10px 16px;background:#07121ea3;color:#f5f9ff;font-weight:600;letter-spacing:.02em;cursor:pointer;box-shadow:0 10px 28px #0817273d;transition:background .2s ease,border-color .2s ease,color .2s ease,box-shadow .2s ease,transform .2s ease}.home-map-focus-close:hover,.home-map-focus-close:focus-visible{background:#fffffff0;border-color:#fffffffa;color:#0f2237;box-shadow:0 14px 36px #08172757;transform:translateY(-1px)}.home-map-focus-close:focus-visible{outline:2px solid rgba(255,255,255,.78);outline-offset:2px}.home-map-focus-close:active{transform:translateY(0)}.home-map-focus-map{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;background:#dbe7f3}.home-map-focus-map .equipment-map-rotated-frame{border-radius:0}.home-map-flyout-card{height:100%;border-radius:20px;border:1px solid rgba(220,231,242,.9);box-shadow:0 20px 48px #08172738;overflow:hidden}.home-map-screen .leaflet-top,.home-map-screen .leaflet-bottom{z-index:700}.home-map-flyout-card .ant-card-body{height:calc(100% - 57px);display:grid;min-width:0}.home-map-list{display:grid;gap:10px;height:100%;align-content:start;overflow-y:auto;min-width:0;padding-right:4px}.home-map-detail-panel{display:grid;gap:12px;align-content:start;overflow-y:auto;min-height:0}.home-map-list-item{width:100%;padding:12px;border:1px solid #dce7f2;border-radius:12px;background:#f7fbff;display:flex;justify-content:space-between;align-items:flex-start;gap:12px;text-align:left;cursor:pointer;min-width:0;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}.home-map-list-item:hover{border-color:#8bb7de;box-shadow:0 10px 24px #0f2d4a1a;transform:translateY(-1px)}.home-map-list-item-active{border-color:#1677ff;background:linear-gradient(180deg,#eef6ff,#f8fbff);box-shadow:0 10px 24px #1677ff1f}.home-map-list-item-main,.home-map-list-item-meta{display:grid;gap:4px;min-width:0}.home-map-list-item-main strong,.home-map-list-item-main span,.home-map-list-item-meta span{word-break:break-word}.home-map-list-item-main span,.home-map-list-item-meta{color:#5a7690;font-size:13px}.access-permission-editor{width:100%}.access-permission-group{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;padding:12px 0;border-top:1px solid rgba(15,23,42,.08)}.access-permission-row{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:32px}@media (max-width: 900px){.app-shell{--sidebar-width: min(260px, 82vw);grid-template-columns:1fr}.app-shell-sidebar-open{grid-template-columns:1fr}.sidebar{position:fixed;top:0;left:0;bottom:0;width:min(260px,82vw);padding:72px 18px 18px}.content{padding:18px}.content-home{padding:0}.equipment-zone-page,.equipment-map-benchmark-compare-grid,.hardware-lab-flow,.hardware-lab-observe-grid{grid-template-columns:1fr}.hardware-local-pile-select-grid,.hardware-local-pile-status-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hardware-lab-observe-grid{grid-template-rows:minmax(260px,1fr) minmax(0,1fr) minmax(0,1fr)}.hardware-lab-observe-grid>.hardware-lab-map-card{grid-row:auto}.port-page-header,.port-overview-item,.job-plan-table-header{flex-direction:column}.port-summary-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.port-dual-page,.port-workbench,.port-command-page,.port-detail-grid,.port-playback-filter-grid{grid-template-columns:1fr}.home-map-topbar{min-height:178px;grid-template-rows:auto auto;gap:10px;padding:14px}.home-map-title-row{grid-template-columns:1fr;gap:10px}.home-map-menu-toggle,.home-map-topbar-actions{justify-self:stretch}.home-map-title{font-size:24px;order:-1}.home-map-stat-board{width:100%;grid-template-columns:1fr;gap:8px}.home-map-stat-group{grid-template-columns:auto minmax(0,1fr)}.home-map-stat-group+.home-map-stat-group{padding-left:0;border-left:0}.home-map-stat-strip{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.home-map-stat-item{min-width:0;padding-right:0;border-right:0}.home-map-topbar-actions{width:100%;min-width:0}.home-map-topbar-actions .ant-segmented{flex:1}.home-map-overlay-panel{left:16px;right:16px;top:auto;bottom:72px;width:auto;height:min(56vh,520px)}.home-map-focus-layer{background:#dbe7f3}}@media (max-width: 640px){.content{padding:12px}.port-summary-strip,.access-permission-group{grid-template-columns:1fr}}@keyframes port-map-marker-pulse{0%,to{opacity:1}50%{opacity:.55}}@keyframes port-map-polygon-pulse{0%,to{opacity:1}50%{opacity:.5}}.port-map-marker-pulse{animation:port-map-marker-pulse 1.6s ease-in-out infinite}.port-map-polygon-pulse{animation:port-map-polygon-pulse 1.6s ease-in-out infinite}.map-detail-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:945}.map-detail-card{position:absolute;width:300px;max-height:380px;background:#fffffff5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:14px;box-shadow:0 8px 32px #102a4324,0 2px 8px #102a4314;border:1px solid rgba(202,216,230,.6);z-index:950;display:flex;flex-direction:column;overflow:hidden;animation:map-detail-enter .2s ease-out}@keyframes map-detail-enter{0%{opacity:0;transform:translateY(12px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.map-detail-close{position:absolute;top:10px;right:10px;width:26px;height:26px;border:none;background:#102a430f;border-radius:6px;color:#5a738b;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2;font-size:12px;transition:background .15s,color .15s}.map-detail-close:hover{background:#102a431f;color:#102a43}.map-detail-loading{display:flex;align-items:center;justify-content:center;padding:36px 0}.map-detail-scroll{flex:1;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none;padding:18px 20px 6px;position:relative}.map-detail-scroll::-webkit-scrollbar{display:none}.map-detail-scroll-overflow:after{content:"";position:sticky;bottom:0;left:0;right:0;display:block;height:28px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.94));pointer-events:none;flex-shrink:0}.map-detail-inner{min-height:0}.map-detail-section-title{font-size:12px;font-weight:600;color:#8b9eb0;text-transform:none;letter-spacing:.4px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid rgba(202,216,230,.5)}.map-detail-section-title+.map-detail-section-title{margin-top:14px}.map-detail-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:3px 0;font-size:13px;line-height:1.45}.map-detail-label{color:#6d8194;flex-shrink:0;min-width:56px}.map-detail-value{color:#102a43;text-align:right;word-break:break-all;max-width:180px}.map-detail-divider{height:1px;background:#cad8e666;margin:8px 0}
