/* Vue + Bootstrap visual system. Domain-specific video and genealogy geometry stays intact. */ :root { --bs-primary: #28624f; --bs-primary-rgb: 40, 98, 79; --bs-body-color: #263f36; --bs-body-bg: #f4f6f4; --bs-border-color: #dde4df; --bs-border-radius: 0.65rem; --ui-surface: #fff; --ui-muted: #67776d; --ui-line: #dfe6e1; --ui-sidebar: #193c32; --ui-accent: #28624f; --ui-bg: #f4f6f4; --ink: #263f36; --muted: #67776d; --paper: #fff; --line: #dfe6e1; --green: #28624f; --green-dark: #193c32; --cream: #f4f6f4; } html, body { min-width: 320px; margin: 0; background: var(--ui-bg) !important; color: var(--ink); font-family: Inter, "Segoe UI", "Microsoft YaHei", system-ui, sans-serif; font-size: 14px; line-height: 1.65; } body { display: block !important; background-image: none !important; } body::before, body::after { display: none !important; } #app { min-height: 100vh; display: grid; grid-template-columns: 232px minmax(0, 1fr); } *, *::before, *::after { box-sizing: border-box; } [hidden] { display: none !important; } button, input, select, textarea { font: inherit; } button, a, input, select, textarea { touch-action: manipulation; } button { letter-spacing: 0 !important; } .app-icon { width: 20px; height: 20px; flex: 0 0 20px; vertical-align: middle; } .btn .app-icon { width: 17px; height: 17px; } .sidebar { width: 232px !important; position: fixed !important; inset: 0 auto 0 0; z-index: 20; background: var(--ui-sidebar) !important; color: #e6f0eb; padding: 28px 18px 20px !important; display: flex; flex-direction: column; height: 100dvh; overflow: auto; border: 0 !important; box-shadow: none !important; } .brand { padding: 0 6px 24px !important; gap: 12px; text-decoration: none; color: #fff !important; border-bottom: 1px solid #ffffff14 !important; margin: 0 0 24px !important; display: flex; align-items: center; } .brand-icon { width: 42px !important; height: 42px !important; object-fit: contain; border-radius: 10px; } .brand > span > span { font-size: 22px !important; line-height: 1.2; letter-spacing: 2px; } .brand small { font-size: 11px !important; letter-spacing: 1px; color: #acc4b8 !important; margin-top: 6px; display: block; } .nav-label { font-size: 10px !important; letter-spacing: 2px; padding: 0 12px; margin-bottom: 12px; color: #95b5a6 !important; } .sidebar nav { display: flex !important; flex-direction: column !important; gap: 5px; } .sidebar nav button { display: flex; gap: 12px; align-items: center; text-align: left; width: 100%; color: #c0d6c9 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; border-radius: 8px !important; min-height: 44px; padding: 10px 13px !important; font-size: 13px !important; white-space: normal; } .sidebar nav button:hover { background: #ffffff0d !important; color: #fff !important; } .sidebar nav button.active { background: #ffffffed !important; color: #234c3d !important; font-weight: 600; } .sidebar nav .app-icon { opacity: 0.85; } #scope-navigation { border: 0 !important; padding: 18px 0 10px !important; margin: 7px 0 !important; box-shadow: 0 -1px #ffffff14, 0 1px #ffffff14; } #scope-nav-name { max-width: 185px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin: 0 0 12px; } .side-note { margin-top: auto; padding: 36px 12px 16px; font-size: 10px; color: #9abbab; } .side-note p { display: none; } .sidebar #current-user { color: #c1d3c8 !important; border-top: 1px solid #ffffff18; padding-top: 14px; font-size: 11px; margin: 0 0 8px; } .sidebar > #account-password, .sidebar > #logout { border-color: #ffffff20 !important; color: #c1d3c8 !important; background: transparent !important; font-size: 11px; min-height: 32px; padding: 5px; margin: 4px 0; } .mobile-nav-toggle { display: none; } #app > main { grid-column: 2; margin: 0 !important; padding: 28px 34px 20px !important; width: 100%; min-width: 0; max-width: 1800px; min-height: 100vh; background: none !important; } main > header { padding: 0 0 24px !important; margin: 0 0 24px !important; border-bottom: 1px solid var(--ui-line) !important; display: flex; align-items: center; justify-content: space-between; gap: 20px; min-height: 0 !important; background: none !important; position: relative; } main > header::after, main > header::before { display: none !important; } .eyebrow { font-size: 10px; letter-spacing: 2px; color: var(--ui-muted) !important; margin-bottom: 7px; } h1, #page-title { font-family: inherit !important; font-size: 26px !important; font-weight: 650 !important; line-height: 1.35; letter-spacing: -0.5px !important; margin: 0 0 7px !important; } h2 { font-size: 19px !important; font-weight: 600 !important; line-height: 1.45; letter-spacing: 0 !important; margin: 0 0 5px !important; } h3 { font-size: 16px !important; line-height: 1.5; font-weight: 600 !important; letter-spacing: 0 !important; } h2, h3, h4 { font-family: inherit !important; } #page-note { font-size: 12px !important; color: var(--ui-muted); margin: 0 !important; } .header-status { align-items: flex-end; gap: 8px; font-size: 10px !important; white-space: nowrap; } #service-status { font-size: 10px; } #clock { color: var(--ui-muted); background: none !important; padding: 0 !important; } #clock::before { display: none !important; } .btn { border-radius: 7px !important; min-height: 36px; padding: 7px 13px; font-size: 12px; font-weight: 500; box-shadow: none; line-height: 1.65; display: inline-flex; align-items: center; justify-content: center; gap: 5px; white-space: normal; } .btn-primary { --bs-btn-bg: var(--ui-accent); --bs-btn-border-color: var(--ui-accent); --bs-btn-hover-bg: #1d4d3c; --bs-btn-hover-border-color: #1d4d3c; --bs-btn-disabled-bg: #80988d; --bs-btn-disabled-border-color: #80988d; --bs-btn-active-bg: #1d4d3c; --bs-btn-active-border-color: #1d4d3c; color: #fff !important; } .btn-outline-secondary { --bs-btn-color: #54685d; --bs-btn-border-color: #d8e1da; --bs-btn-hover-bg: #edf3ee; --bs-btn-hover-border-color: #bacdc0; --bs-btn-hover-color: #264d3b; --bs-btn-active-bg: #e0ece4; --bs-btn-active-border-color: #a7c0ae; --bs-btn-active-color: #254e3b; --bs-btn-disabled-color: #9faea4; --bs-btn-disabled-border-color: #e0e5e2; background: transparent; } .btn-sm { min-height: 30px; padding: 4px 9px; font-size: 11px; } .btn-link { color: var(--ui-accent); text-decoration: none; background: transparent; border: 0; } .btn-link:hover { text-decoration: underline; } .btn:focus-visible, .form-control:focus, .form-select:focus { box-shadow: 0 0 0 3px #28744c1c !important; outline: 0 !important; border-color: #679b79; } .btn-group > .btn { border-radius: 0 !important; } .btn-group > .btn:first-child { border-radius: 7px 0 0 7px !important; } .btn-group > .btn:last-child { border-radius: 0 7px 7px 0 !important; } .form-control, .form-select { color: var(--ink); background-color: var(--ui-surface); border: 1px solid var(--ui-line); border-radius: 7px !important; font-size: 13px; padding: 9px 12px; min-height: 40px; max-width: 100%; box-shadow: none; } .form-select { padding-right: 32px; } .form-check-input { width: 16px; height: 16px; min-height: 0; margin: 0 6px 0 0; vertical-align: middle; flex: 0 0 16px; } .form-check-input:checked { background-color: var(--ui-accent); border-color: var(--ui-accent); } label { font-size: 12px; color: #617367; gap: 7px; } .form-grid { gap: 16px 20px !important; } .form-grid label { min-width: 0; } .form-grid .full { grid-column: 1/-1; } textarea.form-control { min-height: 100px; } input[type="file"] { font-size: 12px; padding: 8px; overflow: hidden; } input[type="range"] { max-width: 100%; } fieldset { border: 1px solid var(--ui-line) !important; border-radius: 9px; padding: 14px !important; } legend { float: none; width: auto; padding: 0 6px; font-size: 12px; } .description, .hint { font-size: 12px !important; line-height: 1.8 !important; color: var(--ui-muted) !important; } p { overflow-wrap: anywhere; } code { color: #3b6755; font-size: 12px; } .table { font-size: 12px; --bs-table-bg: transparent; } .table td, .table th { padding: 12px !important; border-color: var(--ui-line); } .table-wrap { overflow: auto; border-radius: 8px; border: 1px solid var(--ui-line); } .panel, .site-card, .card, .camera-card, .person-card { background: var(--ui-surface) !important; border: 1px solid var(--ui-line) !important; border-radius: 11px !important; box-shadow: 0 3px 12px #193c3204 !important; overflow: hidden; } .panel { padding: 22px !important; margin-bottom: 18px; } .site-card { padding: 22px !important; } .card-body { padding: 20px; } .card-footer { background: transparent; border-top: 1px solid var(--ui-line); padding: 12px 18px; } .section-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 18px !important; } .section-head h2 small, .section-head h3 small { display: none; } .badge { font-size: 10px; line-height: 1.4; font-weight: 500 !important; letter-spacing: 0 !important; background: #edf4ee !important; color: #3c7056 !important; border: 1px solid #d6e6d9 !important; border-radius: 5px !important; padding: 5px 8px !important; } .badge.off { background: #f7eeea !important; border-color: #ecd9d0 !important; color: #a66044 !important; } .count-pill { display: inline-block; padding: 2px 7px; background: #e6ede8; color: #4b705b; border-radius: 5px; font-size: 11px; vertical-align: middle; margin-left: 7px; } .group-title { font-size: 13px !important; color: #6a7c70; margin: 24px 0 12px !important; display: flex; gap: 5px; align-items: center; } .site-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .household-context { padding: 12px 16px !important; border-radius: 9px !important; background: #eaf0eb !important; border: 1px solid var(--ui-line); gap: 12px; display: flex; align-items: center; flex-wrap: wrap; margin-bottom: 18px !important; } .household-context label { display: flex; align-items: center; gap: 10px; margin: 0; } .household-context select { width: auto; max-width: 260px; min-height: 34px; padding-top: 6px; padding-bottom: 6px; } .household-context span { font-size: 11px; color: var(--ui-muted); } #scope-back { margin-left: auto; } .device-context { border-radius: 9px; background: #eaf0eb !important; padding: 16px !important; margin-bottom: 18px; } .device-context p { font-size: 12px; margin: 0 0 10px; } .device-context .btn.active { background: var(--ui-accent) !important; color: white !important; } .filter-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0 0 18px; padding: 0 !important; font-size: 12px; } .filter-row label { display: flex; align-items: center; gap: 8px; margin: 0; } .filter-row select { width: 180px; } .filter-row > button { margin-left: auto; } .metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin: 0 0 22px !important; padding: 0 !important; background: none !important; border: 0 !important; } .metrics > div { background: var(--ui-surface); border: 1px solid var(--ui-line); border-radius: 9px; padding: 14px 18px !important; display: flex; justify-content: space-between; align-items: center; border-right: 1px solid var(--ui-line) !important; } .metrics span { font-size: 11px; color: var(--ui-muted); } .metrics strong { font-family: inherit; font-size: 23px !important; font-weight: 600; color: var(--ui-accent); } .home-toolbar { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; padding: 13px 0; margin: 0 0 7px; border-top: 1px solid var(--ui-line); border-bottom: 1px solid var(--ui-line); } .home-layout-controls { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-left: auto; } .home-layout-controls label { display: flex; align-items: center; gap: 7px; margin: 0; } .home-layout-controls select { width: 80px !important; min-height: 34px; padding-top: 5px; padding-bottom: 5px; } .home-layout-controls > .form-select { width: 80px !important; } .inline-check { white-space: nowrap; font-size: 11px; } #home-layout-status { margin-bottom: 18px; font-size: 11px !important; } .home-card-grid { display: grid !important; grid-template-columns: repeat(var(--home-columns, 2), minmax(0, 1fr)); gap: 20px !important; } .home-city-group { display: block; } .home-card { padding: 0 !important; margin: 0 !important; min-width: 0; align-self: start; } .home-cover { position: relative; height: 178px !important; min-height: 178px !important; background: linear-gradient(135deg, #567d65, #203e36) !important; overflow: hidden; } .home-cover img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } .cover-shade { position: absolute; inset: 0; background: linear-gradient(180deg, #132e2430 10%, #0e261ccc 100%); } .home-cover-content { position: relative; z-index: 1; height: 100%; padding: 17px 20px !important; display: flex; flex-direction: column; justify-content: space-between; background: none !important; } .home-cover-content h3 { font-family: inherit !important; font-size: 21px !important; color: #fff !important; margin: 0 0 6px !important; letter-spacing: 0; } .home-cover-content .badge { background: #ffffffd9 !important; color: #244d3a !important; border-color: transparent !important; font-size: 10px; } .home-location { font-size: 11px !important; color: #e8f0eb !important; line-height: 1.6; margin: 0 !important; } .cover-edit { color: #fff !important; background: #213e3670 !important; border: 1px solid #ffffff60 !important; backdrop-filter: blur(8px); } .home-summary { font-size: 12px; color: var(--ui-muted); margin-bottom: 15px; min-height: 20px; } .home-numbers { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; padding: 0 0 17px; border-bottom: 1px solid var(--ui-line); margin-bottom: 13px; } .home-numbers span { display: flex; align-items: baseline; gap: 7px; color: var(--ui-muted); font-size: 11px; } .home-numbers b { font-size: 21px; font-weight: 600; color: var(--ink); } .compact-details { margin: 0 !important; display: grid; gap: 7px !important; font-size: 12px; } .compact-details > div { display: grid; grid-template-columns: 100px minmax(0, 1fr); gap: 12px !important; padding: 0 !important; } .compact-details dt { font-weight: 400; color: var(--ui-muted); } .compact-details dd { margin: 0; overflow-wrap: anywhere; color: var(--ink); } .home-card-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 17px; padding-top: 14px; border-top: 1px solid var(--ui-line); } .home-card-actions .btn-primary { flex: 1; } .home-order-actions { display: flex; align-items: center; gap: 5px; margin-bottom: 12px; } .home-order-actions span { font-size: 10px; flex: 1; } .home-pagination { display: flex; justify-content: flex-end; align-items: center; gap: 10px; margin: 22px 0; } .home-pagination span { margin-right: auto; font-size: 11px; color: var(--ui-muted); } .device-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 330px), 1fr)); gap: 18px; } .device-card { min-width: 0; } .device-card-heading { display: flex; align-items: center; gap: 12px; margin-bottom: 15px; } .device-symbol { width: 42px; height: 42px; border-radius: 10px; background: #eaf2ec; color: var(--ui-accent); display: grid; place-items: center; } .device-symbol .app-icon { width: 23px; height: 23px; } .device-card-heading h3 { margin: 0 !important; font-size: 16px !important; } .device-title { padding: 0 !important; border: 0 !important; background: none !important; text-align: left !important; min-height: 0 !important; color: var(--ink) !important; font-weight: 600 !important; font-size: 16px !important; box-shadow: none !important; } .device-title:hover { color: var(--ui-accent) !important; text-decoration: underline; } .device-location { font-size: 11px; color: var(--ui-muted); margin-bottom: 15px; } .device-card-actions { display: flex; flex-wrap: wrap; gap: 8px; } .device-tags { display: flex; flex-wrap: wrap; gap: 5px; margin: 12px 0 0; } .device-tags span { background: #edf1ee; font-size: 10px; color: #667e6d; padding: 2px 8px; border-radius: 4px; } .device-view-controls { display: flex; flex-wrap: wrap; gap: 12px; } .device-view-controls label { display: flex; align-items: center; gap: 9px; } .group-custom { font-size: 12px; } .group-step { max-width: 100%; } .group-step select { max-width: 200px; } .view-presets { display: flex; gap: 6px; flex-wrap: wrap; } #device-count { font-size: 11px !important; } .device-group:first-child > .group-title { margin-top: 4px !important; } #asset-list .empty { min-height: 160px; } .device-tags + .network-status-block { margin-top: 12px; } .network-status-block { padding-top: 12px; margin-top: 14px; border-top: 1px solid var(--ui-line); font-size: 11px; } .network-status-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; } .network-status-title > span { font-weight: 600; } .status-dot { width: 7px; height: 7px; border-radius: 50%; background: #b4b9b5; display: inline-block; margin-right: 6px; } .status-dot.online { background: #37a06a; box-shadow: 0 0 0 3px #38a16a12; } .network-target { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; margin: 4px 0; } .network-target > span:first-child { width: 65px; color: var(--ui-muted); } .network-target code { font-size: 11px; } .network-target > span:last-child { margin-left: auto; font-size: 10px; } .network-status-block p { margin: 6px 0; font-size: 11px !important; } .management-links { display: flex; gap: 6px; flex-wrap: wrap; margin: 9px 0; } .network-check-time { font-size: 10px; color: #8b9c90; line-height: 1.5; display: block; } .network-platform { display: flex; align-items: center; gap: 15px; background: #edf3ee; border: 1px solid #d6e4d9; padding: 20px; border-radius: 10px; margin-bottom: 16px; } .network-platform > .app-icon { width: 32px; height: 32px; flex-basis: 32px; color: var(--ui-accent); } .network-platform h3 { margin: 0 0 3px !important; font-size: 18px !important; } .network-platform p { margin: 0; font-size: 11px; color: var(--ui-muted); } .platform-place-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); gap: 18px; } .platform-place-node { display: flex !important; flex-direction: column; align-items: flex-start !important; text-align: left !important; padding: 20px !important; gap: 9px; border: 1px solid var(--ui-line) !important; position: relative; color: var(--ink) !important; } .platform-place-node:hover { border-color: #81ad90 !important; box-shadow: 0 4px 16px #2d4b3610 !important; } .platform-place-node h3 { font-size: 17px !important; margin: 3px 0; } .platform-place-node p, .platform-place-node small { font-size: 11px; color: var(--ui-muted); margin: 0; } .network-open { padding-top: 12px; margin-top: auto; color: var(--ui-accent); font-size: 11px; } .network-node { margin: 0 0 14px calc(var(--depth) * 22px); overflow: visible !important; position: relative; } .network-node.nested::before { position: absolute; content: ""; border-left: 2px solid #c1d3c6; border-bottom: 2px solid #c1d3c6; width: 15px; left: -17px; top: -15px; height: 50px; border-bottom-left-radius: 6px; } .network-node .card-body { padding: 18px; } .network-node .device-card-heading { margin-bottom: 9px; } .network-facts { display: flex; flex-wrap: wrap; gap: 8px 24px; font-size: 11px; color: var(--ui-muted); } .network-facts b { font-weight: 500; color: var(--ink); margin-left: 7px; overflow-wrap: anywhere; } .network-map { overflow: hidden; } .network-map .network-platform { max-width: none; } .network-overview { margin-top: 18px; } .scope-intro { padding: 0 !important; margin-bottom: 24px !important; } .scope-intro h2 { font-size: 24px !important; } .scope-intro p { font-size: 13px !important; color: var(--ui-muted); } .steward-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: 18px; } .steward-tile { padding: 22px !important; min-height: 160px !important; background: var(--ui-surface) !important; border: 1px solid var(--ui-line) !important; border-radius: 10px !important; text-align: left !important; display: flex; align-items: flex-start !important; flex-direction: column; justify-content: flex-start !important; gap: 10px; color: var(--ink) !important; box-shadow: none !important; } .steward-tile::before { display: none !important; } .steward-tile:hover { border-color: #8caf99 !important; background: #f9fcf9 !important; transform: translateY(-1px); } .steward-tile strong { font-family: inherit !important; font-size: 19px !important; font-weight: 600 !important; } .steward-tile span { font-size: 12px !important; } .steward-tile small { font-size: 11px !important; color: var(--ui-muted); line-height: 1.8; } .camera-meta { padding: 16px !important; } .camera-meta strong { font-size: 14px !important; } .camera-meta p { font-size: 11px !important; margin: 4px 0 !important; } .camera-actions { padding: 0 16px 16px; display: flex; flex-wrap: wrap; gap: 7px; } .camera-card { background: var(--ui-surface) !important; } .live-grid { gap: 18px; } .video-panel { background: #152720 !important; } .video-error { font-size: 12px; } .video-empty { color: #9bad9f; } .wall-toolbar { padding: 12px !important; border-radius: 9px; gap: 10px; } .wall-toolbar label { font-size: 11px; } .wall-toolbar select { width: auto; } #live-stage:fullscreen { background: #101c17; } .wall-fullscreen .camera-card { border-color: #284336 !important; } .playback-panel { background: var(--ui-surface) !important; } .settings-sections { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 20px; } .settings-sections .btn[aria-pressed="true"] { background: var(--ui-accent) !important; color: white !important; } .journal-card { max-width: 100% !important; background: var(--ui-surface) !important; border-radius: 11px !important; padding: 22px !important; border: 1px solid var(--ui-line) !important; } .journal-attachments { gap: 14px; } .journal-attachments img { border-radius: 8px; } .journal-media-library { max-width: 100%; } .journal-pager { font-size: 12px; } .family-toolbar { flex-wrap: wrap; } .family-card, .person-card { padding: 16px; } .family-detail h2 { font-size: 20px !important; } dialog { max-width: min(900px, calc(100vw - 32px)) !important; width: 800px; padding: 26px !important; border: 1px solid var(--ui-line) !important; border-radius: 14px !important; background: var(--ui-surface) !important; color: var(--ink) !important; box-shadow: 0 24px 80px #0f2d3d38 !important; max-height: calc(100dvh - 48px); overflow: auto; margin: auto !important; } dialog::backdrop { background: #10291e70; backdrop-filter: blur(3px); } dialog h2 { font-size: 21px !important; } dialog .dialog-heading, dialog > header, dialog form > header { padding: 0 0 18px !important; margin: 0 0 20px !important; border-bottom: 1px solid var(--ui-line); display: flex; align-items: center; justify-content: space-between; gap: 15px; background: none; } dialog form > .form-grid { margin-top: 5px; } dialog footer, dialog .dialog-actions { padding: 18px 0 0 !important; margin: 20px 0 0 !important; border-top: 1px solid var(--ui-line); display: flex; justify-content: flex-end; gap: 10px; } #auth-dialog { width: 420px !important; padding: 32px !important; } #auth-dialog h2 { font-size: 25px !important; } #auth-dialog p { font-size: 12px; } #auth-form { display: grid; gap: 15px; } #auth-form label { margin: 0; } .form-error { font-size: 12px; color: #b15a3c; min-height: 0; } #toast { position: fixed; bottom: 24px; right: 24px; z-index: 200; background: #234c39 !important; color: #fff !important; padding: 12px 20px !important; border-radius: 9px !important; font-size: 13px !important; box-shadow: 0 6px 22px #193c3226; max-width: calc(100vw - 32px); } main > footer { padding: 22px 0 0 !important; margin: 30px 0 0 !important; border-top: 1px solid var(--ui-line); font-size: 10px !important; color: var(--ui-muted); } .empty { border: 1px dashed #cfdbd2; background: #f8faf8; border-radius: 9px; color: var(--ui-muted); text-align: center; padding: 40px 20px !important; } .empty h3 { margin-top: 10px; } .empty p { font-size: 12px; } .banner { padding: 12px 16px; border-radius: 8px; font-size: 12px; } html[data-theme="clean"] { --ui-bg: #f4f6f9; --ui-accent: #31655b; --ui-surface: #fff; } html[data-theme="ink"] { --ui-bg: #14221e; --ui-surface: #1c2e26; --ui-line: #334a3e; --ui-muted: #a5baad; --ink: #e1ece5; --bs-body-color: #e1ece5; --bs-border-color: #334a3e; --ui-accent: #397359; --bs-secondary-color: #a5baad; } html[data-theme="ink"] .form-control, html[data-theme="ink"] .form-select { background-color: #20352a; color: #e1ece5; } html[data-theme="ink"] .network-platform, html[data-theme="ink"] .household-context, html[data-theme="ink"] .device-context, html[data-theme="ink"] .empty { background: #213d2d !important; } html[data-theme="ink"] .description, html[data-theme="ink"] label { color: #a5baad !important; } html[data-theme="ink"] .btn-outline-secondary { color: #b9cec0; border-color: #476152; } html[data-density="compact"] #app > main { padding: 20px 25px !important; } html[data-density="compact"] .panel, html[data-density="compact"] .card-body { padding: 15px !important; } html[data-density="compact"] .home-cover { height: 150px !important; min-height: 150px !important; } html[data-layout="top"] #app { display: block; } html[data-layout="top"] .sidebar { position: relative !important; width: 100% !important; height: auto; padding: 12px 24px !important; display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 12px; } html[data-layout="top"] .sidebar .brand { padding: 0 15px 0 0 !important; margin: 0 !important; border: 0 !important; } html[data-layout="top"] .sidebar > .nav-label, html[data-layout="top"] .side-note, html[data-layout="top"] #current-user, html[data-layout="top"] #scope-nav-name { display: none; } html[data-layout="top"] .sidebar nav { flex-direction: row !important; flex: 1; flex-wrap: wrap; } html[data-layout="top"] #scope-navigation { display: flex; padding: 0 !important; margin: 0 !important; box-shadow: none; } html[data-layout="top"] .sidebar nav button { width: auto !important; padding: 8px 10px !important; } html[data-layout="top"] #app > main { margin: auto !important; max-width: 1800px; } @media (min-width: 1500px) { .home-card-grid[style] { gap: 22px; } } @media (max-width: 1200px) { #app > main { padding: 24px !important; } #app { grid-template-columns: 210px minmax(0, 1fr); } .sidebar { width: 210px !important; padding: 24px 14px !important; } .home-toolbar { align-items: flex-start; } .home-layout-controls { margin-left: 0; } .home-card-grid { grid-template-columns: repeat( min(var(--home-columns, 2), 2), minmax(0, 1fr) ); } .metrics > div { padding: 12px !important; } .metrics strong { font-size: 19px !important; } .compact-details > div { grid-template-columns: 90px minmax(0, 1fr); } } @media (max-width: 767px) { html, body { font-size: 14px; } #app { display: block !important; } .sidebar, html[data-layout="top"] .sidebar { position: relative !important; width: 100% !important; height: auto !important; padding: 13px 16px !important; display: grid !important; grid-template-columns: 1fr auto !important; overflow: visible !important; } .brand, html[data-layout="top"] .sidebar .brand { padding: 0 !important; margin: 0 !important; border: 0 !important; gap: 10px; } .brand-icon { width: 34px !important; height: 34px !important; } .brand > span > span { font-size: 19px !important; } .brand small { font-size: 9px !important; margin-top: 2px; } .sidebar > .nav-label, .side-note, #current-user, .sidebar > #account-password, .sidebar > #logout { display: none !important; } .mobile-nav-toggle { display: flex !important; color: #e8f1ec !important; border: 1px solid #ffffff30 !important; background: transparent !important; font-size: 12px; min-height: 36px; } .sidebar nav, html[data-layout="top"] .sidebar nav { display: none !important; grid-column: 1/-1; } .sidebar.mobile-open nav, html[data-layout="top"] .sidebar.mobile-open nav { display: flex !important; flex-direction: column !important; margin-top: 15px; } .sidebar.mobile-open > #account-password, .sidebar.mobile-open > #logout { display: block !important; } .sidebar.mobile-open > #current-user { display: block !important; grid-column: 1/-1; } .sidebar.mobile-open > #account-password { grid-column: 1; } .sidebar.mobile-open > #logout { grid-column: 2; } html[data-layout="top"] #scope-navigation { display: block; } .sidebar nav button { width: 100% !important; } .sidebar #scope-navigation { padding: 14px 0 !important; } #app > main, html[data-density="compact"] #app > main { padding: 20px 15px !important; min-height: calc(100vh - 65px); width: 100% !important; } main > header { gap: 12px; align-items: flex-start; margin-bottom: 20px !important; padding-bottom: 18px !important; } #page-title { font-size: 22px !important; } #page-note { font-size: 11px !important; } .eyebrow { font-size: 9px; margin-bottom: 5px; letter-spacing: 1px; } .header-status { font-size: 9px !important; gap: 5px; max-width: 100px; white-space: normal; text-align: right; } #service-status { font-size: 9px !important; padding: 4px 6px !important; } #clock { font-size: 9px; } .section-head { gap: 12px; align-items: flex-start; flex-wrap: wrap; } .section-head > .btn { margin-left: 0; font-size: 11px; } h2 { font-size: 17px !important; } .home-toolbar { gap: 13px; } .home-layout-controls { gap: 9px; width: 100%; font-size: 11px; } .home-layout-controls .form-select { min-height: 32px; font-size: 11px; } .home-layout-controls .btn { font-size: 11px; min-height: 32px; } .home-card-grid { grid-template-columns: minmax(0, 1fr) !important; gap: 17px !important; } .home-cover { height: 170px !important; min-height: 170px !important; } .home-cover-content { padding: 16px 18px !important; } .card-body { padding: 17px; } .home-numbers b { font-size: 21px; } .home-pagination { flex-wrap: wrap; } .home-pagination span { width: 100%; } .home-pagination .btn { flex: 1; } .household-context { padding: 10px !important; gap: 9px; } .household-context label { width: 100%; } .household-context select { max-width: none; flex: 1; min-width: 0; } #household-context-note { display: none; } #scope-back { width: 100%; margin: 0; } .metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .metrics > div { padding: 11px 13px !important; } .metrics strong { font-size: 20px !important; } .filter-row { gap: 9px; } .filter-row label { flex: 1; min-width: 0; } .filter-row select { width: 100%; min-width: 0; } #filter-caption { display: none; } .filter-row > button { font-size: 11px; } .panel { padding: 17px !important; } .form-grid { grid-template-columns: minmax(0, 1fr) !important; gap: 14px !important; } .form-grid > * { min-width: 0; grid-column: auto; } .form-grid .full { grid-column: 1; } .site-grid, .steward-grid, .platform-place-grid, .device-card-grid { grid-template-columns: minmax(0, 1fr) !important; } .device-view-controls { display: flex; flex-direction: column; align-items: stretch; } .device-view-controls label { width: 100%; } .device-view-controls input, .device-view-controls select { width: 100%; min-width: 0; } .network-node { margin-left: calc(min(var(--depth), 2) * 12px); } .network-node.nested::before { left: -10px; width: 8px; } .network-node .card-body { padding: 14px; } .network-facts { display: grid; gap: 6px; } .network-platform { padding: 16px; } .network-platform h3 { font-size: 16px !important; } .network-target { font-size: 10px; } .network-target code { font-size: 10px; word-break: break-all; } .management-links a { max-width: 100%; font-size: 10px; } .network-node .device-card-heading h3 { font-size: 14px !important; } .network-node .device-title { font-size: 14px !important; } .device-context [role="group"] { display: flex; flex-wrap: wrap; gap: 7px; } .device-context .btn { flex: 1; min-width: 100px; font-size: 11px; } .steward-tile { min-height: 145px !important; } .steward-tile strong { font-size: 18px !important; } .journal-card { padding: 17px !important; } .journal-attachments { grid-template-columns: minmax(0, 1fr) !important; } .journal-attachments audio, .journal-attachments video { width: 100%; max-width: 100%; } .journal-upload-controls { display: flex; flex-wrap: wrap; } .journal-upload-controls > * { max-width: 100%; } .settings-sections { gap: 6px; } .settings-sections .btn { flex: 1; min-width: calc(50% - 6px); font-size: 11px; } dialog { max-width: calc(100vw - 20px) !important; padding: 20px !important; max-height: calc(100dvh - 20px); border-radius: 12px !important; } dialog h2 { font-size: 19px !important; } dialog .dialog-heading { padding-bottom: 14px !important; margin-bottom: 16px !important; } dialog .dialog-heading .btn { min-width: 54px; } #auth-dialog { padding: 25px !important; } .brand-image-grid { grid-template-columns: 1fr !important; } #toast { bottom: 16px; right: 16px; font-size: 12px !important; } .wall-toolbar { gap: 7px; } .wall-toolbar label { width: auto; } .table-wrap { max-width: 100%; } main > footer { font-size: 9px !important; gap: 10px; flex-wrap: wrap; } .network-node .device-card-heading > .btn { font-size: 10px; min-height: 28px; padding: 3px 7px; } html[data-layout="top"] .sidebar.mobile-open nav button { width: 100% !important; } } @media (min-width: 768px) { .sidebar > .mobile-nav-toggle { display: none !important; } } .sidebar nav button { justify-content: flex-start !important; } .sidebar nav button.active::after { display: none !important; } .section-head > div:first-child { display: block; } .inline-check .form-check-input { width: 16px !important; height: 16px !important; min-height: 0 !important; padding: 0 !important; } .form-check-input { padding: 0 !important; } .dialog-footer { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--ui-line); } html[data-font="serif"] #page-title, html[data-font="serif"] .scope-intro h2 { font-family: "Noto Serif SC", "Songti SC", "SimSun", serif !important; font-weight: 600 !important; } .live-help { margin: 10px 0; color: var(--ui-muted); font-size: 13px; } .live-help summary { cursor: pointer; padding: 8px 0; } .live-help p { margin: 8px 0; } #page-live.wall-expanded { position: fixed; inset: 0; z-index: 10000; margin: 0; } #page-live:is(:fullscreen,.wall-expanded) > .live-help { display: none; } #page-live:is(:fullscreen,.wall-expanded) .live-grid[data-visible-count="1"] { grid-template-columns: minmax(0,1fr); grid-template-rows: minmax(0,1fr); } .leadership-member-actions .btn { white-space: normal; } #leadership-grant { align-items: flex-start; padding: 14px; } #leadership-grant span { line-height: 1.7; } @media (max-width: 767px) { #app > main { padding-bottom: max(20px,env(safe-area-inset-bottom)) !important; } main[data-page="live"] > header { margin-bottom: 12px !important; padding-bottom: 12px !important; } main[data-page="live"] > header .eyebrow, main[data-page="live"] #page-note, main[data-page="live"] > .metrics { display: none !important; } main[data-page="live"] .household-context { margin-bottom: 12px; flex-wrap: nowrap; } main[data-page="live"] .household-context label { flex: 1; width: auto; font-size: 0; } main[data-page="live"] .household-context select { font-size: 16px; width: 100%; } main[data-page="live"] #scope-back { width: auto; min-width: 82px; } main[data-page="live"] > .filter-row { margin: 12px 0; } #page-live:not([hidden]) { display: flex; flex-direction: column; } #page-live > .section-head { order: 0; margin: 6px 0 12px; } #page-live > .live-grid { order: 1; } #page-live > .wall-toolbar { order: 2; } #page-live > .live-help { order: 3; } #page-live:not(:fullscreen):not(.wall-expanded) .live-grid[data-layout="auto"] { grid-template-columns: minmax(0,1fr); } .camera-actions { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); padding: 0 12px 12px; } .camera-actions .btn { min-height: 44px; white-space: normal; font-size: 13px; } .camera-meta { padding: 12px; } .camera-meta strong { font-size: 15px !important; } .wall-toolbar .wall-paging { flex: 1; justify-content: space-between; } .wall-toolbar .btn { min-width: 44px; min-height: 44px; } #page-live:is(:fullscreen,.wall-expanded) { padding: max(8px,env(safe-area-inset-top)) max(8px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left)); } #page-live:is(:fullscreen,.wall-expanded) > .wall-toolbar { order: 0; } #page-live:is(:fullscreen,.wall-expanded) .live-grid[data-layout="auto"] { grid-template-columns: repeat(2,minmax(0,1fr)); } #page-live:is(:fullscreen,.wall-expanded) .live-grid[data-visible-count="1"] { grid-template-columns: minmax(0,1fr); grid-template-rows: minmax(0,1fr); } #page-live:is(:fullscreen,.wall-expanded) .camera-actions { display: none; } .network-target { display: grid; grid-template-columns: 76px minmax(0,1fr) auto; font-size: 12px; gap: 8px; } .network-target code { font-size: 13px !important; } .network-check-time { font-size: 12px; line-height: 1.7; } .management-links { display: grid; grid-template-columns: minmax(0,1fr); } .management-links .btn { min-height: 44px !important; font-size: 13px !important; white-space: normal; } dialog .description,dialog label { font-size: 14px !important; } dialog .dialog-footer { position: sticky; bottom: -20px; background: var(--ui-surface); padding: 14px 0; margin-bottom: -10px; } dialog .dialog-footer .btn { flex: 1; min-height: 44px; white-space: normal; } .leadership-member-actions .btn { flex: 1; min-width: 120px; } #leadership-grant { display: flex; gap: 10px; } #leadership-grant[hidden] { display: none; } } html[data-backdrop="mountains"] #app > main { background-image: linear-gradient(150deg, transparent 70%, #8ba58f08 70%, transparent 85%), linear-gradient(170deg, transparent 60%, #8ba58f06 60%, transparent 90%) !important; background-size: 100% 360px !important; background-repeat: no-repeat !important; } @media (max-width: 767px) { .form-control, .form-select { font-size: 16px !important; min-height: 44px; } .btn { min-height: 42px; font-size: 13px; } .home-layout-controls .form-select { font-size: 14px !important; min-height: 40px; } .home-layout-controls .btn, .network-status-title .btn, .management-links .btn { min-height: 40px; font-size: 12px; } .network-target code { font-size: 12px; } .mobile-nav-toggle { min-height: 42px; } .device-card-actions .btn { min-height: 42px; font-size: 12px; } }