@terminal-blueprint/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/css/tokens.css","../src/css/base.css","../src/css/components/button.css","../src/css/components/input.css","../src/css/components/textarea.css","../src/css/components/card.css","../src/css/components/badge.css","../src/css/components/tag.css","../src/css/components/title-line.css","../src/css/components/brackets.css","../src/css/components/select.css","../src/css/components/modal.css","../src/css/components/tabs.css","../src/css/components/toast.css","../src/css/components/tooltip.css","../src/css/components/nav-dropdown.css","../src/css/components/checkbox.css","../src/css/components/toggle.css","../src/css/components/radio.css","../src/css/components/progress.css","../src/css/components/battery.css","../src/css/components/table.css","../src/css/components/skeleton.css","../src/css/components/spinners.css","../src/css/components/pagination.css","../src/css/components/breadcrumbs.css","../src/css/components/toolbar.css","../src/css/components/sidenav.css","../src/css/components/code-block.css"],"sourcesContent":["/* ═══════════════════════════════════════\n TOKENS — Design tokens for Terminal Blueprint\n Theme-aware via data-theme and data-contrast\n on :root (<html>).\n\n Usage:\n document.documentElement.dataset.theme = 'dark' // default\n document.documentElement.dataset.contrast = 'high' // optional\n ═══════════════════════════════════════ */\n\n/* ── Dark theme (default) ── */\n:root,\n:root[data-theme=\"dark\"] {\n /* palette */\n --tb-primary: #a7d9ef;\n --tb-bg: #020617;\n --tb-bg-surface: #0f172a;\n --tb-bg-card: rgba(10, 20, 40, 0.85);\n --tb-bg-card-hover: rgba(15, 28, 55, 0.9);\n --tb-bg-input: rgba(15, 23, 42, 0.6);\n --tb-line: rgba(167, 217, 239, 0.15);\n --tb-line-bright: rgba(167, 217, 239, 0.35);\n --tb-glow: rgba(167, 217, 239, 0.4);\n --tb-font: \"Lexend\", \"JetBrains Mono\", sans-serif;\n\n /* semantic */\n --tb-error: #ef6b6b;\n --tb-error-dim: rgba(239, 107, 107, 0.15);\n --tb-success: #6bcfa0;\n --tb-success-dim: rgba(107, 207, 160, 0.15);\n --tb-warning: #e8c468;\n --tb-warning-dim: rgba(232, 196, 104, 0.15);\n --tb-info: #a7d9ef;\n\n /* text hierarchy — enhanced contrast (default) */\n --tb-text-heading: #ffffff;\n --tb-text-body: #cddbe4;\n --tb-text-label: #9fc3d4;\n --tb-text-muted: #7aaab9;\n\n /* spacing (8px grid) */\n --tb-sp-1: 4px;\n --tb-sp-2: 8px;\n --tb-sp-3: 12px;\n --tb-sp-4: 16px;\n --tb-sp-6: 24px;\n --tb-sp-8: 32px;\n --tb-sp-10: 40px;\n --tb-sp-12: 48px;\n --tb-sp-16: 64px;\n\n /* z-index */\n --tb-z-base: 0;\n --tb-z-dropdown: 100;\n --tb-z-sticky: 200;\n --tb-z-fixed: 300;\n --tb-z-modal-backdrop: 400;\n --tb-z-modal: 500;\n --tb-z-popover: 600;\n --tb-z-tooltip: 700;\n --tb-z-toast: 800;\n\n /* transitions */\n --tb-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);\n --tb-ease-enter: cubic-bezier(0, 0, 0.2, 1);\n --tb-ease-exit: cubic-bezier(0.4, 0, 1, 1);\n --tb-duration-fast: 150ms;\n --tb-duration-normal: 300ms;\n --tb-duration-slow: 500ms;\n}\n\n/* ── High contrast override ── */\n:root[data-contrast=\"high\"],\n:root[data-theme=\"dark\"][data-contrast=\"high\"] {\n --tb-text-heading: #ffffff;\n --tb-text-body: #d4ecf7;\n --tb-text-label: #a7d9ef;\n --tb-text-muted: #89b8cc;\n}\n\n/* ── Light theme (placeholder for future) ── */\n:root[data-theme=\"light\"] {\n /* --tb-primary: ...;\n --tb-bg: ...;\n --tb-bg-surface: ...;\n --tb-bg-card: ...;\n --tb-line: ...;\n --tb-text-heading: ...;\n --tb-text-body: ...;\n --tb-text-label: ...;\n --tb-text-muted: ...;\n Override all color tokens here. */\n}\n\n:root[data-theme=\"light\"][data-contrast=\"high\"] {\n /* Future: high contrast light overrides */\n}\n","/* ═══════════════════════════════════════\n BASE — Reset & base styles for Terminal Blueprint\n Wrapped in .tb-root so consumers opt-in.\n Document-level styles activate via :has(.tb-root).\n ═══════════════════════════════════════ */\n\n/* Document-level — activates when .tb-root exists on the page */\n:root:has(.tb-root) {\n scroll-behavior: smooth;\n scrollbar-color: rgba(167, 217, 239, 0.2) var(--tb-bg);\n}\n\n:root:has(.tb-root) body {\n margin: 0;\n padding: 0;\n background-color: var(--tb-bg);\n overflow-x: hidden;\n}\n\n:root:has(.tb-root) ::-webkit-scrollbar { width: 6px; height: 6px; }\n:root:has(.tb-root) ::-webkit-scrollbar-track { background: var(--tb-bg); }\n:root:has(.tb-root) ::-webkit-scrollbar-thumb { background: rgba(167, 217, 239, 0.15); border-radius: 0; }\n:root:has(.tb-root) ::-webkit-scrollbar-thumb:hover { background: rgba(167, 217, 239, 0.3); }\n\n/* Reset — scoped to .tb-root */\n.tb-root *,\n.tb-root *::before,\n.tb-root *::after {\n box-sizing: border-box;\n}\n\n/* Body-level styles — applied to .tb-root wrapper */\n.tb-root {\n font-family: var(--tb-font);\n background-color: var(--tb-bg);\n color: var(--tb-text-body);\n line-height: 1.6;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n min-height: 100vh;\n background-image: linear-gradient(\n rgba(167, 217, 239, 0.025) 1px,\n transparent 1px\n ),\n linear-gradient(\n 90deg,\n rgba(167, 217, 239, 0.025) 1px,\n transparent 1px\n );\n background-size: 40px 40px;\n}\n\n/* Links */\n.tb-root a {\n color: var(--tb-text-label);\n text-decoration: none;\n transition: text-shadow var(--tb-duration-normal) ease,\n color var(--tb-duration-normal) ease;\n}\n\n.tb-root a:hover {\n color: var(--tb-text-heading);\n text-shadow: 0 0 12px var(--tb-glow), 0 0 24px rgba(167, 217, 239, 0.2);\n}\n\n/* Headings */\n.tb-root h1,\n.tb-root h2,\n.tb-root h3,\n.tb-root h4,\n.tb-root h5,\n.tb-root h6 {\n color: var(--tb-text-heading);\n}\n\n/* Forms — no text-transform */\n.tb-root input,\n.tb-root textarea,\n.tb-root select {\n text-transform: none;\n}\n\n/* Focus visible */\n.tb-root *:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n.tb-root :focus:not(:focus-visible) {\n outline: none;\n}\n\n.tb-root input:focus-visible,\n.tb-root textarea:focus-visible,\n.tb-root select:focus-visible {\n outline: none;\n border-color: var(--tb-primary) !important;\n box-shadow: 0 0 0 3px rgba(167, 217, 239, 0.15),\n 0 0 15px rgba(167, 217, 239, 0.1);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .tb-root *,\n .tb-root *::before,\n .tb-root *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-root {\n letter-spacing: 0.05em;\n line-height: 1.5;\n }\n}\n","/* ═══════════════════════════════════════\n BUTTON — .tb-btn\n ═══════════════════════════════════════ */\n\n.tb-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--tb-sp-2);\n height: 44px;\n padding: 0 var(--tb-sp-6);\n font-family: var(--tb-font);\n font-size: 0.6rem;\n font-weight: 500;\n letter-spacing: 0.4em;\n text-transform: uppercase;\n text-decoration: none;\n border: 1px solid var(--tb-line-bright);\n background: transparent;\n color: var(--tb-primary);\n cursor: pointer;\n transition: all var(--tb-duration-normal) var(--tb-ease-standard);\n position: relative;\n white-space: nowrap;\n}\n\n.tb-btn:hover {\n border-color: var(--tb-primary);\n color: #fff;\n text-shadow: 0 0 15px var(--tb-glow);\n background: rgba(167, 217, 239, 0.05);\n}\n\n.tb-btn:active {\n transform: scale(0.97);\n text-shadow: 0 0 20px var(--tb-glow);\n}\n\n/* ── Primary (filled / inverted) ── */\n.tb-btn--primary {\n background: var(--tb-primary);\n color: var(--tb-bg);\n border-color: var(--tb-primary);\n}\n\n.tb-btn--primary:hover {\n background: #fff;\n color: var(--tb-bg);\n text-shadow: none;\n box-shadow: 0 0 20px var(--tb-glow);\n}\n\n/* ── Secondary (alias for default outline) ── */\n.tb-btn--secondary {\n border-color: var(--tb-line-bright);\n color: var(--tb-primary);\n}\n\n.tb-btn--secondary:hover {\n border-color: var(--tb-primary);\n color: #fff;\n text-shadow: 0 0 15px var(--tb-glow);\n background: rgba(167, 217, 239, 0.05);\n}\n\n/* ── Danger ── */\n.tb-btn--danger {\n border-color: rgba(239, 107, 107, 0.4);\n color: var(--tb-error);\n}\n\n.tb-btn--danger:hover {\n border-color: var(--tb-error);\n color: #fff;\n text-shadow: 0 0 15px rgba(239, 107, 107, 0.4);\n background: rgba(239, 107, 107, 0.08);\n}\n\n/* ── Ghost (minimal) ── */\n.tb-btn--ghost {\n border-color: transparent;\n background: transparent;\n color: var(--tb-text-label);\n}\n\n.tb-btn--ghost:hover {\n border-color: var(--tb-line);\n color: var(--tb-primary);\n background: rgba(167, 217, 239, 0.03);\n}\n\n/* ── Disabled ── */\n.tb-btn[disabled],\n.tb-btn--disabled {\n opacity: 0.25;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ── Loading ── */\n.tb-btn--loading {\n pointer-events: none;\n color: transparent !important;\n position: relative;\n}\n\n.tb-btn--loading::before,\n.tb-btn--loading::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n border-style: solid;\n border-color: var(--tb-primary);\n}\n\n.tb-btn--loading::before {\n width: 14px;\n height: 14px;\n margin: -7px 0 0 -7px;\n border-width: 1.5px;\n animation: tb-spin-cw 2.5s linear infinite;\n}\n\n.tb-btn--loading::after {\n width: 8px;\n height: 8px;\n margin: -4px 0 0 -4px;\n border-width: 1px;\n opacity: 0.45;\n animation: tb-spin-ccw 1.6s linear infinite;\n}\n\n.tb-btn--primary.tb-btn--loading::before,\n.tb-btn--primary.tb-btn--loading::after {\n border-color: var(--tb-bg);\n}\n\n/* ── Loading with text ── */\n.tb-btn--loading-text {\n color: inherit;\n}\n\n/* ── Icon ── */\n.tb-btn__icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* ── Spinner (child element approach) ── */\n.tb-btn__spinner {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 16px;\n height: 16px;\n}\n.tb-btn__spinner .tb-btn__spinner-square {\n position: absolute;\n inset: 0;\n border: 1.5px solid currentColor;\n}\n.tb-btn__spinner .tb-btn__spinner-square:nth-child(1) {\n animation: tb-spin-cw 2s linear infinite;\n}\n.tb-btn__spinner .tb-btn__spinner-square:nth-child(2) {\n animation: tb-spin-ccw 3s linear infinite;\n}\n.tb-btn__spinner .tb-btn__spinner-square:nth-child(3) {\n animation: tb-spin-cw 4s linear infinite;\n}\n\n/* ── Focus-visible ── */\n.tb-btn:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n/* ── Size variants ── */\n.tb-btn--sm {\n height: 32px;\n padding: 0 var(--tb-sp-4);\n font-size: 0.5rem;\n}\n\n.tb-btn--lg {\n height: 52px;\n padding: 0 var(--tb-sp-8);\n font-size: 0.65rem;\n}\n\n/* ── Keyframes ── */\n@keyframes tb-spin-cw {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n@keyframes tb-spin-ccw {\n from { transform: rotate(0deg); }\n to { transform: rotate(-360deg); }\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-btn {\n letter-spacing: 0.2em;\n padding-left: var(--tb-sp-4);\n padding-right: var(--tb-sp-4);\n }\n}\n","/* ═══════════════════════════════════════\n INPUT — .tb-input, .tb-label, .tb-input__error, .tb-input__hint\n ═══════════════════════════════════════ */\n\n/* ── Label ── */\n.tb-label {\n font-size: 0.55rem;\n font-weight: 500;\n letter-spacing: 0.4em;\n text-transform: uppercase;\n color: var(--tb-text-body);\n}\n\n.tb-label__required {\n color: var(--tb-error);\n margin-left: var(--tb-sp-1);\n}\n\n/* ── Input ── */\n.tb-input {\n height: 44px;\n padding: 0 var(--tb-sp-4);\n font-family: var(--tb-font);\n font-size: 0.7rem;\n font-weight: 400;\n letter-spacing: 0.1em;\n color: var(--tb-text-body);\n background: var(--tb-bg-input);\n border: 1px solid var(--tb-line);\n transition: border-color var(--tb-duration-normal) ease,\n box-shadow var(--tb-duration-normal) ease;\n}\n\n.tb-input::placeholder {\n color: var(--tb-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.2em;\n font-size: 0.6rem;\n}\n\n.tb-input:hover {\n border-color: var(--tb-line-bright);\n}\n\n.tb-input:focus {\n outline: none;\n border-color: var(--tb-primary);\n box-shadow: 0 0 0 3px rgba(167, 217, 239, 0.1),\n 0 0 20px rgba(167, 217, 239, 0.05);\n}\n\n/* ── Focus-visible ── */\n.tb-input:focus-visible {\n outline: none; /* already has box-shadow focus style */\n}\n\n/* ── Error state ── */\n.tb-input--error {\n border-color: rgba(239, 107, 107, 0.5) !important;\n}\n\n.tb-input--error:focus {\n border-color: var(--tb-error) !important;\n box-shadow: 0 0 0 3px rgba(239, 107, 107, 0.1),\n 0 0 20px rgba(239, 107, 107, 0.05);\n}\n\n/* ── Success state ── */\n.tb-input--success {\n border-color: rgba(107, 207, 160, 0.5) !important;\n}\n\n/* ── Disabled ── */\n.tb-input:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n background: rgba(15, 23, 42, 0.3);\n}\n\n/* ── Error message ── */\n.tb-input__error {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n font-size: 0.5rem;\n font-weight: 400;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n color: var(--tb-error);\n}\n\n/* ── Hint / helper text ── */\n.tb-input__hint {\n font-size: 0.5rem;\n font-weight: 400;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n color: var(--tb-text-muted);\n}\n\n/* ── Size variants ── */\n.tb-input--sm {\n height: 32px;\n font-size: 0.6rem;\n padding: 0 var(--tb-sp-3);\n}\n\n.tb-input--lg {\n height: 52px;\n font-size: 0.8rem;\n padding: 0 var(--tb-sp-6);\n}\n\n/* ── Form group ── */\n.tb-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n/* ── Input wrapper (icon positioning) ── */\n.tb-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n.tb-input-wrapper .tb-input {\n width: 100%;\n}\n.tb-input-wrapper--icon-left .tb-input {\n padding-left: 36px;\n}\n.tb-input-wrapper--icon-right .tb-input {\n padding-right: 36px;\n}\n.tb-input__icon {\n position: absolute;\n display: flex;\n align-items: center;\n pointer-events: none;\n color: var(--tb-text-muted);\n}\n.tb-input-wrapper--icon-left .tb-input__icon {\n left: 10px;\n}\n.tb-input-wrapper--icon-right .tb-input__icon {\n right: 10px;\n}\n","/* ═══════════════════════════════════════\n TEXTAREA — .tb-textarea\n ═══════════════════════════════════════ */\n\n.tb-textarea {\n min-height: 100px;\n padding: var(--tb-sp-3) var(--tb-sp-4);\n resize: vertical;\n font-family: var(--tb-font);\n font-size: 0.7rem;\n font-weight: 400;\n letter-spacing: 0.1em;\n color: var(--tb-primary);\n background: var(--tb-bg-input);\n border: 1px solid var(--tb-line);\n transition: border-color var(--tb-duration-normal) ease,\n box-shadow var(--tb-duration-normal) ease;\n line-height: 1.8;\n}\n\n.tb-textarea::placeholder {\n color: var(--tb-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.2em;\n font-size: 0.6rem;\n}\n\n.tb-textarea:hover {\n border-color: var(--tb-line-bright);\n}\n\n.tb-textarea:focus {\n outline: none;\n border-color: var(--tb-primary);\n box-shadow: 0 0 0 3px rgba(167, 217, 239, 0.1),\n 0 0 20px rgba(167, 217, 239, 0.05);\n}\n\n/* ── Error state ── */\n.tb-textarea--error {\n border-color: rgba(239, 107, 107, 0.5) !important;\n}\n\n.tb-textarea--error:focus {\n border-color: var(--tb-error) !important;\n box-shadow: 0 0 0 3px rgba(239, 107, 107, 0.1),\n 0 0 20px rgba(239, 107, 107, 0.05);\n}\n\n/* ── Disabled ── */\n.tb-textarea:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n background: rgba(15, 23, 42, 0.3);\n}\n\n/* ── Size variants ── */\n.tb-textarea--sm {\n min-height: 64px;\n font-size: 0.6rem;\n padding: var(--tb-sp-2) var(--tb-sp-3);\n}\n\n.tb-textarea--lg {\n min-height: 160px;\n font-size: 0.8rem;\n padding: var(--tb-sp-4) var(--tb-sp-6);\n}\n\n/* ── Error message ── */\n.tb-textarea__error {\n color: var(--tb-error);\n font-size: 0.75rem;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n\n/* ── Hint / helper text ── */\n.tb-textarea__hint {\n color: var(--tb-text-muted);\n font-size: 0.75rem;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n","/* ═══════════════════════════════════════\n CARD — .tb-card\n ═══════════════════════════════════════ */\n\n.tb-card {\n position: relative;\n border: 1px solid var(--tb-line);\n background: var(--tb-bg-card);\n padding: var(--tb-sp-6);\n transition: border-color var(--tb-duration-normal) ease, background var(--tb-duration-normal) ease;\n}\n\n/* ── Hoverable variant ── */\n.tb-card--hoverable:hover {\n border-color: var(--tb-line-bright);\n background: var(--tb-bg-card-hover);\n}\n\n/* ── Card parts ── */\n.tb-card__header {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n margin-bottom: var(--tb-sp-6);\n}\n\n.tb-card__title {\n font-size: 0.75rem;\n font-weight: 700;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--tb-text-heading);\n margin-bottom: var(--tb-sp-3);\n}\n\n.tb-card__body {\n margin-bottom: var(--tb-sp-6);\n}\n\n.tb-card__body p {\n font-size: 0.6rem;\n letter-spacing: 0.12em;\n color: var(--tb-text-body);\n line-height: 2;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.tb-card__tags {\n display: flex;\n flex-wrap: wrap;\n gap: var(--tb-sp-2);\n margin-top: var(--tb-sp-4);\n}\n\n.tb-card__footer {\n display: flex;\n gap: var(--tb-sp-4);\n padding-top: var(--tb-sp-4);\n border-top: 1px solid var(--tb-line);\n margin-top: var(--tb-sp-6);\n}\n\n.tb-card__footer a {\n font-size: 0.55rem;\n letter-spacing: 0.2em;\n color: var(--tb-text-muted);\n display: flex;\n align-items: center;\n gap: var(--tb-sp-1);\n transition: color var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-card__footer a:hover {\n color: var(--tb-primary);\n}\n\n/* ── Bracketed variant ── */\n.tb-card--bracketed {\n position: relative;\n}\n\n.tb-card--bracketed .tb-card__bracket {\n position: absolute;\n width: 18px;\n height: 18px;\n border-color: var(--tb-primary);\n border-style: solid;\n border-width: 0;\n opacity: 0;\n transition: transform var(--tb-duration-normal) var(--tb-ease-standard),\n opacity var(--tb-duration-normal) ease;\n}\n\n.tb-card--bracketed .tb-card__bracket--tl {\n top: -1px;\n left: -1px;\n border-top-width: 2px;\n border-left-width: 2px;\n}\n\n.tb-card--bracketed .tb-card__bracket--tr {\n top: -1px;\n right: -1px;\n border-top-width: 2px;\n border-right-width: 2px;\n}\n\n.tb-card--bracketed .tb-card__bracket--bl {\n bottom: -1px;\n left: -1px;\n border-bottom-width: 2px;\n border-left-width: 2px;\n}\n\n.tb-card--bracketed .tb-card__bracket--br {\n bottom: -1px;\n right: -1px;\n border-bottom-width: 2px;\n border-right-width: 2px;\n}\n\n.tb-card--bracketed:hover .tb-card__bracket {\n opacity: 1;\n}\n\n.tb-card--bracketed:hover .tb-card__bracket--tl {\n transform: translate(-6px, -6px);\n}\n\n.tb-card--bracketed:hover .tb-card__bracket--tr {\n transform: translate(6px, -6px);\n}\n\n.tb-card--bracketed:hover .tb-card__bracket--bl {\n transform: translate(-6px, 6px);\n}\n\n.tb-card--bracketed:hover .tb-card__bracket--br {\n transform: translate(6px, 6px);\n}\n\n/* ── Pulse variant — bracket glow animation ── */\n.tb-card--pulse .tb-card__bracket {\n animation: tb-bracket-glow 2.5s ease-in-out infinite;\n}\n\n.tb-card--pulse .tb-card__bracket--tr {\n animation-delay: 0.15s;\n}\n\n.tb-card--pulse .tb-card__bracket--bl {\n animation-delay: 0.3s;\n}\n\n.tb-card--pulse .tb-card__bracket--br {\n animation-delay: 0.45s;\n}\n","/* ═══════════════════════════════════════\n BADGE — .tb-badge\n ═══════════════════════════════════════ */\n\n.tb-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--tb-sp-2);\n padding: var(--tb-sp-1) var(--tb-sp-3);\n font-size: 0.5rem;\n font-weight: 500;\n letter-spacing: 0.35em;\n text-transform: uppercase;\n border: 1px solid;\n border-color: var(--tb-line-bright);\n color: var(--tb-text-body);\n}\n\n/* ── Variants ── */\n.tb-badge--success {\n border-color: rgba(107, 207, 160, 0.3);\n color: var(--tb-success);\n}\n\n.tb-badge--warning {\n border-color: rgba(232, 196, 104, 0.3);\n color: var(--tb-warning);\n}\n\n.tb-badge--error {\n border-color: rgba(239, 107, 107, 0.3);\n color: var(--tb-error);\n}\n\n.tb-badge--filled {\n background: var(--tb-primary);\n color: var(--tb-bg);\n border-color: var(--tb-primary);\n}\n\n/* ── Status dot ── */\n.tb-badge__dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: currentColor;\n flex-shrink: 0;\n}\n\n/* ── Pulse animation ── */\n.tb-badge--pulse .tb-badge__dot {\n animation: tb-pulse 2.5s ease-in-out infinite;\n}\n\n@keyframes tb-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.2;\n }\n}\n","/* ═══════════════════════════════════════\n TAG — .tb-tag\n Derived from the badge pattern but intended\n for inline keyword / skill tags (e.g. card tags).\n ═══════════════════════════════════════ */\n\n.tb-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--tb-sp-1);\n padding: var(--tb-sp-1) var(--tb-sp-3);\n font-size: 0.5rem;\n font-weight: 400;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n border: 1px solid var(--tb-line);\n color: var(--tb-text-label);\n transition: color var(--tb-duration-fast) ease,\n border-color var(--tb-duration-fast) ease;\n}\n\n.tb-tag:hover {\n color: var(--tb-text-heading);\n border-color: var(--tb-line-bright);\n}\n","/* ═══════════════════════════════════════\n TITLE LINE — .tb-title-line\n Section title with decorative lines on each side.\n Extracted from .section-header pattern.\n ═══════════════════════════════════════ */\n\n.tb-title-line {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-6);\n margin-bottom: var(--tb-sp-10);\n}\n\n.tb-title-line::before,\n.tb-title-line::after {\n content: \"\";\n height: 1px;\n flex: 1;\n background: var(--tb-line);\n}\n\n.tb-title-line__label {\n font-size: 0.65rem;\n font-weight: 400;\n letter-spacing: 0.5em;\n text-transform: uppercase;\n color: var(--tb-text-heading);\n white-space: nowrap;\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-title-line__label {\n letter-spacing: 0.2em;\n }\n}\n","/* ═══════════════════════════════════════\n BRACKETS — .tb-brackets\n Standalone corner bracket decoration wrapper.\n Can be applied to any element. Brackets appear\n on hover and expand outward.\n ═══════════════════════════════════════ */\n\n.tb-brackets {\n position: relative;\n}\n\n.tb-brackets__corner {\n position: absolute;\n width: 18px;\n height: 18px;\n border-color: var(--tb-primary);\n border-style: solid;\n border-width: 0;\n opacity: 0;\n transition: transform var(--tb-duration-normal) var(--tb-ease-standard),\n opacity var(--tb-duration-normal) ease;\n}\n\n/* ── Corner positions ── */\n.tb-brackets__corner--tl {\n top: -1px;\n left: -1px;\n border-top-width: 2px;\n border-left-width: 2px;\n}\n\n.tb-brackets__corner--tr {\n top: -1px;\n right: -1px;\n border-top-width: 2px;\n border-right-width: 2px;\n}\n\n.tb-brackets__corner--bl {\n bottom: -1px;\n left: -1px;\n border-bottom-width: 2px;\n border-left-width: 2px;\n}\n\n.tb-brackets__corner--br {\n bottom: -1px;\n right: -1px;\n border-bottom-width: 2px;\n border-right-width: 2px;\n}\n\n/* ── Hover expansion ── */\n.tb-brackets:hover .tb-brackets__corner {\n opacity: 1;\n}\n\n.tb-brackets:hover .tb-brackets__corner--tl {\n transform: translate(-6px, -6px);\n}\n\n.tb-brackets:hover .tb-brackets__corner--tr {\n transform: translate(6px, -6px);\n}\n\n.tb-brackets:hover .tb-brackets__corner--bl {\n transform: translate(-6px, 6px);\n}\n\n.tb-brackets:hover .tb-brackets__corner--br {\n transform: translate(6px, 6px);\n}\n\n/* ── Pulse variant — always visible with pulsating glow ── */\n.tb-brackets--pulse .tb-brackets__corner--tl,\n.tb-brackets--pulse .tb-brackets__corner--tr,\n.tb-brackets--pulse .tb-brackets__corner--bl,\n.tb-brackets--pulse .tb-brackets__corner--br {\n animation: tb-bracket-glow 2.5s ease-in-out infinite;\n}\n\n.tb-brackets--pulse .tb-brackets__corner--tr {\n animation-delay: 0.15s;\n}\n\n.tb-brackets--pulse .tb-brackets__corner--bl {\n animation-delay: 0.3s;\n}\n\n.tb-brackets--pulse .tb-brackets__corner--br {\n animation-delay: 0.45s;\n}\n\n@keyframes tb-bracket-glow {\n 0%, 100% {\n border-color: var(--tb-primary);\n opacity: 0.4;\n filter: drop-shadow(0 0 0 transparent);\n }\n 50% {\n border-color: #fff;\n opacity: 1;\n filter: drop-shadow(0 0 6px rgba(167, 217, 239, 0.5));\n }\n}\n","/* ═══════════════════════════════════════\n SELECT — .tb-select\n ═══════════════════════════════════════ */\n\n.tb-select {\n position: relative;\n}\n\n.tb-select__trigger {\n width: 100%;\n font-family: var(--tb-font);\n font-size: 0.6rem;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n height: 44px;\n padding: 0 var(--tb-sp-4);\n background: var(--tb-bg-card);\n border: 1px solid var(--tb-line);\n color: var(--tb-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n transition: border-color var(--tb-duration-normal) ease;\n}\n\n.tb-select__trigger:hover {\n border-color: var(--tb-line-bright);\n}\n\n.tb-select__chevron {\n display: inline-flex;\n align-items: center;\n font-size: 16px;\n opacity: 0.6;\n transition: transform var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-select__dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--tb-bg-surface);\n border: 1px solid var(--tb-line-bright);\n z-index: var(--tb-z-dropdown);\n max-height: 200px;\n overflow-y: auto;\n opacity: 0;\n visibility: hidden;\n transform: translateY(-4px);\n transition: opacity var(--tb-duration-normal) ease,\n visibility var(--tb-duration-normal) ease,\n transform var(--tb-duration-normal) ease;\n}\n\n.tb-select__dropdown--open {\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n}\n\n.tb-select__option {\n padding: var(--tb-sp-3) var(--tb-sp-4);\n font-family: var(--tb-font);\n font-size: 0.6rem;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n cursor: pointer;\n color: var(--tb-text-label);\n transition: all var(--tb-duration-fast) var(--tb-ease-standard);\n border-left: 2px solid transparent;\n}\n\n.tb-select__option:hover {\n color: var(--tb-text-heading);\n background: rgba(167, 217, 239, 0.06);\n border-left-color: var(--tb-primary);\n}\n\n.tb-select__option--selected {\n color: var(--tb-text-heading);\n background: rgba(167, 217, 239, 0.06);\n border-left-color: var(--tb-primary);\n}\n\n/* ── Focus-visible ── */\n.tb-select__trigger:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n.tb-select__option:focus-visible {\n outline: none;\n background: rgba(167, 217, 239, 0.03);\n border-left-color: var(--tb-primary);\n}\n\n/* ── Error ── */\n.tb-select--error .tb-select__trigger {\n border-color: var(--tb-error);\n box-shadow: 0 0 0 1px var(--tb-error-dim);\n}\n","/* ═══════════════════════════════════════\n MODAL — .tb-modal\n ═══════════════════════════════════════ */\n\n.tb-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(2, 6, 23, 0.85);\n z-index: var(--tb-z-modal-backdrop);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n visibility: hidden;\n transition: opacity var(--tb-duration-normal) var(--tb-ease-standard),\n visibility var(--tb-duration-normal) var(--tb-ease-standard);\n}\n\n.tb-modal-overlay--open {\n opacity: 1;\n visibility: visible;\n backdrop-filter: blur(8px);\n}\n\n.tb-modal {\n background: var(--tb-bg-card);\n border: 1px solid var(--tb-line);\n padding: var(--tb-sp-8);\n max-width: 520px;\n width: 90%;\n position: relative;\n z-index: var(--tb-z-modal);\n transform: translateY(20px) scale(0.97);\n transition: transform var(--tb-duration-normal) var(--tb-ease-standard),\n opacity var(--tb-duration-normal) var(--tb-ease-standard);\n}\n\n.tb-modal-overlay--open .tb-modal {\n transform: translateY(0) scale(1);\n}\n\n.tb-modal__close {\n position: absolute;\n top: var(--tb-sp-4);\n right: var(--tb-sp-4);\n background: none;\n border: none;\n color: var(--tb-primary);\n cursor: pointer;\n opacity: 0.4;\n transition: opacity var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-modal__close:hover {\n opacity: 1;\n}\n\n/* ── Focus-visible ── */\n.tb-modal__close:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n.tb-modal__title {\n font-size: 0.75rem;\n font-weight: 700;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n color: var(--tb-text-heading);\n margin-bottom: var(--tb-sp-4);\n}\n\n.tb-modal__description {\n font-size: 0.6rem;\n color: var(--tb-text-body);\n line-height: 2;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n font-weight: 400;\n margin-bottom: var(--tb-sp-6);\n}\n\n.tb-modal__body {\n margin-bottom: var(--tb-sp-6);\n}\n\n.tb-modal__footer {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n justify-content: flex-end;\n border-top: 1px solid var(--tb-line);\n padding-top: var(--tb-sp-6);\n}\n","/* ═══════════════════════════════════════\n TABS — .tb-tabs\n ═══════════════════════════════════════ */\n\n.tb-tabs {\n /* wrapper — no layout opinion */\n}\n\n.tb-tabs__list {\n display: flex;\n border-bottom: 1px solid var(--tb-line);\n margin-bottom: var(--tb-sp-8);\n}\n\n.tb-tabs__trigger {\n font-family: var(--tb-font);\n font-size: 0.55rem;\n letter-spacing: 0.4em;\n text-transform: uppercase;\n padding: var(--tb-sp-3) var(--tb-sp-6);\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n color: var(--tb-text-label);\n cursor: pointer;\n margin-bottom: -1px;\n transition: all var(--tb-duration-normal) var(--tb-ease-standard);\n}\n\n.tb-tabs__trigger:hover {\n color: var(--tb-text-body);\n background: rgba(10, 20, 40, 0.8);\n}\n\n.tb-tabs__trigger--active {\n color: var(--tb-text-heading);\n border-bottom-color: var(--tb-primary);\n}\n\n/* ── Focus-visible ── */\n.tb-tabs__trigger:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: -2px;\n}\n\n.tb-tabs__content {\n display: none;\n}\n\n.tb-tabs__content--active {\n display: block;\n}\n","/* ═══════════════════════════════════════\n TOAST — .tb-toast\n ═══════════════════════════════════════ */\n\n/* ── Container ── */\n.tb-toast-container {\n position: fixed;\n z-index: var(--tb-z-toast);\n display: flex;\n flex-direction: column;\n gap: var(--tb-sp-3);\n pointer-events: none;\n}\n\n.tb-toast-container--top-right {\n top: var(--tb-sp-8);\n right: var(--tb-sp-8);\n align-items: flex-end;\n}\n\n.tb-toast-container--top-center {\n top: var(--tb-sp-8);\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n.tb-toast-container--bottom-right {\n bottom: var(--tb-sp-8);\n right: var(--tb-sp-8);\n align-items: flex-end;\n}\n\n.tb-toast-container--bottom-center {\n bottom: var(--tb-sp-8);\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n/* ── Toast ── */\n.tb-toast {\n font-family: var(--tb-font);\n font-size: 0.55rem;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n padding: var(--tb-sp-3) var(--tb-sp-4);\n border: 1px solid;\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n pointer-events: auto;\n opacity: 0;\n transform: translateY(16px);\n transition: all var(--tb-duration-slow) var(--tb-ease-enter);\n}\n\n.tb-toast--show {\n opacity: 1;\n transform: translateY(0);\n animation: tb-toast-slide-in var(--tb-duration-slow) var(--tb-ease-enter);\n}\n\n/* ── Variants ── */\n.tb-toast--success {\n border-color: rgba(107, 207, 160, 0.3);\n background: var(--tb-success-dim);\n color: var(--tb-success);\n}\n\n.tb-toast--error {\n border-color: rgba(239, 107, 107, 0.3);\n background: var(--tb-error-dim);\n color: var(--tb-error);\n}\n\n.tb-toast--warning {\n border-color: rgba(232, 196, 104, 0.3);\n background: var(--tb-warning-dim);\n color: var(--tb-warning);\n}\n\n.tb-toast--info {\n border-color: rgba(167, 217, 239, 0.3);\n background: rgba(167, 217, 239, 0.08);\n color: var(--tb-primary);\n}\n\n.tb-toast--inverted {\n background: var(--tb-primary);\n color: var(--tb-bg);\n border-color: var(--tb-primary);\n}\n\n/* ── Parts ── */\n.tb-toast__icon {\n display: inline-flex;\n align-items: center;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.tb-toast__message {\n flex: 1;\n}\n\n.tb-toast__dismiss {\n display: inline-flex;\n align-items: center;\n background: none;\n border: none;\n color: inherit;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity var(--tb-duration-fast) var(--tb-ease-standard);\n padding: 0;\n margin-left: auto;\n}\n\n.tb-toast__dismiss:hover {\n opacity: 1;\n}\n\n/* ── Keyframes ── */\n@keyframes tb-toast-slide-in {\n from {\n opacity: 0;\n transform: translateY(16px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes tb-toast-slide-out {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-16px);\n }\n}\n","/* ═══════════════════════════════════════\n TOOLTIP — .tb-tooltip\n ═══════════════════════════════════════ */\n\n.tb-tooltip-wrap {\n position: relative;\n display: inline-block;\n}\n\n.tb-tooltip {\n position: absolute;\n background: var(--tb-bg-card);\n border: 1px solid var(--tb-line);\n font-size: 0.5rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n padding: var(--tb-sp-2) var(--tb-sp-3);\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition: opacity var(--tb-duration-fast) ease,\n transform var(--tb-duration-fast) ease,\n visibility var(--tb-duration-fast) ease;\n z-index: var(--tb-z-tooltip);\n}\n\n.tb-tooltip-wrap:hover .tb-tooltip,\n.tb-tooltip-wrap:focus-within .tb-tooltip {\n opacity: 1;\n visibility: visible;\n}\n\n/* ── Top (default) ── */\n.tb-tooltip--top {\n bottom: calc(100% + 10px);\n left: 50%;\n transform: translateX(-50%) translateY(4px);\n}\n\n.tb-tooltip-wrap:hover .tb-tooltip--top {\n transform: translateX(-50%) translateY(0);\n}\n\n.tb-tooltip--top::after {\n content: \"\";\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-top-color: var(--tb-line);\n}\n\n/* ── Bottom ── */\n.tb-tooltip--bottom {\n top: calc(100% + 10px);\n left: 50%;\n transform: translateX(-50%) translateY(-4px);\n}\n\n.tb-tooltip-wrap:hover .tb-tooltip--bottom {\n transform: translateX(-50%) translateY(0);\n}\n\n/* ── Left ── */\n.tb-tooltip--left {\n right: calc(100% + 10px);\n top: 50%;\n transform: translateY(-50%) translateX(4px);\n}\n\n.tb-tooltip-wrap:hover .tb-tooltip--left {\n transform: translateY(-50%) translateX(0);\n}\n\n/* ── Right ── */\n.tb-tooltip--right {\n left: calc(100% + 10px);\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n}\n\n.tb-tooltip-wrap:hover .tb-tooltip--right {\n transform: translateY(-50%) translateX(0);\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-tooltip {\n white-space: normal;\n max-width: min(300px, 90vw);\n }\n}\n","/* ═══════════════════════════════════════\n NAV DROPDOWN — .tb-nav-dropdown\n ═══════════════════════════════════════ */\n\n.tb-nav-item {\n position: relative;\n}\n\n.tb-nav-item__trigger {\n display: flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: none;\n padding: 0;\n font-family: inherit;\n cursor: pointer;\n font-size: 0.65rem;\n font-weight: 400;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n color: var(--tb-text-label);\n transition: color var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-nav-item--open .tb-nav-item__trigger {\n color: var(--tb-text-heading);\n}\n\n@media (hover: hover) {\n .tb-nav-item:hover .tb-nav-item__trigger {\n color: var(--tb-text-heading);\n }\n}\n\n.tb-nav-item__chevron {\n display: inline-block;\n width: 0;\n height: 0;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid currentColor;\n opacity: 0.5;\n transition: transform var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-nav-item--open .tb-nav-item__chevron {\n transform: rotate(180deg);\n}\n\n@media (hover: hover) {\n .tb-nav-item:hover .tb-nav-item__chevron {\n transform: rotate(180deg);\n }\n}\n\n.tb-nav-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 10px;\n transform: translateY(8px);\n background: var(--tb-bg-surface);\n border: 1px solid var(--tb-line);\n min-width: 220px;\n opacity: 0;\n pointer-events: none;\n transition: all var(--tb-duration-normal) var(--tb-ease-standard);\n z-index: var(--tb-z-dropdown);\n padding-top: var(--tb-sp-2);\n}\n\n/* Alignment variants */\n.tb-nav-item--align-center .tb-nav-dropdown {\n left: 50%;\n transform: translateX(-50%) translateY(8px);\n}\n\n.tb-nav-item--align-right .tb-nav-dropdown {\n left: auto;\n right: 0;\n}\n\n/* Invisible bridge so hover doesn't break crossing the gap */\n.tb-nav-dropdown::before {\n content: '';\n position: absolute;\n top: calc(-10px - var(--tb-sp-2));\n left: 0;\n right: 0;\n height: calc(10px + var(--tb-sp-2));\n}\n\n.tb-nav-dropdown--open {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n.tb-nav-item--align-center .tb-nav-dropdown--open {\n transform: translateX(-50%) translateY(0);\n}\n\n@media (hover: hover) {\n .tb-nav-item:hover .tb-nav-dropdown {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n }\n\n .tb-nav-item--align-center:hover .tb-nav-dropdown {\n transform: translateX(-50%) translateY(0);\n }\n}\n\n.tb-nav-dropdown__item {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n padding: var(--tb-sp-3) var(--tb-sp-4);\n font-size: 0.6rem;\n font-weight: 400;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n text-decoration: none;\n color: var(--tb-text-label);\n border-left: 3px solid transparent;\n transition: all var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-nav-dropdown__item:hover {\n background: rgba(167, 217, 239, 0.05);\n border-left-color: var(--tb-primary);\n color: var(--tb-text-heading);\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-nav-dropdown {\n min-width: min(220px, 90vw);\n }\n}\n","/* ═══════════════════════════════════════\n CHECKBOX — .tb-checkbox\n ═══════════════════════════════════════ */\n\n.tb-checkbox {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n cursor: pointer;\n font-size: 0.6rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: var(--tb-text-body);\n}\n\n.tb-checkbox input {\n appearance: none;\n -webkit-appearance: none;\n width: 18px;\n height: 18px;\n border: 1px solid var(--tb-line-bright);\n background: var(--tb-bg-input);\n cursor: pointer;\n position: relative;\n transition: all var(--tb-duration-fast) var(--tb-ease-standard);\n flex-shrink: 0;\n}\n\n.tb-checkbox input:checked {\n border-color: var(--tb-primary);\n background: var(--tb-primary);\n}\n\n.tb-checkbox input:checked::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 5px;\n width: 5px;\n height: 9px;\n border: 2px solid var(--tb-bg);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n}\n\n.tb-checkbox input:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n border-color: var(--tb-error);\n background: transparent;\n}\n\n.tb-checkbox input:disabled::before {\n content: \"\";\n position: absolute;\n top: 3px;\n left: 3px;\n width: 10px;\n height: 10px;\n background: linear-gradient(\n 45deg,\n transparent 42%,\n var(--tb-error) 42%,\n var(--tb-error) 58%,\n transparent 58%\n ),\n linear-gradient(\n -45deg,\n transparent 42%,\n var(--tb-error) 42%,\n var(--tb-error) 58%,\n transparent 58%\n );\n}\n\n.tb-checkbox input:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n/* ── Error ── */\n.tb-checkbox--error input {\n border-color: var(--tb-error);\n}\n","/* ═══════════════════════════════════════\n TOGGLE — .tb-toggle\n ═══════════════════════════════════════ */\n\n.tb-toggle {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n cursor: pointer;\n font-size: 0.6rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: var(--tb-text-body);\n}\n\n.tb-toggle__input {\n display: none;\n}\n\n.tb-toggle__track {\n width: 40px;\n height: 20px;\n border: 1px solid var(--tb-line-bright);\n background: var(--tb-bg-input);\n position: relative;\n transition: all var(--tb-duration-fast) var(--tb-ease-standard);\n flex-shrink: 0;\n}\n\n/* Thumb — works as a child element OR as ::after on the track */\n.tb-toggle__thumb,\n.tb-toggle__track::after {\n content: \"\";\n position: absolute;\n top: 3px;\n left: 3px;\n width: 12px;\n height: 12px;\n background: var(--tb-primary);\n opacity: 0.4;\n transition: left var(--tb-duration-fast) var(--tb-ease-standard),\n opacity var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n/* Hide ::after when a real .tb-toggle__thumb exists */\n.tb-toggle__track:has(.tb-toggle__thumb)::after {\n display: none;\n}\n\n.tb-toggle__input:checked + .tb-toggle__track {\n border-color: var(--tb-primary);\n background: rgba(167, 217, 239, 0.1);\n}\n\n.tb-toggle__input:checked + .tb-toggle__track .tb-toggle__thumb,\n.tb-toggle__input:checked + .tb-toggle__track::after {\n left: 23px;\n opacity: 1;\n}\n\n.tb-toggle__label {\n font-size: 0.6rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: var(--tb-text-body);\n}\n\n/* ── Focus-visible ── */\n.tb-toggle__input:focus-visible + .tb-toggle__track {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n/* ── Disabled ── */\n.tb-toggle--disabled {\n opacity: 0.25;\n cursor: not-allowed;\n pointer-events: none;\n}\n","/* ═══════════════════════════════════════\n RADIO — .tb-radio\n ═══════════════════════════════════════ */\n\n.tb-radio-group {\n display: flex;\n flex-direction: column;\n gap: var(--tb-sp-3);\n}\n\n.tb-radio-group--horizontal {\n flex-direction: row;\n}\n\n.tb-radio {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n cursor: pointer;\n font-size: 0.6rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: var(--tb-text-body);\n}\n\n.tb-radio input {\n appearance: none;\n -webkit-appearance: none;\n width: 18px;\n height: 18px;\n border: 1px solid var(--tb-line-bright);\n border-radius: 50%;\n background: var(--tb-bg-input);\n cursor: pointer;\n position: relative;\n transition: all var(--tb-duration-fast) var(--tb-ease-standard);\n flex-shrink: 0;\n}\n\n.tb-radio input:checked {\n border-color: var(--tb-primary);\n}\n\n.tb-radio input:checked::after {\n content: \"\";\n position: absolute;\n top: 4px;\n left: 4px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--tb-primary);\n}\n\n.tb-radio input:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n.tb-radio input:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n","/* ═══════════════════════════════════════\n PROGRESS — .tb-progress\n ═══════════════════════════════════════ */\n\n.tb-progress {\n margin-bottom: var(--tb-sp-4);\n}\n\n.tb-progress__header {\n display: flex;\n justify-content: space-between;\n margin-bottom: var(--tb-sp-2);\n}\n\n.tb-progress__label {\n font-size: 0.5rem;\n letter-spacing: 0.3em;\n text-transform: uppercase;\n color: var(--tb-text-label);\n}\n\n.tb-progress__value {\n font-size: 0.5rem;\n letter-spacing: 0.3em;\n text-transform: uppercase;\n color: var(--tb-text-label);\n}\n\n.tb-progress__track {\n height: 4px;\n background: var(--tb-line);\n position: relative;\n overflow: hidden;\n}\n\n.tb-progress__fill {\n height: 100%;\n background: var(--tb-primary);\n transition: width var(--tb-duration-slow) var(--tb-ease-standard);\n position: relative;\n overflow: hidden;\n}\n\n/* ── Animated shimmer ── */\n.tb-progress__fill--animated::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n rgba(255, 255, 255, 0.25) 50%,\n transparent 100%\n );\n background-size: 200% 100%;\n animation: tb-progress-shimmer 2s ease-in-out infinite;\n}\n\n/* ── Color variants ── */\n.tb-progress__fill--success {\n background: var(--tb-success);\n}\n\n.tb-progress__fill--warning {\n background: var(--tb-warning);\n}\n\n.tb-progress__fill--error {\n background: var(--tb-error);\n}\n\n/* ── Indeterminate ── */\n.tb-progress--indeterminate .tb-progress__fill {\n width: 30%;\n animation: tb-progress-indeterminate 1.5s var(--tb-ease-standard) infinite;\n}\n\n/* ── Keyframes ── */\n@keyframes tb-progress-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n@keyframes tb-progress-indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n}\n","/* ═══════════════════════════════════════\n BATTERY — .tb-battery\n ═══════════════════════════════════════ */\n\n/* ── Vertical variant (default) ── */\n.tb-battery {\n display: flex;\n flex-direction: column;\n width: 48px;\n}\n\n.tb-battery__track {\n border: 1px solid var(--tb-line);\n padding: 3px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tb-battery__segment {\n flex: 1;\n background: rgba(167, 217, 239, 0.08);\n transition: background var(--tb-duration-normal) var(--tb-ease-standard);\n}\n\n.tb-battery__segment--filled {\n background: var(--tb-primary);\n opacity: 0.7;\n}\n\n/* ── Segment color variants ── */\n.tb-battery__segment--filled.tb-battery__segment--success {\n background: var(--tb-success);\n}\n\n.tb-battery__segment--filled.tb-battery__segment--warning {\n background: var(--tb-warning);\n}\n\n.tb-battery__segment--filled.tb-battery__segment--error {\n background: var(--tb-error);\n}\n\n.tb-battery__cap {\n width: 10px;\n height: 6px;\n border: 1px solid var(--tb-line);\n align-self: center;\n margin-top: -1px;\n}\n\n.tb-battery__label {\n font-size: 0.6rem;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n color: var(--tb-text-label);\n}\n\n.tb-battery__value {\n font-size: 0.6rem;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n color: var(--tb-text-label);\n}\n\n/* ── Inline / horizontal variant ── */\n.tb-battery--inline {\n flex-direction: row;\n align-items: center;\n gap: var(--tb-sp-3);\n width: auto;\n}\n\n.tb-battery--inline .tb-battery__track {\n flex: 1;\n height: 20px;\n flex-direction: row;\n}\n\n.tb-battery--inline .tb-battery__cap {\n width: 6px;\n height: 10px;\n margin-top: 0;\n margin-left: -1px;\n}\n\n.tb-battery--inline .tb-battery__label {\n min-width: 100px;\n}\n\n.tb-battery--inline .tb-battery__value {\n min-width: 40px;\n text-align: right;\n}\n\n/* ── Animated ── */\n.tb-battery--animated .tb-battery__segment--filled {\n animation: tb-battery-fill 3s ease-in-out infinite;\n}\n\n.tb-battery--animated .tb-battery__segment--filled:nth-child(1) { animation-delay: 0s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(2) { animation-delay: 0.1s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(3) { animation-delay: 0.2s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(4) { animation-delay: 0.3s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(5) { animation-delay: 0.4s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(6) { animation-delay: 0.5s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(7) { animation-delay: 0.6s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(8) { animation-delay: 0.7s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(9) { animation-delay: 0.8s; }\n.tb-battery--animated .tb-battery__segment--filled:nth-child(10) { animation-delay: 0.9s; }\n\n/* ── Keyframes ── */\n@keyframes tb-battery-fill {\n 0%, 5% { opacity: 0; transform: scaleY(0); }\n 15%, 85% { opacity: 0.8; transform: scaleY(1); }\n 95%, 100% { opacity: 0; }\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-battery--inline .tb-battery__label {\n min-width: 60px;\n }\n}\n","/* ═══════════════════════════════════════\n TABLE — .tb-table\n ═══════════════════════════════════════ */\n\n.tb-table__wrapper {\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tb-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.6rem;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n}\n\n.tb-table th {\n text-align: left;\n font-size: 0.5rem;\n letter-spacing: 0.35em;\n padding: var(--tb-sp-3) var(--tb-sp-4);\n border-bottom: 1px solid var(--tb-line-bright);\n color: var(--tb-text-heading);\n font-weight: 500;\n}\n\n.tb-table td {\n padding: var(--tb-sp-3) var(--tb-sp-4);\n border-bottom: 1px solid var(--tb-line);\n color: var(--tb-text-body);\n}\n\n.tb-table tbody tr {\n transition: background var(--tb-duration-fast) ease;\n}\n\n.tb-table tr:hover td {\n opacity: 1;\n background: rgba(167, 217, 239, 0.03);\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-table {\n font-size: 0.55rem;\n letter-spacing: 0.08em;\n }\n}\n","/* ═══════════════════════════════════════\n SKELETON — .tb-skeleton\n ═══════════════════════════════════════ */\n\n.tb-skeleton {\n background: linear-gradient(\n 90deg,\n var(--tb-line) 25%,\n rgba(167, 217, 239, 0.08) 50%,\n var(--tb-line) 75%\n );\n background-size: 200% 100%;\n animation: tb-shimmer 1.5s infinite;\n}\n\n/* ── Shape variants ── */\n.tb-skeleton--text {\n height: 12px;\n margin-bottom: var(--tb-sp-2);\n}\n\n.tb-skeleton--heading {\n height: 20px;\n margin-bottom: var(--tb-sp-4);\n}\n\n.tb-skeleton--avatar {\n width: 40px;\n height: 40px;\n}\n\n.tb-skeleton--card {\n height: 200px;\n width: 100%;\n border: 1px solid var(--tb-line);\n padding: var(--tb-sp-6);\n display: flex;\n flex-direction: column;\n gap: var(--tb-sp-3);\n}\n\n/* ── Width utilities ── */\n.tb-skeleton--w-40 { width: 40%; }\n.tb-skeleton--w-60 { width: 60%; }\n.tb-skeleton--w-80 { width: 80%; }\n.tb-skeleton--w-100 { width: 100%; }\n\n/* ── Keyframes ── */\n@keyframes tb-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n","/* ═══════════════════════════════════════\n SPINNERS — .tb-spinner\n ═══════════════════════════════════════ */\n\n/* ── Base ── */\n.tb-spinner {\n position: relative;\n display: inline-block;\n width: 24px;\n height: 24px;\n}\n\n/* ── Size variants ── */\n.tb-spinner--sm {\n width: 16px;\n height: 16px;\n}\n\n.tb-spinner--md {\n width: 24px;\n height: 24px;\n}\n\n.tb-spinner--lg {\n width: 40px;\n height: 40px;\n}\n\n/* ── Multi-square spinner ── */\n.tb-spinner--multi-square .tb-spinner__square {\n position: absolute;\n inset: 0;\n border: 1.5px solid var(--tb-primary);\n}\n\n.tb-spinner--multi-square .tb-spinner__square:nth-child(1) {\n animation: tb-spin-cw 4s linear infinite;\n}\n\n.tb-spinner--multi-square .tb-spinner__square:nth-child(2) {\n opacity: 0.75;\n animation: tb-spin-ccw 2.8s linear infinite;\n}\n\n.tb-spinner--multi-square .tb-spinner__square:nth-child(3) {\n opacity: 0.55;\n animation: tb-spin-cw 1.9s linear infinite;\n}\n\n.tb-spinner--multi-square .tb-spinner__square:nth-child(4) {\n opacity: 0.35;\n animation: tb-spin-ccw 5.5s linear infinite;\n}\n\n.tb-spinner--multi-square .tb-spinner__square:nth-child(5) {\n opacity: 0.2;\n animation: tb-spin-cw 3.3s linear infinite;\n}\n\n/* ── Bracket spinner ──\n Two pseudo-elements form └ and ┐ bracket halves.\n Container rotates; pieces split and rejoin. */\n\n.tb-spinner--bracket {\n animation: tb-bracket-rotate 6s ease-in-out infinite;\n}\n\n.tb-spinner--bracket::before,\n.tb-spinner--bracket::after {\n content: \"\";\n position: absolute;\n inset: 0;\n}\n\n/* └ piece — bottom + left borders */\n.tb-spinner--bracket::before {\n border-bottom: 2px solid var(--tb-primary);\n border-left: 2px solid var(--tb-primary);\n animation: tb-bracket-split-a 6s ease-in-out infinite;\n}\n\n/* ┐ piece — top + right borders */\n.tb-spinner--bracket::after {\n border-top: 2px solid var(--tb-primary);\n border-right: 2px solid var(--tb-primary);\n animation: tb-bracket-split-b 6s ease-in-out infinite;\n}\n\n/* Size overrides for bracket border width */\n.tb-spinner--sm.tb-spinner--bracket::before,\n.tb-spinner--sm.tb-spinner--bracket::after {\n border-width: 1.5px;\n}\n\n.tb-spinner--lg.tb-spinner--bracket::before,\n.tb-spinner--lg.tb-spinner--bracket::after {\n border-width: 3px;\n}\n\n/* ── Bracket keyframes ── */\n@keyframes tb-bracket-rotate {\n 0%, 10% { transform: rotate(0deg); }\n 15%, 35% { transform: rotate(45deg); }\n 40%, 60% { transform: rotate(90deg); }\n 65%, 85% { transform: rotate(135deg); }\n 90%, 100% { transform: rotate(180deg); }\n}\n\n@keyframes tb-bracket-split-a {\n 0%, 5% { transform: translate(0, 0); }\n 10%, 15% { transform: translate(-5px, 5px); }\n 20%, 30% { transform: translate(0, 0); }\n 35%, 40% { transform: translate(-5px, 5px); }\n 45%, 55% { transform: translate(0, 0); }\n 60%, 65% { transform: translate(-5px, 5px); }\n 70%, 80% { transform: translate(0, 0); }\n 85%, 90% { transform: translate(-5px, 5px); }\n 95%, 100% { transform: translate(0, 0); }\n}\n\n@keyframes tb-bracket-split-b {\n 0%, 5% { transform: translate(0, 0); }\n 10%, 15% { transform: translate(5px, -5px); }\n 20%, 30% { transform: translate(0, 0); }\n 35%, 40% { transform: translate(5px, -5px); }\n 45%, 55% { transform: translate(0, 0); }\n 60%, 65% { transform: translate(5px, -5px); }\n 70%, 80% { transform: translate(0, 0); }\n 85%, 90% { transform: translate(5px, -5px); }\n 95%, 100% { transform: translate(0, 0); }\n}\n","/* ═══════════════════════════════════════\n PAGINATION — .tb-pagination\n ═══════════════════════════════════════ */\n\n.tb-pagination {\n display: flex;\n gap: var(--tb-sp-2);\n align-items: center;\n}\n\n.tb-pagination__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--tb-line);\n background: transparent;\n color: var(--tb-primary);\n font-family: var(--tb-font);\n font-size: 0.6rem;\n letter-spacing: 0.1em;\n cursor: pointer;\n transition: all var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-pagination__btn:hover {\n border-color: var(--tb-primary);\n color: #fff;\n text-shadow: 0 0 15px var(--tb-glow);\n}\n\n/* ── Focus-visible ── */\n.tb-pagination__btn:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: 2px;\n}\n\n.tb-pagination__btn--active {\n background: var(--tb-primary);\n border-color: var(--tb-primary);\n color: var(--tb-bg);\n}\n\n.tb-pagination__btn--active:hover {\n background: var(--tb-primary);\n color: var(--tb-bg);\n text-shadow: none;\n}\n\n.tb-pagination__btn--disabled {\n opacity: 0.25;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.tb-pagination__ellipsis {\n font-size: 0.6rem;\n letter-spacing: 0.2em;\n opacity: 0.4;\n padding: 0 var(--tb-sp-1);\n}\n","/* ═══════════════════════════════════════\n BREADCRUMBS — .tb-breadcrumbs\n ═══════════════════════════════════════ */\n\n.tb-breadcrumbs {\n font-size: 0.55rem;\n letter-spacing: 0.3em;\n padding: var(--tb-sp-3) 0;\n}\n\n.tb-breadcrumbs__list {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n.tb-breadcrumbs__item {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n}\n\n.tb-breadcrumbs__separator {\n opacity: 0.2;\n}\n\n.tb-breadcrumbs__link {\n color: var(--tb-text-label);\n transition: color var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-breadcrumbs__link:hover {\n color: var(--tb-text-body);\n}\n\n.tb-breadcrumbs__current {\n color: var(--tb-text-heading);\n}\n","/* ═══════════════════════════════════════\n TOOLBAR — .tb-toolbar\n Floating control bar with glass effect\n ═══════════════════════════════════════ */\n\n.tb-toolbar {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-3);\n background: var(--tb-bg-card);\n border: 1px solid var(--tb-line-bright);\n padding: var(--tb-sp-2) var(--tb-sp-3);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n font-family: var(--tb-font);\n color: var(--tb-primary);\n}\n\n/* ── Fixed positions ── */\n.tb-toolbar--fixed {\n position: fixed;\n z-index: calc(var(--tb-z-toast) + 10);\n}\n.tb-toolbar--bottom-right {\n bottom: var(--tb-sp-6);\n right: var(--tb-sp-6);\n}\n.tb-toolbar--bottom-left {\n bottom: var(--tb-sp-6);\n left: var(--tb-sp-6);\n}\n.tb-toolbar--top-right {\n top: var(--tb-sp-6);\n right: var(--tb-sp-6);\n}\n.tb-toolbar--top-left {\n top: var(--tb-sp-6);\n left: var(--tb-sp-6);\n}\n\n/* ── Label ── */\n.tb-toolbar__label {\n font-size: 0.5rem;\n letter-spacing: 0.3em;\n text-transform: uppercase;\n color: var(--tb-text-muted);\n white-space: nowrap;\n}\n\n/* ── Divider ── */\n.tb-toolbar__divider {\n width: 1px;\n height: 16px;\n background: var(--tb-line);\n flex-shrink: 0;\n}\n\n/* ── Select (dropdown inside toolbar) ── */\n.tb-toolbar__select {\n position: relative;\n display: inline-block;\n}\n\n.tb-toolbar__trigger {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n height: 32px;\n padding: 0 var(--tb-sp-3);\n background: var(--tb-bg-surface);\n border: 1px solid var(--tb-line);\n color: var(--tb-primary);\n font-family: var(--tb-font);\n font-size: 0.6rem;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n cursor: pointer;\n white-space: nowrap;\n transition: border-color var(--tb-duration-fast) ease;\n min-width: 160px;\n justify-content: space-between;\n}\n\n.tb-toolbar__trigger:hover {\n border-color: var(--tb-line-bright);\n}\n\n.tb-toolbar__chevron {\n display: inline-block;\n width: 0;\n height: 0;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid currentColor;\n opacity: 0.5;\n transition: transform var(--tb-duration-fast) ease;\n flex-shrink: 0;\n}\n\n.tb-toolbar__select--open .tb-toolbar__chevron {\n transform: rotate(180deg);\n}\n\n/* ── Dropdown ── */\n.tb-toolbar__dropdown {\n position: absolute;\n bottom: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--tb-bg-surface);\n border: 1px solid var(--tb-line);\n z-index: 10;\n opacity: 0;\n visibility: hidden;\n transform: translateY(4px);\n transition: opacity var(--tb-duration-fast) ease,\n visibility var(--tb-duration-fast) ease,\n transform var(--tb-duration-fast) ease;\n max-height: 280px;\n overflow-y: auto;\n}\n\n.tb-toolbar__select--open .tb-toolbar__dropdown {\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n}\n\n/* Drop-up vs drop-down */\n.tb-toolbar__dropdown--down {\n bottom: auto;\n top: calc(100% + 4px);\n transform: translateY(-4px);\n}\n.tb-toolbar__select--open .tb-toolbar__dropdown--down {\n transform: translateY(0);\n}\n\n/* ── Options ── */\n.tb-toolbar__option {\n padding: var(--tb-sp-2) var(--tb-sp-3);\n font-size: 0.6rem;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n cursor: pointer;\n color: var(--tb-text-label);\n border-left: 2px solid transparent;\n transition: all var(--tb-duration-fast) ease;\n white-space: nowrap;\n}\n\n.tb-toolbar__option:hover {\n color: var(--tb-primary);\n background: rgba(167, 217, 239, 0.05);\n border-left-color: var(--tb-primary);\n}\n\n.tb-toolbar__option--active {\n color: var(--tb-primary);\n border-left-color: var(--tb-primary);\n}\n\n.tb-toolbar__option-meta {\n display: block;\n font-size: 0.45rem;\n color: var(--tb-text-muted);\n letter-spacing: 0.15em;\n margin-top: 2px;\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n .tb-toolbar__trigger {\n min-width: 100px;\n }\n .tb-toolbar__label {\n letter-spacing: 0.15em;\n }\n}\n","/* ═══════════════════════════════════════\n SIDENAV — .tb-sidenav\n ═══════════════════════════════════════ */\n\n.tb-sidenav {\n display: flex;\n flex-direction: column;\n}\n\n.tb-sidenav__item {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n width: 100%;\n padding: var(--tb-sp-2) var(--tb-sp-6);\n color: var(--tb-text-label);\n text-decoration: none;\n font-family: var(--tb-font);\n font-size: 0.6rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n font-weight: 400;\n background: none;\n border: none;\n border-left: 2px solid transparent;\n cursor: pointer;\n transition: color var(--tb-duration-fast) ease,\n background var(--tb-duration-fast) ease,\n border-color var(--tb-duration-fast) ease;\n}\n\n.tb-sidenav__item:hover {\n color: var(--tb-text-body);\n background: rgba(167, 217, 239, 0.03);\n}\n\n.tb-sidenav .tb-sidenav__item--active {\n color: var(--tb-text-heading);\n border-left-color: var(--tb-primary);\n background: rgba(167, 217, 239, 0.05);\n}\n\n/* ── Icon ── */\n.tb-sidenav__icon {\n display: inline-flex;\n align-items: center;\n font-size: 16px;\n opacity: 0.6;\n flex-shrink: 0;\n}\n\n.tb-sidenav__item--active .tb-sidenav__icon {\n opacity: 0.9;\n}\n\n/* ── Icon on right ── */\n.tb-sidenav--icon-right .tb-sidenav__icon {\n order: 1;\n}\n\n/* ── Border on right side instead of left ── */\n.tb-sidenav--border-right .tb-sidenav__item {\n border-left: none;\n border-right: 2px solid transparent;\n}\n\n.tb-sidenav--border-right .tb-sidenav__item--active {\n border-right-color: var(--tb-primary);\n}\n\n/* ═══════════════════════════════════════\n COLLAPSIBLE GROUP — .tb-sidenav__group\n ═══════════════════════════════════════ */\n\n.tb-sidenav__group-trigger {\n display: flex;\n align-items: center;\n gap: var(--tb-sp-2);\n width: 100%;\n padding: var(--tb-sp-2) var(--tb-sp-6);\n color: var(--tb-text-label);\n font-family: var(--tb-font);\n font-size: 0.6rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n font-weight: 400;\n background: none;\n border: none;\n border-left: 2px solid transparent;\n cursor: pointer;\n transition: color var(--tb-duration-fast) ease,\n background var(--tb-duration-fast) ease;\n}\n\n.tb-sidenav__group-trigger:hover {\n color: var(--tb-text-body);\n background: rgba(167, 217, 239, 0.03);\n}\n\n.tb-sidenav__group-chevron {\n display: inline-flex;\n align-items: center;\n font-size: 16px;\n opacity: 0.4;\n margin-left: auto;\n transition: transform var(--tb-duration-fast) var(--tb-ease-standard);\n}\n\n.tb-sidenav__group--open > .tb-sidenav__group-trigger .tb-sidenav__group-chevron {\n transform: rotate(180deg);\n}\n\n.tb-sidenav__group-content {\n display: none;\n}\n\n.tb-sidenav__group--open > .tb-sidenav__group-content {\n display: flex;\n flex-direction: column;\n}\n\n/* Nested items get extra left padding */\n.tb-sidenav__group-content .tb-sidenav__item {\n padding-left: var(--tb-sp-10);\n}\n\n/* ── Focus-visible ── */\n.tb-sidenav__item:focus-visible,\n.tb-sidenav__group-trigger:focus-visible {\n outline: 2px solid var(--tb-primary);\n outline-offset: -2px;\n}\n","/* ═══════════════════════════════════════\n CODE BLOCK — .tb-code-block\n ═══════════════════════════════════════ */\n\n.tb-code-block {\n position: relative;\n background: var(--tb-bg);\n border: 1px solid var(--tb-line);\n padding: var(--tb-sp-4);\n font-family: \"JetBrains Mono\", monospace;\n font-size: 0.65rem;\n letter-spacing: 0.05em;\n line-height: 1.8;\n color: var(--tb-text-label);\n text-transform: none;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tb-code-block__copy {\n position: absolute;\n top: var(--tb-sp-2);\n right: var(--tb-sp-2);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--tb-bg-surface);\n border: 1px solid var(--tb-line);\n color: var(--tb-text-muted);\n cursor: pointer;\n opacity: 0;\n transition: opacity var(--tb-duration-fast) ease,\n color var(--tb-duration-fast) ease,\n border-color var(--tb-duration-fast) ease;\n}\n\n.tb-code-block:hover .tb-code-block__copy {\n opacity: 1;\n}\n\n.tb-code-block__copy:hover {\n color: var(--tb-text-heading);\n border-color: var(--tb-line-bright);\n}\n\n.tb-code-block__copy--copied {\n color: var(--tb-success);\n opacity: 1;\n}\n\n.tb-code-block .prompt { color: var(--tb-success); }\n.tb-code-block .key { color: var(--tb-warning); }\n.tb-code-block .string { color: var(--tb-primary); }\n.tb-code-block .comment { color: var(--tb-text-muted); }\n"],"mappings":"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","names":[]}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * TBSelect — Custom select dropdown component
3
+ *
4
+ * Expected markup:
5
+ * <div data-tb-select>
6
+ * <button class="tb-select__trigger"><span>Placeholder</span></button>
7
+ * <div class="tb-select__dropdown">
8
+ * <div class="tb-select__option" data-value="a">Option A</div>
9
+ * <div class="tb-select__option" data-value="b">Option B</div>
10
+ * </div>
11
+ * </div>
12
+ */
13
+ interface TBSelectOptions {
14
+ onChange?: (value: string) => void;
15
+ }
16
+ declare class TBSelect {
17
+ private root;
18
+ private trigger;
19
+ private dropdown;
20
+ private options;
21
+ private value;
22
+ private onChange?;
23
+ private focusedIndex;
24
+ private handleTriggerClick;
25
+ private handleDocumentClick;
26
+ private handleKeyDown;
27
+ private handleOptionClick;
28
+ constructor(el: HTMLElement, options?: TBSelectOptions);
29
+ getValue(): string;
30
+ setValue(value: string): void;
31
+ destroy(): void;
32
+ private isOpen;
33
+ private openDropdown;
34
+ private closeDropdown;
35
+ private toggle;
36
+ private moveFocus;
37
+ private selectOption;
38
+ }
39
+ /** Auto-initialise all elements with `[data-tb-select]`. */
40
+ declare function initSelects(): TBSelect[];
41
+
42
+ /**
43
+ * TBModal — Modal dialog component
44
+ *
45
+ * Expected markup:
46
+ * <div class="tb-modal-overlay" data-tb-modal>
47
+ * <div class="tb-modal">
48
+ * <button class="tb-modal__close" data-tb-modal-close></button>
49
+ * <!-- content -->
50
+ * </div>
51
+ * </div>
52
+ *
53
+ * Triggers (anywhere in the page):
54
+ * <button data-tb-modal-open="modal-id">Open</button>
55
+ */
56
+ interface TBModalOptions {
57
+ closeOnEscape?: boolean;
58
+ closeOnBackdrop?: boolean;
59
+ }
60
+ declare class TBModal {
61
+ private overlay;
62
+ private closeBtns;
63
+ private previousFocus;
64
+ private closeOnEscape;
65
+ private closeOnBackdrop;
66
+ private handleKeyDown;
67
+ private handleOverlayClick;
68
+ private handleCloseClick;
69
+ constructor(el: HTMLElement, options?: TBModalOptions);
70
+ open(): void;
71
+ close(): void;
72
+ destroy(): void;
73
+ private isOpen;
74
+ private trapFocus;
75
+ }
76
+ /** Auto-initialise all elements with `[data-tb-modal]`. */
77
+ declare function initModals(): TBModal[];
78
+
79
+ /**
80
+ * TBTabs — Tab switching component
81
+ *
82
+ * Expected markup:
83
+ * <div class="tb-tabs" data-tb-tabs>
84
+ * <div class="tb-tabs__list">
85
+ * <button class="tb-tabs__trigger tb-tabs__trigger--active" data-value="one">One</button>
86
+ * <button class="tb-tabs__trigger" data-value="two">Two</button>
87
+ * </div>
88
+ * <div class="tb-tabs__content tb-tabs__content--active" data-value="one">...</div>
89
+ * <div class="tb-tabs__content" data-value="two">...</div>
90
+ * </div>
91
+ */
92
+ declare class TBTabs {
93
+ private root;
94
+ private triggers;
95
+ private contents;
96
+ private handleTriggerClick;
97
+ private handleKeyDown;
98
+ constructor(el: HTMLElement);
99
+ setTab(value: string): void;
100
+ destroy(): void;
101
+ }
102
+ /** Auto-initialise all elements with `[data-tb-tabs]`. */
103
+ declare function initTabs(): TBTabs[];
104
+
105
+ /**
106
+ * TBToast — Toast notification system
107
+ *
108
+ * Usage:
109
+ * import { toast, dismissToast, dismissAllToasts } from '@terminal-blueprint/core'
110
+ *
111
+ * toast({ title: 'Saved', type: 'success' })
112
+ * toast({ title: 'Oops', description: 'Something broke', type: 'error', duration: 5000 })
113
+ * toast({ title: 'Confirm?', duration: null, action: { label: 'Undo', onClick: () => {} } })
114
+ */
115
+ interface TBToastOptions {
116
+ title: string;
117
+ description?: string;
118
+ type?: 'success' | 'error' | 'warning' | 'info';
119
+ duration?: number | null;
120
+ action?: {
121
+ label: string;
122
+ onClick: () => void;
123
+ };
124
+ }
125
+ declare function toast(options: TBToastOptions): string;
126
+ declare function dismissToast(id: string): void;
127
+ declare function dismissAllToasts(): void;
128
+
129
+ /**
130
+ * TBSidenav — Collapsible sidenav groups
131
+ *
132
+ * Expected markup:
133
+ * <nav class="tb-sidenav">
134
+ * <div class="tb-sidenav__group">
135
+ * <button class="tb-sidenav__group-trigger">
136
+ * Label
137
+ * <span class="tb-sidenav__group-chevron material-symbols-outlined">expand_more</span>
138
+ * </button>
139
+ * <div class="tb-sidenav__group-content">
140
+ * <a class="tb-sidenav__item">Sub-item</a>
141
+ * </div>
142
+ * </div>
143
+ * </nav>
144
+ */
145
+ /** Wire up all `.tb-sidenav__group-trigger` buttons to toggle their parent group. */
146
+ declare function initSidenavs(): void;
147
+
148
+ declare const VERSION = "0.1.0";
149
+
150
+ export { TBModal, type TBModalOptions, TBSelect, type TBSelectOptions, TBTabs, type TBToastOptions, VERSION, dismissAllToasts, dismissToast, initModals, initSelects, initSidenavs, initTabs, toast };
@@ -0,0 +1,150 @@
1
+ /**
2
+ * TBSelect — Custom select dropdown component
3
+ *
4
+ * Expected markup:
5
+ * <div data-tb-select>
6
+ * <button class="tb-select__trigger"><span>Placeholder</span></button>
7
+ * <div class="tb-select__dropdown">
8
+ * <div class="tb-select__option" data-value="a">Option A</div>
9
+ * <div class="tb-select__option" data-value="b">Option B</div>
10
+ * </div>
11
+ * </div>
12
+ */
13
+ interface TBSelectOptions {
14
+ onChange?: (value: string) => void;
15
+ }
16
+ declare class TBSelect {
17
+ private root;
18
+ private trigger;
19
+ private dropdown;
20
+ private options;
21
+ private value;
22
+ private onChange?;
23
+ private focusedIndex;
24
+ private handleTriggerClick;
25
+ private handleDocumentClick;
26
+ private handleKeyDown;
27
+ private handleOptionClick;
28
+ constructor(el: HTMLElement, options?: TBSelectOptions);
29
+ getValue(): string;
30
+ setValue(value: string): void;
31
+ destroy(): void;
32
+ private isOpen;
33
+ private openDropdown;
34
+ private closeDropdown;
35
+ private toggle;
36
+ private moveFocus;
37
+ private selectOption;
38
+ }
39
+ /** Auto-initialise all elements with `[data-tb-select]`. */
40
+ declare function initSelects(): TBSelect[];
41
+
42
+ /**
43
+ * TBModal — Modal dialog component
44
+ *
45
+ * Expected markup:
46
+ * <div class="tb-modal-overlay" data-tb-modal>
47
+ * <div class="tb-modal">
48
+ * <button class="tb-modal__close" data-tb-modal-close></button>
49
+ * <!-- content -->
50
+ * </div>
51
+ * </div>
52
+ *
53
+ * Triggers (anywhere in the page):
54
+ * <button data-tb-modal-open="modal-id">Open</button>
55
+ */
56
+ interface TBModalOptions {
57
+ closeOnEscape?: boolean;
58
+ closeOnBackdrop?: boolean;
59
+ }
60
+ declare class TBModal {
61
+ private overlay;
62
+ private closeBtns;
63
+ private previousFocus;
64
+ private closeOnEscape;
65
+ private closeOnBackdrop;
66
+ private handleKeyDown;
67
+ private handleOverlayClick;
68
+ private handleCloseClick;
69
+ constructor(el: HTMLElement, options?: TBModalOptions);
70
+ open(): void;
71
+ close(): void;
72
+ destroy(): void;
73
+ private isOpen;
74
+ private trapFocus;
75
+ }
76
+ /** Auto-initialise all elements with `[data-tb-modal]`. */
77
+ declare function initModals(): TBModal[];
78
+
79
+ /**
80
+ * TBTabs — Tab switching component
81
+ *
82
+ * Expected markup:
83
+ * <div class="tb-tabs" data-tb-tabs>
84
+ * <div class="tb-tabs__list">
85
+ * <button class="tb-tabs__trigger tb-tabs__trigger--active" data-value="one">One</button>
86
+ * <button class="tb-tabs__trigger" data-value="two">Two</button>
87
+ * </div>
88
+ * <div class="tb-tabs__content tb-tabs__content--active" data-value="one">...</div>
89
+ * <div class="tb-tabs__content" data-value="two">...</div>
90
+ * </div>
91
+ */
92
+ declare class TBTabs {
93
+ private root;
94
+ private triggers;
95
+ private contents;
96
+ private handleTriggerClick;
97
+ private handleKeyDown;
98
+ constructor(el: HTMLElement);
99
+ setTab(value: string): void;
100
+ destroy(): void;
101
+ }
102
+ /** Auto-initialise all elements with `[data-tb-tabs]`. */
103
+ declare function initTabs(): TBTabs[];
104
+
105
+ /**
106
+ * TBToast — Toast notification system
107
+ *
108
+ * Usage:
109
+ * import { toast, dismissToast, dismissAllToasts } from '@terminal-blueprint/core'
110
+ *
111
+ * toast({ title: 'Saved', type: 'success' })
112
+ * toast({ title: 'Oops', description: 'Something broke', type: 'error', duration: 5000 })
113
+ * toast({ title: 'Confirm?', duration: null, action: { label: 'Undo', onClick: () => {} } })
114
+ */
115
+ interface TBToastOptions {
116
+ title: string;
117
+ description?: string;
118
+ type?: 'success' | 'error' | 'warning' | 'info';
119
+ duration?: number | null;
120
+ action?: {
121
+ label: string;
122
+ onClick: () => void;
123
+ };
124
+ }
125
+ declare function toast(options: TBToastOptions): string;
126
+ declare function dismissToast(id: string): void;
127
+ declare function dismissAllToasts(): void;
128
+
129
+ /**
130
+ * TBSidenav — Collapsible sidenav groups
131
+ *
132
+ * Expected markup:
133
+ * <nav class="tb-sidenav">
134
+ * <div class="tb-sidenav__group">
135
+ * <button class="tb-sidenav__group-trigger">
136
+ * Label
137
+ * <span class="tb-sidenav__group-chevron material-symbols-outlined">expand_more</span>
138
+ * </button>
139
+ * <div class="tb-sidenav__group-content">
140
+ * <a class="tb-sidenav__item">Sub-item</a>
141
+ * </div>
142
+ * </div>
143
+ * </nav>
144
+ */
145
+ /** Wire up all `.tb-sidenav__group-trigger` buttons to toggle their parent group. */
146
+ declare function initSidenavs(): void;
147
+
148
+ declare const VERSION = "0.1.0";
149
+
150
+ export { TBModal, type TBModalOptions, TBSelect, type TBSelectOptions, TBTabs, type TBToastOptions, VERSION, dismissAllToasts, dismissToast, initModals, initSelects, initSidenavs, initTabs, toast };