|
|
|
@@ -0,0 +1,230 @@
|
|
|
|
|
/* Bootstrap presentation layer. Keep player geometry and account preferences intact. */
|
|
|
|
|
:root {
|
|
|
|
|
--ui-bg: #f3f6fa;
|
|
|
|
|
--ui-surface: #fff;
|
|
|
|
|
--ui-line: #e3e9ef;
|
|
|
|
|
--ui-muted: #5e6f7e;
|
|
|
|
|
--ui-sidebar: #172e35;
|
|
|
|
|
--ui-accent: #217964;
|
|
|
|
|
--ink: #253b46;
|
|
|
|
|
--muted: #5e6f7e;
|
|
|
|
|
--paper: var(--ui-surface);
|
|
|
|
|
--line: var(--ui-line);
|
|
|
|
|
--green: var(--ui-accent);
|
|
|
|
|
--bs-primary: #217964;
|
|
|
|
|
--bs-primary-rgb: 33, 121, 100;
|
|
|
|
|
--bs-body-color: var(--ink);
|
|
|
|
|
--bs-body-bg: var(--ui-bg);
|
|
|
|
|
--bs-border-color: var(--ui-line);
|
|
|
|
|
--ui-shadow: 0 3px 16px #223d5010;
|
|
|
|
|
--ui-soft: #f5f8fa;
|
|
|
|
|
}
|
|
|
|
|
html[data-theme="paper"] { --ui-bg: #f5f6f4; --ui-soft: #f5f7f3; }
|
|
|
|
|
html[data-theme="clean"] { --ui-bg: #f1f5f9; --ui-soft: #f4f7fb; }
|
|
|
|
|
html[data-theme="ink"] {
|
|
|
|
|
--ui-bg: #111e26; --ui-surface: #1a2b35; --ui-line: #30444e;
|
|
|
|
|
--ui-soft: #21353f; --ink: #e0ecef; --ui-muted: #a8bdc5;
|
|
|
|
|
--muted: #a8bdc5; --ui-shadow: 0 3px 16px #0002;
|
|
|
|
|
--paper: #1a2b35; --line: #30444e;
|
|
|
|
|
}
|
|
|
|
|
html, body { min-width: 0; }
|
|
|
|
|
body { -webkit-font-smoothing: antialiased; }
|
|
|
|
|
#app > main { max-width: 2000px; padding: 30px 38px 24px !important; }
|
|
|
|
|
main > header { margin-bottom: 26px !important; padding-bottom: 24px !important; }
|
|
|
|
|
#page-title { font-size: clamp(24px, 2.3vw, 32px) !important; letter-spacing: -.7px !important; }
|
|
|
|
|
html[data-font="serif"] #page-title { font-weight: 600 !important; }
|
|
|
|
|
#brand-motto { color: var(--ui-accent) !important; letter-spacing: 2.4px; }
|
|
|
|
|
#page-note { font-size: 13px !important; }
|
|
|
|
|
.header-status { gap: 9px; }
|
|
|
|
|
#clock { font-variant-numeric: tabular-nums; font-size: 11px; }
|
|
|
|
|
#service-status { padding: 6px 10px; border-radius: 20px !important; }
|
|
|
|
|
.sidebar { background: linear-gradient(165deg, #1d3940, #152b32 70%) !important; }
|
|
|
|
|
.brand { padding-bottom: 26px !important; }
|
|
|
|
|
.brand-icon { width: 46px !important; height: 46px !important; box-shadow: 0 3px 12px #071d2860; }
|
|
|
|
|
.sidebar nav button { border-radius: 10px !important; min-height: 46px; transition: background .15s, color .15s; }
|
|
|
|
|
.sidebar nav button.active { background: #e1f2eb !important; color: #155b48 !important; box-shadow: 0 2px 7px #0002 !important; }
|
|
|
|
|
.sidebar nav button.active .app-icon { opacity: 1; }
|
|
|
|
|
.sidebar #current-user { padding: 14px 9px 2px; }
|
|
|
|
|
.section-head { align-items: center; margin-bottom: 18px; }
|
|
|
|
|
.section-head h2 { font-size: 21px !important; }
|
|
|
|
|
.count-pill { background: #e7f0ec; color: #286752; border: 0; border-radius: 7px; padding: 3px 9px; font-size: 12px; }
|
|
|
|
|
.btn { border-radius: 9px !important; min-height: 38px; padding: 8px 14px; transition: background .15s, border-color .15s, box-shadow .15s; }
|
|
|
|
|
.btn-primary { --bs-btn-bg: var(--ui-accent); --bs-btn-border-color: var(--ui-accent); box-shadow: 0 3px 8px #21796416; }
|
|
|
|
|
.btn-primary:hover { box-shadow: 0 4px 12px #21796428; }
|
|
|
|
|
.btn-outline-secondary { --bs-btn-color: var(--ink); --bs-btn-border-color: var(--ui-line); background: var(--ui-surface); }
|
|
|
|
|
.btn-link { color: var(--ui-accent); }
|
|
|
|
|
html:is([data-theme="clean"],[data-theme="ink"]) :is(main,dialog) .btn-primary:not(.steward-tile):not(.device-title):not(.platform-place-node) { background: var(--ui-accent) !important; color: #fff !important; border-color: var(--ui-accent) !important; }
|
|
|
|
|
html:is([data-theme="clean"],[data-theme="ink"]) :is(main,dialog) .btn-outline-secondary { background: var(--ui-surface) !important; color: var(--ink) !important; }
|
|
|
|
|
html:is([data-theme="clean"],[data-theme="ink"]) :is(main,dialog) .btn-outline-secondary:is(.active,[aria-pressed="true"]) { background: var(--ui-soft) !important; border-color: #629987 !important; }
|
|
|
|
|
html:is([data-theme="clean"],[data-theme="ink"]) .btn-link { background: transparent !important; color: var(--ink) !important; }
|
|
|
|
|
html[data-theme="ink"] #brand-motto { color: #a7d7c4 !important; }
|
|
|
|
|
.btn:focus-visible, button:focus-visible, a:focus-visible { outline: 3px solid #529cce; outline-offset: 3px; }
|
|
|
|
|
.form-control, .form-select { border-radius: 9px !important; border-color: var(--ui-line) !important; min-height: 40px; background-color: var(--ui-surface); color: var(--ink); }
|
|
|
|
|
.form-control:focus, .form-select:focus { border-color: #51a18b !important; box-shadow: 0 0 0 3px #21856819 !important; }
|
|
|
|
|
.card, .panel { border: 1px solid var(--ui-line) !important; border-radius: 14px !important; background: var(--ui-surface); box-shadow: var(--ui-shadow) !important; }
|
|
|
|
|
.card { overflow: hidden; }
|
|
|
|
|
.card-body { padding: 24px; }
|
|
|
|
|
dialog { border-radius: 16px !important; box-shadow: 0 24px 100px #10293040 !important; }
|
|
|
|
|
dialog::backdrop { background: #132a3670; backdrop-filter: blur(4px); }
|
|
|
|
|
dialog h2 { font-size: 22px !important; }
|
|
|
|
|
.household-context, .device-context { border: 1px solid var(--ui-line) !important; background: var(--ui-surface) !important; border-radius: 12px; box-shadow: var(--ui-shadow); }
|
|
|
|
|
.home-insights { display: grid; grid-template-columns: 1.4fr .7fr 1fr; gap: 18px; margin: 22px 0 26px; }
|
|
|
|
|
.home-insights > article { border-radius: 15px; padding: 24px; min-width: 0; }
|
|
|
|
|
.insight-welcome { position: relative; overflow: hidden; color: #fff; background: linear-gradient(115deg,#20534d,#297562); box-shadow: 0 6px 22px #21594c1c; }
|
|
|
|
|
.insight-welcome::after { content: ''; position: absolute; right: -28px; bottom: -64px; width: 200px; height: 200px; border: 32px solid #fff07; border-radius: 50%; pointer-events: none; }
|
|
|
|
|
.insight-kicker { color: #cae4d9; font-size: 10px; letter-spacing: 2px; }
|
|
|
|
|
.insight-welcome h2 { color: #fff !important; font-size: 23px !important; margin: 14px 0 8px !important; }
|
|
|
|
|
.insight-welcome p { color: #d0e7df; font-size: 12px; margin-bottom: 22px; }
|
|
|
|
|
.insight-scope { display: flex; gap: 7px; align-items: center; color: #d7ebe4; font-size: 10px; }
|
|
|
|
|
.insight-scope .app-icon { width: 15px; height: 15px; flex-basis: 15px; }
|
|
|
|
|
.insight-number, .insight-distribution { background: var(--ui-surface); border: 1px solid var(--ui-line); box-shadow: var(--ui-shadow); }
|
|
|
|
|
.insight-number { position: relative; display: flex; flex-direction: column; justify-content: center; }
|
|
|
|
|
.insight-icon { position: absolute; right: 20px; top: 22px; width: 36px; height: 36px; display: grid; place-items: center; background: #e8f1fb; color: #527ec0; border-radius: 11px; }
|
|
|
|
|
.insight-label { color: var(--ui-muted); font-size: 12px; padding-right: 35px; }
|
|
|
|
|
.insight-number > strong { font-size: 40px; line-height: 1.3; font-weight: 650; margin: 10px 0; color: var(--ink); font-variant-numeric: tabular-nums; }
|
|
|
|
|
.insight-number strong small { font-size: 12px; font-weight: 400; margin-left: 10px; color: var(--ui-muted); }
|
|
|
|
|
.insight-foot { color: var(--ui-muted); font-size: 11px; }
|
|
|
|
|
.insight-distribution { display: flex; align-items: center; justify-content: center; gap: 20px; }
|
|
|
|
|
.insight-donut { width: 126px; flex: 0 0 126px; position: relative; }
|
|
|
|
|
.insight-donut svg { width: 100%; display: block; }
|
|
|
|
|
.donut-track { stroke: var(--ui-line); }
|
|
|
|
|
.insight-donut > div { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; pointer-events: none; }
|
|
|
|
|
.insight-donut strong { font-size: 28px; line-height: 1.3; }
|
|
|
|
|
.insight-donut small { font-size: 10px; color: var(--ui-muted); }
|
|
|
|
|
.insight-legend { flex: 1; min-width: 60px; max-width: 145px; }
|
|
|
|
|
.insight-legend h3 { font-size: 12px !important; margin-bottom: 13px; white-space: nowrap; }
|
|
|
|
|
.insight-legend > span { display: flex; align-items: center; gap: 7px; font-size: 11px; margin-top: 7px; color: var(--ui-muted); }
|
|
|
|
|
.insight-legend i { width: 7px; height: 7px; border-radius: 2px; flex-shrink: 0; }
|
|
|
|
|
.insight-legend b { margin-left: auto; color: var(--ink); }
|
|
|
|
|
.home-toolbar { padding: 13px 16px; border: 1px solid var(--ui-line); border-radius: 12px; background: var(--ui-surface); gap: 14px; }
|
|
|
|
|
.home-layout-toggle { display: none; }
|
|
|
|
|
#home-layout-status { margin: 10px 3px 18px; font-size: 11px; }
|
|
|
|
|
.home-card-grid { gap: 24px; }
|
|
|
|
|
.home-card { transition: box-shadow .18s, border-color .18s; }
|
|
|
|
|
.home-card:hover { box-shadow: 0 8px 26px #223d5019 !important; border-color: #b4cac0 !important; }
|
|
|
|
|
.home-cover { height: 220px; background: linear-gradient(120deg,#35595b,#193a40); }
|
|
|
|
|
.home-cover .cover-shade { background: linear-gradient(180deg,#142b3830 0%,#10282b05 30%,#0a232bcc 100%); }
|
|
|
|
|
.home-cover-content { padding: 22px 25px; }
|
|
|
|
|
.home-cover-content h3 { font-size: 24px !important; font-weight: 600 !important; letter-spacing: .5px !important; }
|
|
|
|
|
.home-cover-content .badge { border: 1px solid #ffffff38; background: #f6fffaed !important; color: #27594a !important; border-radius: 6px !important; font-size: 11px; }
|
|
|
|
|
.home-location { font-size: 11px; color: #ebf3f0; }
|
|
|
|
|
.cover-edit { background: #142a3560 !important; border: 1px solid #ffffff80 !important; color: #fff !important; backdrop-filter: blur(4px); }
|
|
|
|
|
.home-summary { color: var(--ui-muted); font-size: 12px; }
|
|
|
|
|
.home-numbers { background: var(--ui-soft); border: 0; border-radius: 10px; padding: 14px 0; margin: 16px 0 20px; }
|
|
|
|
|
.home-numbers span { border-right: 1px solid var(--ui-line); color: var(--ui-muted); font-size: 11px; }
|
|
|
|
|
.home-numbers span:last-child { border: 0; }
|
|
|
|
|
.home-numbers b { font-size: 24px; color: var(--ink); }
|
|
|
|
|
.home-card-actions { border-top: 1px solid var(--ui-line); padding-top: 18px; margin-top: 18px; }
|
|
|
|
|
.compact-details dt { color: var(--ui-muted); }
|
|
|
|
|
.compact-details dd { color: var(--ink); }
|
|
|
|
|
.home-pagination { margin-top: 24px; font-size: 11px; }
|
|
|
|
|
.metrics { gap: 16px; }
|
|
|
|
|
.metrics > div { border: 1px solid var(--ui-line); border-radius: 12px; background: var(--ui-surface); box-shadow: var(--ui-shadow); border-top: 3px solid #438979; }
|
|
|
|
|
.metrics > div:nth-child(2) { border-top-color: #658cd1; }
|
|
|
|
|
.metrics > div:nth-child(3) { border-top-color: #b69c70; }
|
|
|
|
|
.metrics > div:nth-child(4) { border-top-color: #8391b5; }
|
|
|
|
|
.metrics strong { font-variant-numeric: tabular-nums; color: var(--ink); }
|
|
|
|
|
.device-card-heading .device-symbol { background: #e9f3ef; color: #287e65; border-radius: 12px; width: 44px; height: 44px; }
|
|
|
|
|
.device-card .card-footer { border-top: 1px solid var(--ui-line); background: var(--ui-soft); padding: 14px 22px; }
|
|
|
|
|
.device-card-grid { gap: 20px; }
|
|
|
|
|
.device-view-controls { padding: 20px 24px; }
|
|
|
|
|
.device-search-row { border-bottom: 1px solid var(--ui-line); padding-bottom: 18px; margin-bottom: 15px; }
|
|
|
|
|
.group-title { margin: 24px 0 14px; }
|
|
|
|
|
.device-location { color: var(--ui-muted); }
|
|
|
|
|
.network-map { padding: 24px; }
|
|
|
|
|
.network-platform { background: var(--ui-soft); border: 1px solid var(--ui-line); border-radius: 12px; padding: 20px; }
|
|
|
|
|
.network-platform > .app-icon { width: 30px; height: 30px; flex-basis: 30px; color: var(--ui-accent); }
|
|
|
|
|
.network-diagram { margin: 20px 0 28px; border: 1px solid var(--ui-line); border-radius: 12px; overflow: hidden; }
|
|
|
|
|
.diagram-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 14px 18px; background: var(--ui-surface); }
|
|
|
|
|
.diagram-toolbar > div { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
|
|
|
|
|
.diagram-toolbar strong { font-size: 13px; }
|
|
|
|
|
.diagram-dot { width: 7px; height: 7px; border-radius: 50%; background: #4d8dbe; }
|
|
|
|
|
.diagram-toolbar label { display: flex; align-items: center; gap: 8px; font-size: 11px; margin: 0; }
|
|
|
|
|
.diagram-toolbar select { width: 86px; }
|
|
|
|
|
.diagram-scroll { max-height: 480px; overflow: auto; background-color: var(--ui-soft); background-image: radial-gradient(var(--ui-line) 1px, transparent 1px); background-size: 18px 18px; border-block: 1px solid var(--ui-line); }
|
|
|
|
|
.network-svg { display: block; }
|
|
|
|
|
.network-edge { stroke: #82a79c; stroke-width: 2; }
|
|
|
|
|
.diagram-node { cursor: pointer; outline: none; }
|
|
|
|
|
.diagram-node-bg { fill: var(--ui-surface); stroke: var(--ui-line); stroke-width: 1.5; }
|
|
|
|
|
.diagram-node:hover .diagram-node-bg, .diagram-node:focus .diagram-node-bg { stroke: #328d78; stroke-width: 2.5; }
|
|
|
|
|
.diagram-node-type { fill: var(--ui-muted); font-size: 10px; }
|
|
|
|
|
.diagram-node-title { fill: var(--ink); font-size: 14px; font-weight: 600; }
|
|
|
|
|
.diagram-node-ip { fill: var(--ui-muted); font-size: 11px; font-family: ui-monospace, Consolas, monospace; }
|
|
|
|
|
.diagram-note { margin: 0; padding: 11px 18px; font-size: 11px; color: var(--ui-muted); }
|
|
|
|
|
.network-details-heading { margin: 20px 0 14px; }
|
|
|
|
|
.platform-place-node { position: relative; text-align: left; padding: 24px; }
|
|
|
|
|
.platform-place-node::before { content: ''; position: absolute; inset: 0 auto 0 0; width: 4px; background: #438979; }
|
|
|
|
|
.platform-place-node:hover { border-color: #8db4a7 !important; background: var(--ui-soft); }
|
|
|
|
|
.network-open { color: var(--ui-accent); font-weight: 600; }
|
|
|
|
|
.scope-intro { border-bottom: 1px solid var(--ui-line); padding-bottom: 20px; }
|
|
|
|
|
.steward-tile { border-radius: 14px !important; border: 1px solid var(--ui-line) !important; border-top: 3px solid #438979 !important; box-shadow: var(--ui-shadow) !important; padding: 28px !important; background: var(--ui-surface) !important; }
|
|
|
|
|
.steward-tile:nth-child(2n) { border-top-color: #6c8fbc !important; }
|
|
|
|
|
.steward-tile:nth-child(3n) { border-top-color: #b29a72 !important; }
|
|
|
|
|
.steward-tile strong { font-size: 19px !important; }
|
|
|
|
|
.steward-tile:hover { border-color: #9dbab0 !important; box-shadow: 0 8px 22px #223d5016 !important; }
|
|
|
|
|
.journal-card { border-radius: 14px; box-shadow: var(--ui-shadow); }
|
|
|
|
|
main > footer { color: var(--ui-muted); font-size: 10px; }
|
|
|
|
|
html[data-density="compact"] .home-insights > article { padding: 18px; }
|
|
|
|
|
html[data-density="compact"] .home-cover { height: 165px; }
|
|
|
|
|
html[data-density="compact"] .card-body { padding: 18px; }
|
|
|
|
|
@media (min-width: 1100px) { html[data-layout="top"] #app > main { padding-top: 28px !important; } }
|
|
|
|
|
@media (max-width: 1250px) {
|
|
|
|
|
.home-insights { grid-template-columns: 1.2fr .75fr 1fr; gap: 12px; }
|
|
|
|
|
.home-insights > article { padding: 19px; }
|
|
|
|
|
.insight-distribution { gap: 10px; }
|
|
|
|
|
.insight-donut { width: 102px; flex-basis: 102px; }
|
|
|
|
|
.insight-welcome h2 { font-size: 20px !important; }
|
|
|
|
|
}
|
|
|
|
|
@media (max-width: 1000px) and (min-width: 761px) {
|
|
|
|
|
#app > main { padding: 26px 24px !important; }
|
|
|
|
|
.home-insights { grid-template-columns: 1fr 1fr; }
|
|
|
|
|
.insight-welcome { grid-column: 1/-1; }
|
|
|
|
|
.insight-welcome p { margin-bottom: 12px; }
|
|
|
|
|
}
|
|
|
|
|
@media (max-width: 760px) {
|
|
|
|
|
#app > main { padding: 20px 16px 20px !important; }
|
|
|
|
|
.sidebar { background: #17353b !important; }
|
|
|
|
|
main > header { margin-bottom: 20px !important; padding-bottom: 18px !important; }
|
|
|
|
|
#page-title { font-size: 25px !important; }
|
|
|
|
|
#page-note { font-size: 12px !important; }
|
|
|
|
|
.home-insights { grid-template-columns: 1fr 1fr; gap: 12px; margin: 16px 0 20px; }
|
|
|
|
|
.home-insights > article { padding: 18px; }
|
|
|
|
|
.insight-welcome { grid-column: 1/-1; }
|
|
|
|
|
.insight-welcome h2 { margin: 7px 0 0 !important; font-size: 20px !important; }
|
|
|
|
|
.insight-welcome p, .insight-scope { display: none; }
|
|
|
|
|
.insight-number > strong { font-size: 34px; }
|
|
|
|
|
.insight-icon { width: 29px; height: 29px; top: 14px; right: 13px; }
|
|
|
|
|
.insight-distribution { flex-direction: column; gap: 5px; }
|
|
|
|
|
.insight-donut { width: 94px; flex-basis: auto; }
|
|
|
|
|
.insight-legend { width: 100%; display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
|
|
|
|
|
.insight-legend h3 { display: none; }
|
|
|
|
|
.insight-legend > span { margin: 0; font-size: 10px; gap: 4px; }
|
|
|
|
|
.insight-number .insight-label { padding-right: 24px; font-size: 11px; }
|
|
|
|
|
.insight-donut strong { font-size: 25px; }
|
|
|
|
|
.insight-donut small { font-size: 9px; }
|
|
|
|
|
.home-toolbar { padding: 12px; }
|
|
|
|
|
.home-layout-toggle { display: inline-flex; margin-left: auto; }
|
|
|
|
|
.home-toolbar .home-layout-controls { display: none; }
|
|
|
|
|
.home-toolbar.home-options-open .home-layout-controls { display: flex; flex-basis: 100%; border-top: 1px solid var(--ui-line); padding-top: 12px; }
|
|
|
|
|
.home-cover { height: 200px; }
|
|
|
|
|
.home-cover-content { padding: 20px; }
|
|
|
|
|
.home-cover-content h3 { font-size: 23px !important; }
|
|
|
|
|
.card-body { padding: 20px; }
|
|
|
|
|
.home-numbers { padding: 12px 0; }
|
|
|
|
|
.home-card-grid { gap: 18px; }
|
|
|
|
|
.home-card-actions { gap: 8px; flex-wrap: wrap; }
|
|
|
|
|
.btn { min-height: 44px; }
|
|
|
|
|
.form-control, .form-select { min-height: 44px; font-size: 16px; }
|
|
|
|
|
.device-view-controls { padding: 16px; }
|
|
|
|
|
.network-map { padding: 14px; }
|
|
|
|
|
.network-platform { padding: 16px; }
|
|
|
|
|
.diagram-toolbar { padding: 12px; align-items: flex-start; }
|
|
|
|
|
.diagram-toolbar > div { gap: 6px; }
|
|
|
|
|
.diagram-toolbar > div .small { flex-basis: 100%; font-size: 10px; }
|
|
|
|
|
.diagram-toolbar label { flex-direction: column; align-items: flex-start; }
|
|
|
|
|
.diagram-toolbar select { width: 82px; }
|
|
|
|
|
.diagram-scroll { max-height: 360px; }
|
|
|
|
|
.steward-tile { padding: 22px !important; }
|
|
|
|
|
main[data-page="live"] > header { margin-bottom: 10px !important; padding-bottom: 12px !important; }
|
|
|
|
|
}
|
|
|
|
|
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; scroll-behavior: auto !important; } }
|