/* Shared visual theme for Shiro pages and the navigation shell. */
:root{--cloud-primary:#3973df;--cloud-ink:#20334e;--cloud-muted:#8a99ae;--cloud-border:#e6ecf5;--cloud-bg:#f3f6fb;--cloud-radius:12px}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--cloud-ink);font-size:13px;-webkit-font-smoothing:antialiased}
body.gray-bg,.gray-bg{background:var(--cloud-bg)}
a{color:var(--cloud-primary)}a:hover{color:#2158be}
.wrapper-content{padding:24px}.ibox{border:1px solid var(--cloud-border);border-radius:var(--cloud-radius);overflow:visible;background:white;box-shadow:0 5px 22px #243f6804;margin-bottom:22px}.ibox-title{border:0;border-bottom:1px solid #f0f3f8;border-radius:12px 12px 0 0;padding:22px 24px;min-height:62px}.ibox-title h5{font-size:17px;font-weight:650;float:none;color:var(--cloud-ink);margin:0}.ibox-content{border:0;padding:24px;border-radius:0 0 12px 12px}.text-muted{color:var(--cloud-muted)}
.btn{border-radius:7px;font-size:12px;font-weight:500;transition:background .15s,box-shadow .15s;padding:7px 14px;box-shadow:none}.btn:focus-visible,a:focus-visible{outline:2px solid #76a5fa;outline-offset:2px}.btn-primary,.btn-info{background:var(--cloud-primary);border-color:var(--cloud-primary)}.btn-primary:hover,.btn-primary:focus,.btn-info:hover{background:#2d63cb;border-color:#2d63cb}.btn-success{background:#16a58a;border-color:#16a58a}.btn-success:hover{background:#0f9278;border-color:#0f9278}.btn-default{background:white;border-color:#dfe6f0;color:#62738d}.btn-default:hover{background:#f1f5fb;border-color:#cdd9ea;color:#2a59ac}.btn-danger{background:#fff0f1;border-color:#f8d6dc;color:#cc5b70}.btn-danger:hover{background:#ffe2e6;border-color:#f2bec9;color:#b34358}.btn-warning{background:#fff4df;border-color:#f4dfb8;color:#b17a24}.btn-xs{padding:4px 9px;border-radius:6px;font-size:12px}.btn-link{background:transparent;border:0;color:#3973df}.btn-link:hover{background:#edf3ff;text-decoration:none}.btn-link.text-danger{color:#cf5f72}.btn-link.text-danger:hover{background:#fff0f2}.btn.disabled,.btn[disabled]{opacity:.5}
.form-control,.select2-container--default .select2-selection--single{border:1px solid #dfe6f0;border-radius:8px;box-shadow:none;min-height:36px;color:#344a68;background:#fff}.form-control:focus{border-color:#8cb1f0;box-shadow:0 0 0 3px #3973df0c}.form-control::placeholder{color:#a2aebf}textarea.form-control{min-height:110px;line-height:1.8}label{font-weight:500;color:#667890}.help-block{font-size:12px;color:#97a4b6;margin-top:8px}.input-group .form-control{border-radius:8px 0 0 8px}.input-group-btn>.btn{min-height:36px}.input-group-btn:last-child>.btn{border-radius:0 8px 8px 0}
.select-list,.select-table{background:white;border-radius:12px;border:1px solid var(--cloud-border);box-shadow:0 5px 22px #243f6804}.select-list{padding:18px 20px}.search-collapse{border-radius:12px}.search-collapse .select-list ul li{margin-bottom:10px}.fixed-table-container{border:1px solid var(--cloud-border);border-radius:10px;overflow:hidden}.table{font-size:13px}.table>thead>tr>th{background:#f6f8fc;color:#78899f;font-weight:550;font-size:12px;white-space:nowrap;border-bottom:1px solid #e5ecf5;padding:14px 16px}.table>tbody>tr>td{vertical-align:middle;padding:13px 16px;border-top:1px solid #edf1f7;color:#526781}.table-bordered{border-color:#e7edf6}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>td{border-left:0;border-right:0}.table-striped>tbody>tr:nth-of-type(odd){background:#fcfdff}.table-hover>tbody>tr:hover,.table>tbody>tr:hover{background:#f4f8ff}.fixed-table-pagination .pagination>li>a{border-color:#e6ecf5;color:#6480a6}.pagination>.active>a,.pagination>.active>a:hover{background:#3973df;border-color:#3973df;color:#fff}.pagination>li:first-child>a{border-radius:7px 0 0 7px}.pagination>li:last-child>a{border-radius:0 7px 7px 0}
.modal-content{border:1px solid #e6ecf5;border-radius:16px;box-shadow:0 24px 80px #1d35562b;overflow:hidden}.modal-header{padding:22px 26px;background:#fafcff;border-bottom:1px solid #edf1f7}.modal-title,.modal-header h4{font-size:18px;font-weight:600;color:#243c5c}.modal-body{padding:24px 26px;max-height:72vh;overflow:auto}.modal-footer{padding:16px 26px;background:#fafcff;border-top:1px solid #edf1f7}.modal-backdrop.in{opacity:.3}.layui-layer{border-radius:12px!important;overflow:hidden}.layui-layer-title{background:#f7faff!important;border-bottom-color:#e8eef7!important;font-weight:600}.layui-layer-btn .layui-layer-btn0{background:#3973df!important;border-color:#3973df!important}.layui-layer-btn a{border-radius:6px!important}
.alert{border-radius:9px;font-size:12px;line-height:1.8;padding:13px 17px}.alert-info{background:#eef5ff;border-color:#deebff;color:#6987b3}.alert-danger{background:#fff0f2;border-color:#f8dce2;color:#b96072}.alert-warning{background:#fff7e8;border-color:#f3e6cb;color:#a88442}
/* Shell: preserve the original dimensions and collapse behavior. */
.navbar-static-side,.navbar-default.navbar-static-side{background:#18263c!important}.navbar-static-side .logo{background:#18263c!important;color:#fff!important;border-bottom:1px solid #ffffff0b}.logo-lg{font-size:22px!important;font-weight:650;letter-spacing:1px}.navbar-static-side .user-panel{background:transparent!important;padding:22px 14px}.user-panel>.info,.user-panel>.info>a{color:#b6c5da!important}.user-panel .image img{border:2px solid #ffffff21}.navbar-static-side .nav>li>a{color:#a7bad4!important;font-weight:500;padding-top:15px;padding-bottom:15px}.navbar-static-side .nav>li>a:hover,.navbar-static-side .nav>li>a:focus{background:#22344e!important;color:#fff!important}.navbar-static-side .nav>li.active{border-left:0!important;background:#203651!important}.navbar-static-side .nav>li.active>a{background:#274a77!important;color:#fff!important}.navbar-static-side .nav-second-level>li>a{font-size:12px}.navbar-static-side .nav-second-level>li.active>a{color:#8db9ff!important;background:#243e60!important}.navbar-static-side .nav-header{background:#18263c!important}.navbar-static-top,.navbar-static-top.navbar{background:#fff!important;border-bottom:1px solid #e7edf5!important;box-shadow:none!important}.navbar-static-top .nav>li>a{color:#687c98!important;font-weight:400}.navbar-static-top .nav>li>a:hover{background:#f4f7fc!important}.navbar-static-top .navbar-minimalize{background:#edf3fd!important;border-color:#edf3fd!important;color:#4971ad!important;border-radius:8px}.content-tabs{background:#fff;border-bottom:1px solid #e7edf5!important}.page-tabs a{color:#8192a9}.page-tabs a.active{background:#edf3ff!important;color:#3973df!important;border-bottom:2px solid #3973df}.roll-nav{background:#fff;color:#879ab2;border-color:#edf1f7!important}.footer{background:#fff;border-top:1px solid #e7edf5;color:#9aa8bb;font-size:11px}
/* Cloud Node business pages. */
.node-console .node-intro{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:22px}.node-eyebrow{font-size:10px;letter-spacing:3px;color:#8da3c1;margin-bottom:8px}.node-intro h2{font-size:23px;font-weight:650;margin:0 0 9px}.node-intro p{font-size:12px;margin:0;color:#91a0b5}.node-console #modules{background:#f3f6fb;border-radius:10px;padding:5px;gap:4px!important;border:1px solid #e9eef6}.node-console #modules .btn{border:0;background:transparent;color:#8393aa;float:none!important;margin:0;border-radius:7px!important;padding:9px 13px}.node-console #modules .btn-primary{background:#fff;color:#3973df;box-shadow:0 2px 8px #25446f0d}.node-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:6px 0 18px;margin:0!important}.node-toolbar>div{display:flex;gap:8px;flex-wrap:wrap}.node-console #device-user-filter{padding:17px;background:#f7f9fd;border:1px solid #edf1f7;border-radius:9px;line-height:2.8}.node-console #device-user-filter label{margin-right:12px}.node-console #rules p{padding:17px 20px;border:1px solid #e7edf6;border-radius:9px;margin-bottom:10px}.node-status{display:inline-block;border-radius:6px;padding:3px 9px;font-size:11px;font-weight:500;white-space:nowrap;background:#edf3fd;color:#6487bd}.node-status.success{background:#e6f6f0;color:#209b7e}.node-status.warning{background:#fff4de;color:#c29236}.node-status.danger{background:#ffedf0;color:#d16a7d}.node-pagination{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:18px;color:#93a1b6;font-size:12px}.node-console td:last-child .btn{margin:2px}.overview .banner{box-shadow:0 14px 34px #1c478014}.overview .metric{transition:box-shadow .15s}.overview .metric:hover{box-shadow:0 8px 25px #30538b0b}
/* Admin login uses existing validation and captcha handlers. */
body.signin{background:radial-gradient(ellipse at 10% 10%,#244c82 0,transparent 55%),linear-gradient(120deg,#15243b,#203957 65%,#285583)!important;color:#dce7f4}.signinpanel{max-width:1080px;width:85%;margin:10vh auto 0}.signinpanel .signin-info h4{font-size:28px;line-height:1.6}.signinpanel .signin-info ul{line-height:2.6;color:#a3bad6}.signinpanel form{background:#fff;border:1px solid #ffffff88;border-radius:18px;padding:34px;box-shadow:0 24px 70px #07182a3b;color:#324e70}.signinpanel form h4{font-size:24px;font-weight:650}.signinpanel form p{color:#96a6bb;margin-bottom:24px}.signinpanel form .form-control{height:44px;margin-top:18px}.signinpanel form .btn{margin-top:24px;background:#3973df;border-color:#3973df;border-radius:8px;height:44px}.signinpanel .signup-footer{border-color:#ffffff15;color:#8da7c7;font-size:11px}
@media(max-width:768px){.wrapper-content{padding:14px}.ibox-content{padding:16px}.ibox-title{padding:18px}.node-intro{align-items:flex-start!important;flex-direction:column}.node-console #modules{overflow:auto;flex-wrap:nowrap!important}.node-console #modules .btn{white-space:nowrap}.node-toolbar #search{width:100%!important}.node-console #device-user-filter .form-control{width:100%!important;display:block!important;margin-bottom:8px}.node-pagination{justify-content:center}.signinpanel{width:92%;margin:28px auto}.signinpanel form{padding:24px}}
@media(prefers-reduced-motion:reduce){.btn,.overview .metric{transition:none}}
/* Workspace refinement: restrained navy, stronger hierarchy, compact working surfaces. */
:root{--cloud-primary:#2868ce;--cloud-ink:#1d2c43;--cloud-muted:#8190a5;--cloud-bg:#f6f8fb;--cloud-border:#e7ebf2;--cloud-radius:10px}
body{letter-spacing:.1px}.navbar-static-side,.navbar-default.navbar-static-side{background:#172338!important}.navbar-static-side .logo{background:#172338!important;height:64px!important;line-height:64px!important}.logo-lg{font-size:19px!important;letter-spacing:2px}.navbar-static-side .user-panel{padding:22px 16px 26px!important;border-bottom:1px solid #ffffff0a}.navbar-static-side .nav>li>a{margin:4px 10px;padding:13px 15px!important;border-radius:8px;font-size:13px}.navbar-static-side .nav>li.active{background:transparent!important}.navbar-static-side .nav>li.active>a{background:#2a4163!important;color:#f1f6ff!important}.navbar-static-side .nav>li>a:hover{background:#21334e!important}.navbar-static-side .nav-second-level>li>a{margin:2px 10px;padding-left:38px!important;color:#92a7c4!important}.navbar-static-side .nav-second-level>li.active>a{background:#263a57!important;color:#b2d0ff!important}.navbar-static-top .nav>li>a{font-size:12px}.content-tabs{box-shadow:none}.page-tabs a{font-size:12px}.footer{font-size:10px;letter-spacing:.3px}
.wrapper-content{padding:28px}.ibox{border-radius:10px;box-shadow:none}.ibox-title{padding:20px 24px;min-height:58px}.ibox-title h5{font-size:16px}.ibox-content{padding:24px}.select-list,.select-table{border-radius:10px;box-shadow:none}.select-list{margin-bottom:18px}.select-list ul{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.form-control{height:38px;font-size:13px;border-color:#e0e6ef;background:#fff}.form-control:focus{box-shadow:0 0 0 3px #2868ce0b}.form-group{margin-bottom:20px}.form-horizontal .control-label{font-size:12px;padding-top:10px;color:#6e7d94}.btn{border-radius:6px;min-height:34px;line-height:1.5;padding:7px 13px;font-size:12px}.btn-xs{min-height:25px;padding:3px 8px}.btn-link{min-height:26px}.btn-primary{box-shadow:0 2px 4px #2868ce12}.btn:active{transform:translateY(1px)}.btn-default{background:#fff;color:#667991}.btn-info{background:#eef4fe;border-color:#dde8fa;color:#3a6fbd}.btn-info:hover{background:#e1edff;color:#275da9}.btn-success{background:#edf8f4;border-color:#d7eee5;color:#218569}.btn-success:hover{background:#dbf1e8;color:#18765b}.btn-danger{color:#bf6673;background:#fff2f3;border-color:#f4e0e4}.table>thead>tr>th{background:#f7f9fc;color:#8b98ab;padding:14px 16px;font-size:11px;letter-spacing:.4px}.table>tbody>tr>td{color:#52647d;padding:14px 16px;font-variant-numeric:tabular-nums}.table-striped>tbody>tr:nth-of-type(odd){background:#fff}.table-striped>tbody>tr:nth-of-type(even){background:#fcfdff}.table>tbody>tr:hover{background:#f6f9fe}.fixed-table-container{border-radius:8px}.modal-dialog{margin-top:7vh}.modal-content{border-radius:12px}.modal-header{padding:22px 26px;background:#fff}.modal-body{padding:26px}.modal-footer{background:#fafbfd}.modal-header .close{color:#9aa8ba;opacity:.7}.modal-header h4{font-size:18px}.alert{border-radius:7px}.layui-layer-title{font-size:14px!important}.node-console .ibox-title{display:none}.node-console .ibox-content{border-radius:10px;padding:28px}.node-console .node-intro{padding-bottom:24px;margin-bottom:18px;border-bottom:1px solid #edf0f5}.node-intro h2{font-size:25px;letter-spacing:-.7px;font-weight:650}.node-eyebrow{font-size:9px;color:#9aabc1;letter-spacing:2px}.node-intro p{font-size:12px;line-height:1.8;color:#93a0b2}.node-console #modules{border:0;background:#f5f7fa;padding:6px;margin-bottom:24px!important;gap:4px!important}.node-console #modules .btn{font-size:11px;padding:8px 12px;min-height:32px}.node-console #modules .btn-primary{box-shadow:0 1px 5px #1d3b6410;color:#2868ce}.node-toolbar{padding-bottom:20px}.node-toolbar #search{background:#f9fbfd}.node-console #device-user-filter{border:0;background:#f7f9fc;padding:16px 20px}.node-console table{border-radius:8px;overflow:hidden}.node-pagination{padding-top:16px;border-top:1px solid #edf1f6}.node-status{border:1px solid transparent;line-height:1.5;font-size:10px;padding:3px 8px;border-radius:5px}.node-console #rules{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.node-console #rules p{margin:0;padding:20px;background:#fafbfd;border-color:#edf1f6;line-height:1.8}.node-console #rules:empty{display:none}
/* Overview: dense enough to scan, with charts as the main visual content. */
.overview{max-width:1600px;padding:28px 32px}.overview .banner{background:#fff;color:#20334e;border:1px solid #e7ecf3;border-radius:10px;padding:26px 28px;box-shadow:none;margin-bottom:28px}.overview .banner small{font-size:10px;color:#93a3bb;letter-spacing:2px}.overview .banner h2{font-size:26px;font-weight:650;letter-spacing:-.8px;margin:10px 0}.overview .banner p{font-size:12px;color:#8a9bb1}.overview .banner .btn{background:#f3f7fe;border-color:#e4ecfa;color:#4a73ad}.overview .section-title{font-size:14px;margin:26px 0 14px;letter-spacing:.2px;color:#50647e}.overview .section-title small{font-size:11px;color:#9eabbe;margin-left:8px}.overview .stats-grid{gap:16px;margin-bottom:22px}.overview .metric{border-radius:10px;padding:22px 24px;border-color:#e8edf4}.overview .metric .label-text{font-size:12px;color:#8494aa}.overview .metric .value{font-size:29px;letter-spacing:-.8px;line-height:1.2;margin:20px 0 12px;font-weight:650;color:#213953}.overview .metric .note{font-size:10px;color:#a0adbf}.overview .metric i{font-size:19px;background:#f0f5fd;color:#5c82b7;padding:9px;border-radius:9px;margin-top:-4px}.overview .metric:hover{box-shadow:0 5px 18px #213c6407}.overview .chart-grid{gap:18px;margin-top:26px;grid-template-columns:minmax(0,1.8fr) minmax(0,1fr)}.overview .chart-card{border-radius:10px;padding:24px;border-color:#e8edf4}.overview .chart-card h3{font-size:14px;color:#536981;margin-bottom:16px}.overview .chart-card small{font-size:10px;color:#a0adbd}.overview .chart{height:280px}.overview .tasks{gap:16px}.overview .demo-task{border-radius:9px;padding:20px;font-size:12px;color:#61748e;border-color:#e8edf4}.overview .demo-task strong{display:block;font-size:25px;color:#3e6cab;margin-bottom:12px;font-weight:600}.overview #stamp{font-size:10px;color:#a1adbe}.overview .text-muted{font-size:11px}.signinpanel .signin-info{padding-right:35px}.signinpanel .signin-info .logopanel img{max-width:150px}.signinpanel form{border-radius:14px;padding:38px}.signinpanel form h4{letter-spacing:-.6px}.signinpanel form .form-control{font-size:13px;height:46px;border-radius:7px}.signinpanel form .btn{height:44px;border-radius:7px}.signinpanel .signup-footer{padding-top:22px}
@media(hover:hover){.btn:not(.disabled):not([disabled]):hover{transform:translateY(-1px)}.overview .demo-task:hover{box-shadow:0 4px 16px #24406508}}
@media(max-width:1024px){.overview{padding:22px}.overview .metric{padding:20px}.overview .metric .value{font-size:25px}.overview .chart-grid{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}}
@media(max-width:768px){.wrapper-content{padding:12px}.node-console .ibox-content{padding:18px}.node-console .node-intro{padding-bottom:18px}.node-intro h2{font-size:22px}.node-console #rules{grid-template-columns:1fr}.overview{padding:16px}.overview .banner{padding:22px;align-items:flex-start;gap:18px}.overview .banner h2{font-size:22px}.overview .stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.overview .chart-grid{grid-template-columns:1fr}.overview .metric .value{font-size:24px}.overview .metric i{font-size:15px;padding:7px}.overview .metric .label-text{font-size:11px}.overview .chart-card{padding:18px}.modal-dialog{margin:18px 12px}.modal-body{padding:20px}.signinpanel .signin-info{padding-right:0}}
@media(max-width:420px){.overview .banner{flex-direction:column}.overview .metric{padding:18px 14px}.overview .metric .value{font-size:22px;letter-spacing:-.6px}.overview .stats-grid{gap:10px}.node-toolbar>div{width:100%}.node-toolbar>div .btn{flex:1}.overview .chart{height:240px}}
@media(prefers-reduced-motion:reduce){.btn:hover,.btn:active{transform:none!important}}
