/* Copyright (c) 2026 PowerOn AG */ /* All rights reserved. */ .container { display: flex; flex-direction: column; width: 100%; flex: 1; min-height: 0; } /* ---------- Tab bar ---------- */ .tabBar { display: flex; flex-wrap: nowrap; gap: 0; border-bottom: 2px solid var(--border-color, #e0e0e0); flex: 1; min-width: 0; flex-shrink: 0; overflow-x: auto; scrollbar-width: none; } .tabBar::-webkit-scrollbar { display: none; } /* ---------- Group ---------- */ .group { display: flex; align-items: stretch; } .groupLabel { display: flex; align-items: center; padding: 0 0.5rem; font-size: 0.65rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-secondary, #999); white-space: nowrap; user-select: none; } .groupSeparator { width: 1px; margin: 0.5rem 0.25rem; background: var(--border-color, #e0e0e0); } /* ---------- Tab button ---------- */ .tab { position: relative; display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.625rem 1rem; background: transparent; border: none; border-bottom: 2px solid transparent; margin-bottom: -2px; cursor: pointer; font-family: inherit; font-size: 0.875rem; font-weight: 500; color: var(--text-secondary, #666); white-space: nowrap; transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease; } .tab:hover { color: var(--text-primary, #333); background: var(--surface-color, rgba(0, 0, 0, 0.025)); } .tab:focus-visible { outline: 2px solid var(--primary-color, #007bff); outline-offset: -2px; border-radius: 4px 4px 0 0; } .tabActive { color: var(--primary-color, #007bff); border-bottom-color: var(--primary-color, #007bff); background: var(--primary-light, rgba(37, 99, 235, 0.08)); font-weight: 600; border-radius: 4px 4px 0 0; } .tab[aria-disabled="true"] { color: var(--text-secondary, #999); opacity: 0.5; cursor: not-allowed; } /* ---------- Tab inner layout ---------- */ .tabIcon { display: inline-flex; align-items: center; flex-shrink: 0; font-size: 1rem; } .tabLabel { line-height: 1.3; } /* ---------- Grouped layout (each group on its own row) ---------- */ .tabBarGrouped { flex-wrap: wrap; overflow-x: visible; border-bottom: none; } /* Group label on its own row, tabs wrap below it. */ .tabBarGrouped .group { width: 100%; display: flex; flex-wrap: wrap; align-items: stretch; border-bottom: 1px solid var(--border-color, #e0e0e0); } .tabBarGrouped .group:last-child { border-bottom-width: 2px; } .tabBarGrouped .groupLabel { width: 100%; display: flex; align-items: center; padding: 0.375rem 0 0.125rem; } /* Tabs within a grouped row wrap naturally */ .tabBarGrouped .group .tab { padding: 0.375rem 0.75rem; border-bottom: none; border-radius: 4px; margin-bottom: 0.125rem; } .tabBarGrouped .group .tab.tabActive { background: var(--primary-light, rgba(37, 99, 235, 0.1)); border-left: 3px solid var(--primary-color, #007bff); } /* ---------- Tab bar row (holds tab bar + toggle) ---------- */ .tabBarRow { display: flex; align-items: flex-end; gap: 0.25rem; flex-shrink: 0; } .tabBarRowCollapsed { align-items: center; border-bottom: 2px solid var(--border-color, #e0e0e0); padding: 0.25rem 0; } .collapsedLabel { font-size: 0.8125rem; font-weight: 500; color: var(--text-secondary, #666); padding: 0 0.25rem; } /* ---------- Collapsible toggle ---------- */ .toggleBtn { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border: 1px solid var(--border-color, #d0d0d0); border-radius: 4px; background: var(--bg-primary, #fff); color: var(--text-secondary, #888); cursor: pointer; font-size: 0.75rem; flex-shrink: 0; margin-left: auto; margin-bottom: 2px; } .tabBarRowCollapsed .toggleBtn { margin-bottom: 0; } .toggleBtn:hover { background: var(--primary-light, #e0e7ff); border-color: var(--primary-color, #2563eb); color: var(--primary-color, #2563eb); } .toggleIcon { pointer-events: none; } /* ---------- Tab panel ---------- */ .panel { flex: 1; min-height: 0; width: 100%; display: flex; flex-direction: column; padding-top: 0.75rem; } /* Only in fill mode: tab content stretches to the bounded panel height. */ .container:not(.containerNatural) .panel > * { flex: 1; min-height: 0; } /* ---------- Natural-height mode (fill=false) ---------- For use inside a scrolling page (StackLayout variant="scroll"): the tabs and their content keep their natural height so the page scroll container handles overflow instead of compressing the regions. */ .containerNatural, .containerNatural .panel { flex: 0 0 auto; min-height: 0; } .containerNatural .panel { overflow: visible; } /* ---------- Dark theme ---------- */ :global(.dark-theme) .tabBar { border-bottom-color: var(--border-color, #3a3a3a); } :global(.dark-theme) .groupLabel { color: var(--text-secondary, #888); } :global(.dark-theme) .groupSeparator { background: var(--border-color, #3a3a3a); } :global(.dark-theme) .tab { color: var(--text-secondary, #aaa); } :global(.dark-theme) .tab:hover { color: var(--text-primary, #e0e0e0); background: var(--surface-color, rgba(255, 255, 255, 0.04)); } :global(.dark-theme) .tabActive { color: var(--primary-color, #4da3ff); border-bottom-color: var(--primary-color, #4da3ff); background: rgba(77, 163, 255, 0.1); } :global(.dark-theme) .tabBarGrouped .group .tab.tabActive { background: rgba(77, 163, 255, 0.12); border-left-color: var(--primary-color, #4da3ff); } :global(.dark-theme) .tab[aria-disabled="true"] { color: var(--text-secondary, #666); } :global(.dark-theme) .tabSubtitle { color: var(--text-secondary, #777); } :global(.dark-theme) .tabBarGrouped .group { border-bottom-color: var(--border-color, #3a3a3a); } :global(.dark-theme) .tabBarRowCollapsed { border-bottom-color: var(--border-color, #3a3a3a); } :global(.dark-theme) .collapsedLabel { color: var(--text-secondary, #aaa); } :global(.dark-theme) .toggleBtn { background: var(--bg-dark, #121212); border-color: var(--border-dark, #444); color: var(--text-secondary-dark, #aaa); } :global(.dark-theme) .toggleBtn:hover { background: var(--primary-dark-bg, #1e3a5f); border-color: var(--primary-color, #4da3ff); color: var(--primary-light, #93c5fd); } /* ---------- Responsive ---------- */ @media (max-width: 768px) { .tabBar { -webkit-overflow-scrolling: touch; padding-bottom: 2px; } .tab { padding: 0.5rem 0.75rem; font-size: 0.8125rem; } .tabBarGrouped .groupLabel { padding: 0.25rem 0; font-size: 0.6rem; } }