osi-cards-lib 1.5.13 → 1.5.14
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.
- package/fesm2022/osi-cards-lib.mjs +2020 -306
- package/fesm2022/osi-cards-lib.mjs.map +1 -1
- package/index.d.ts +1443 -1161
- package/package.json +1 -1
|
@@ -3,13 +3,14 @@ import { Input, ChangeDetectionStrategy, Component, EventEmitter, Output, inject
|
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
-
import { BehaviorSubject, Subject, filter, map, fromEvent, takeUntil, EMPTY, ReplaySubject, throwError, timer, merge, interval } from 'rxjs';
|
|
6
|
+
import { BehaviorSubject, Subject, filter, map, fromEvent, takeUntil, EMPTY, ReplaySubject, throwError, timer, merge, interval, catchError as catchError$1, of } from 'rxjs';
|
|
7
7
|
import { tap, filter as filter$1, catchError, shareReplay, retryWhen, mergeMap, map as map$1, distinctUntilChanged, takeUntil as takeUntil$1 } from 'rxjs/operators';
|
|
8
8
|
import { __decorate } from 'tslib';
|
|
9
9
|
import * as i1$1 from '@angular/platform-browser';
|
|
10
10
|
import * as i2 from 'lucide-angular';
|
|
11
11
|
import { Zap, XCircle, Wrench, Type, Video, User, UserCheck, Users, Twitter, Trophy, TrendingUp, TrendingDown, Timer, Target, Star, Tag, Sparkles, Shield, Settings, Save, ShoppingCart, Share2, RefreshCw, Radio, Quote, Play, PieChart, Phone, Package, Minus, Minimize2, MessageCircle, Maximize2, MapPin, Mail, List, Lightbulb, Linkedin, Layers, Instagram, Info, HelpCircle, Hash, Handshake, Grid, GitBranch, Globe, Gauge, Folder, FileText, Download, DollarSign, Facebook, ExternalLink, Calculator, Code2, Clock, Circle, ChevronRight, Check, CheckCircle2, CalendarX, CalendarPlus, CalendarCheck, Calendar, Building, Briefcase, Brain, BookOpen, BarChart3, Box, Award, ArrowUp, ArrowDown, ArrowRight, AlertCircle, Activity, LucideAngularModule, LucideIconProvider, LUCIDE_ICONS } from 'lucide-angular';
|
|
12
12
|
import { AnimationBuilder, trigger, transition, style, animate } from '@angular/animations';
|
|
13
|
+
import { HttpClient } from '@angular/common/http';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* OSI Cards Branded Types
|
|
@@ -1279,7 +1280,7 @@ const GRID_CONFIG = {
|
|
|
1279
1280
|
/** Default column count */
|
|
1280
1281
|
DEFAULT_COLUMNS: 3,
|
|
1281
1282
|
/** Minimum column width in pixels */
|
|
1282
|
-
MIN_COLUMN_WIDTH:
|
|
1283
|
+
MIN_COLUMN_WIDTH: 220,
|
|
1283
1284
|
/** Maximum column width in pixels */
|
|
1284
1285
|
MAX_COLUMN_WIDTH: 500,
|
|
1285
1286
|
/** Default column width in pixels */
|
|
@@ -3427,6 +3428,7 @@ class BaseSectionComponent {
|
|
|
3427
3428
|
constructor() {
|
|
3428
3429
|
this.fieldInteraction = new EventEmitter();
|
|
3429
3430
|
this.itemInteraction = new EventEmitter();
|
|
3431
|
+
this.layoutSuggestion = new EventEmitter();
|
|
3430
3432
|
this.cdr = inject(ChangeDetectorRef);
|
|
3431
3433
|
// Animation state tracking
|
|
3432
3434
|
this.fieldAnimationStates = new Map();
|
|
@@ -3750,8 +3752,87 @@ class BaseSectionComponent {
|
|
|
3750
3752
|
get hasDesignParams() {
|
|
3751
3753
|
return !!this.getDesignParams();
|
|
3752
3754
|
}
|
|
3755
|
+
// ============================================================================
|
|
3756
|
+
// LAYOUT PREFERENCES (Dynamic Section Responsive Layout System)
|
|
3757
|
+
// ============================================================================
|
|
3758
|
+
/**
|
|
3759
|
+
* Get layout preferences for this section.
|
|
3760
|
+
* Each section component should override this method to define its own
|
|
3761
|
+
* responsive behavior based on content and context.
|
|
3762
|
+
*
|
|
3763
|
+
* @param availableColumns - Number of columns available in the grid
|
|
3764
|
+
* @returns Layout preferences for this section
|
|
3765
|
+
*/
|
|
3766
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
3767
|
+
// Default implementation - sections should override
|
|
3768
|
+
const fieldCount = this.getFields().length;
|
|
3769
|
+
const itemCount = this.getItems().length;
|
|
3770
|
+
const descriptionLength = this.section.description?.length ?? 0;
|
|
3771
|
+
// Calculate preferred columns based on content
|
|
3772
|
+
let preferredColumns = 1;
|
|
3773
|
+
if (fieldCount > 6 || itemCount > 6) {
|
|
3774
|
+
preferredColumns = 2;
|
|
3775
|
+
}
|
|
3776
|
+
if (fieldCount > 10 || itemCount > 10 || descriptionLength > 200) {
|
|
3777
|
+
preferredColumns = 3;
|
|
3778
|
+
}
|
|
3779
|
+
return {
|
|
3780
|
+
preferredColumns: Math.min(preferredColumns, availableColumns),
|
|
3781
|
+
minColumns: 1,
|
|
3782
|
+
maxColumns: Math.min(4, availableColumns),
|
|
3783
|
+
canShrinkToFill: true, // Default: allow shrinking to fill grid (promotes side-by-side)
|
|
3784
|
+
shrinkPriority: 40, // Lower priority = more willing to shrink (better consolidation)
|
|
3785
|
+
expandOnContent: {
|
|
3786
|
+
fieldCount: 6,
|
|
3787
|
+
itemCount: 6,
|
|
3788
|
+
descriptionLength: 200,
|
|
3789
|
+
},
|
|
3790
|
+
};
|
|
3791
|
+
}
|
|
3792
|
+
/**
|
|
3793
|
+
* Suggest a layout change to the grid system.
|
|
3794
|
+
* Called when section wants to proactively suggest a different column span.
|
|
3795
|
+
*
|
|
3796
|
+
* @param suggestedColSpan - Suggested column span
|
|
3797
|
+
* @param reason - Reason for the suggestion
|
|
3798
|
+
* @param priority - Priority of suggestion (higher = more important)
|
|
3799
|
+
*/
|
|
3800
|
+
suggestLayout(suggestedColSpan, reason, priority = 50) {
|
|
3801
|
+
this.layoutSuggestion.emit({
|
|
3802
|
+
sectionId: this.section.id,
|
|
3803
|
+
suggestedColSpan: Math.max(1, Math.min(4, suggestedColSpan)),
|
|
3804
|
+
reason,
|
|
3805
|
+
priority,
|
|
3806
|
+
});
|
|
3807
|
+
}
|
|
3808
|
+
/**
|
|
3809
|
+
* Calculate optimal column count based on section content.
|
|
3810
|
+
* Helper method that sections can use in their getLayoutPreferences() implementation.
|
|
3811
|
+
*
|
|
3812
|
+
* @param availableColumns - Maximum columns available
|
|
3813
|
+
* @param options - Calculation options
|
|
3814
|
+
* @returns Optimal column count
|
|
3815
|
+
*/
|
|
3816
|
+
calculateOptimalColumns(availableColumns = 4, options) {
|
|
3817
|
+
const fieldCount = options?.fieldCount ?? this.getFields().length;
|
|
3818
|
+
const itemCount = options?.itemCount ?? this.getItems().length;
|
|
3819
|
+
const descriptionLength = options?.descriptionLength ?? this.section.description?.length ?? 0;
|
|
3820
|
+
const baseColumns = options?.baseColumns ?? 1;
|
|
3821
|
+
let optimal = baseColumns;
|
|
3822
|
+
// Expand based on content
|
|
3823
|
+
if (fieldCount > 6 || itemCount > 6) {
|
|
3824
|
+
optimal = Math.max(optimal, 2);
|
|
3825
|
+
}
|
|
3826
|
+
if (fieldCount > 10 || itemCount > 10 || descriptionLength > 200) {
|
|
3827
|
+
optimal = Math.max(optimal, 3);
|
|
3828
|
+
}
|
|
3829
|
+
if (fieldCount > 15 || itemCount > 15 || descriptionLength > 400) {
|
|
3830
|
+
optimal = Math.max(optimal, 4);
|
|
3831
|
+
}
|
|
3832
|
+
return Math.min(optimal, availableColumns);
|
|
3833
|
+
}
|
|
3753
3834
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: BaseSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3754
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: BaseSectionComponent, isStandalone: true, selector: "ng-component", inputs: { section: "section" }, outputs: { fieldInteraction: "fieldInteraction", itemInteraction: "itemInteraction" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3835
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: BaseSectionComponent, isStandalone: true, selector: "ng-component", inputs: { section: "section" }, outputs: { fieldInteraction: "fieldInteraction", itemInteraction: "itemInteraction", layoutSuggestion: "layoutSuggestion" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3755
3836
|
}
|
|
3756
3837
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: BaseSectionComponent, decorators: [{
|
|
3757
3838
|
type: Component,
|
|
@@ -3766,6 +3847,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
3766
3847
|
type: Output
|
|
3767
3848
|
}], itemInteraction: [{
|
|
3768
3849
|
type: Output
|
|
3850
|
+
}], layoutSuggestion: [{
|
|
3851
|
+
type: Output
|
|
3769
3852
|
}] } });
|
|
3770
3853
|
|
|
3771
3854
|
/**
|
|
@@ -3781,6 +3864,14 @@ class FallbackSectionComponent extends BaseSectionComponent {
|
|
|
3781
3864
|
getSectionType() {
|
|
3782
3865
|
return this.section?.type || 'unknown';
|
|
3783
3866
|
}
|
|
3867
|
+
/**
|
|
3868
|
+
* Get layout preferences for fallback section.
|
|
3869
|
+
* Uses default implementation from BaseSectionComponent.
|
|
3870
|
+
*/
|
|
3871
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
3872
|
+
// Fallback sections use the default implementation from BaseSectionComponent
|
|
3873
|
+
return super.getLayoutPreferences(availableColumns);
|
|
3874
|
+
}
|
|
3784
3875
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: FallbackSectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3785
3876
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: FallbackSectionComponent, isStandalone: true, selector: "lib-fallback-section", usesInheritance: true, ngImport: i0, template: "<div class=\"fallback-container\">\n <!-- Fallback Warning Header -->\n <lib-empty-state\n message=\"Section type "{{ getSectionType() }}" is not recognized\"\n icon=\"\u26A0\uFE0F\"\n variant=\"centered\"\n size=\"large\"\n >\n </lib-empty-state>\n\n <div class=\"fallback-data\" *ngIf=\"section.title || section.description || section.fields || section.items\">\n <div *ngIf=\"section.title\" class=\"data-item\">\n <span class=\"data-label\">Title:</span>\n <span class=\"data-value\">{{ section.title }}</span>\n </div>\n\n <div *ngIf=\"section.description\" class=\"data-item\">\n <span class=\"data-label\">Description:</span>\n <span class=\"data-value\">{{ section.description }}</span>\n </div>\n\n <div *ngIf=\"section.fields && section.fields.length > 0\" class=\"data-section\">\n <h4 class=\"data-section-title\">Fields ({{ section.fields.length }})</h4>\n <div class=\"data-item\" *ngFor=\"let field of section.fields\">\n <span class=\"data-label\">{{ field.label }}:</span>\n <span class=\"data-value\">{{ field.value }}</span>\n </div>\n </div>\n\n <div *ngIf=\"section.items && section.items.length > 0\" class=\"data-section\">\n <h4 class=\"data-section-title\">Items ({{ section.items.length }})</h4>\n <div class=\"data-item\" *ngFor=\"let item of section.items\">\n <span class=\"data-label\">{{ item.title || 'Item' }}:</span>\n <span class=\"data-value\">{{ item.description || item.value }}</span>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.fallback-container{display:flex;flex-direction:column;gap:var(--osi-section-gap)}.fallback-data{background:var(--osi-surface);border:1px solid var(--osi-border-muted);border-radius:var(--osi-radius-md);padding:var(--osi-spacing-sm);display:flex;flex-direction:column;gap:var(--osi-spacing-sm)}@media (max-width: 480px){.fallback-data{padding:var(--osi-spacing-xs);gap:var(--osi-spacing-xs)}}.data-item{display:flex;gap:var(--osi-spacing-sm);padding:var(--osi-spacing-xs)}@media (max-width: 480px){.data-item{flex-direction:column;gap:2px}}.data-label{font-size:var(--text-sm);font-weight:var(--font-semibold);color:var(--foreground);text-transform:none;min-width:100px}@media (max-width: 480px){.data-label{min-width:auto}}.data-value{font-size:var(--text-base);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--foreground);flex:1}.data-section{border-top:1px solid var(--osi-border-muted);padding-top:var(--osi-spacing-sm);margin-top:var(--osi-spacing-xs)}.data-section-title{font-size:var(--text-sm);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0;margin-bottom:var(--osi-spacing-xs)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EmptyStateComponent, selector: "lib-empty-state", inputs: ["message", "icon", "actionLabel", "variant", "size", "containerClass"], outputs: ["action"] }] }); }
|
|
3786
3877
|
}
|
|
@@ -5992,8 +6083,8 @@ function getSectionsRequiringExternalLibs() {
|
|
|
5992
6083
|
* Manifest metadata
|
|
5993
6084
|
*/
|
|
5994
6085
|
const MANIFEST_META = {
|
|
5995
|
-
generatedAt: '2025-12-
|
|
5996
|
-
registryVersion: '1.5.
|
|
6086
|
+
generatedAt: '2025-12-05T16:12:36.902Z',
|
|
6087
|
+
registryVersion: '1.5.13',
|
|
5997
6088
|
totalSections: 22,
|
|
5998
6089
|
publicSections: 22
|
|
5999
6090
|
};
|
|
@@ -11457,7 +11548,7 @@ function memoize(fn, options = {}) {
|
|
|
11457
11548
|
// GRID CONSTANTS
|
|
11458
11549
|
// ============================================================================
|
|
11459
11550
|
/** Minimum width for a single column in pixels */
|
|
11460
|
-
const MIN_COLUMN_WIDTH =
|
|
11551
|
+
const MIN_COLUMN_WIDTH = 220;
|
|
11461
11552
|
/** Maximum number of columns allowed */
|
|
11462
11553
|
const MAX_COLUMNS = 4;
|
|
11463
11554
|
/** Gap between columns and rows in pixels */
|
|
@@ -11483,7 +11574,9 @@ const DEFAULT_COLUMN_PACKING_OPTIONS = {
|
|
|
11483
11574
|
packingMode: 'ffdh',
|
|
11484
11575
|
allowReordering: true,
|
|
11485
11576
|
sortByHeight: true,
|
|
11486
|
-
useSkylineThreshold:
|
|
11577
|
+
useSkylineThreshold: 1, // Very aggressive: Switch to Skyline at first gap
|
|
11578
|
+
optimizationPasses: 4, // Increased: Maximum compactness through more passes
|
|
11579
|
+
enableGapAwarePlacement: true,
|
|
11487
11580
|
};
|
|
11488
11581
|
/**
|
|
11489
11582
|
* Default row packing options
|
|
@@ -11513,12 +11606,18 @@ const DEFAULT_MASONRY_PACKING_CONFIG = {
|
|
|
11513
11606
|
const SPACE_OPTIMIZED_CONFIG = {
|
|
11514
11607
|
...DEFAULT_GRID_CONFIG,
|
|
11515
11608
|
packingAlgorithm: 'column-based',
|
|
11516
|
-
rowPackingOptions:
|
|
11609
|
+
rowPackingOptions: {
|
|
11610
|
+
...DEFAULT_ROW_PACKING_OPTIONS,
|
|
11611
|
+
prioritizeSpaceFilling: true, // Aggressively fill rows
|
|
11612
|
+
allowShrinking: true, // Allow shrinking for better consolidation
|
|
11613
|
+
maxOptimizationPasses: 6, // Maximum passes for best results
|
|
11614
|
+
},
|
|
11517
11615
|
columnPackingOptions: {
|
|
11518
11616
|
packingMode: 'hybrid',
|
|
11519
11617
|
allowReordering: true,
|
|
11520
11618
|
sortByHeight: true,
|
|
11521
|
-
useSkylineThreshold:
|
|
11619
|
+
useSkylineThreshold: 1, // Very aggressive: switch to Skyline at first gap
|
|
11620
|
+
optimizationPasses: 5, // Maximum optimization passes for compactness
|
|
11522
11621
|
},
|
|
11523
11622
|
useLegacyFallback: true,
|
|
11524
11623
|
};
|
|
@@ -11775,10 +11874,10 @@ function isSectionTypeRegistryInitialized() {
|
|
|
11775
11874
|
// ============================================================================
|
|
11776
11875
|
/**
|
|
11777
11876
|
* Content density threshold for expansion.
|
|
11778
|
-
*
|
|
11779
|
-
*
|
|
11877
|
+
* Lowered to 5 to allow more aggressive gap filling and better consolidation.
|
|
11878
|
+
* Sections with density >= 5 can expand to fill gaps, promoting side-by-side placement.
|
|
11780
11879
|
*/
|
|
11781
|
-
const EXPANSION_DENSITY_THRESHOLD =
|
|
11880
|
+
const EXPANSION_DENSITY_THRESHOLD = 5;
|
|
11782
11881
|
/**
|
|
11783
11882
|
* Gets the maximum expansion limit for a section type.
|
|
11784
11883
|
*
|
|
@@ -11973,11 +12072,39 @@ function calculateMinContainerWidth(columns, config = {}) {
|
|
|
11973
12072
|
*
|
|
11974
12073
|
* @param sectionType - The section type
|
|
11975
12074
|
* @param preferences - Optional custom preferences map
|
|
12075
|
+
* @param sectionComponent - Optional section component instance (for dynamic preferences)
|
|
12076
|
+
* @param availableColumns - Optional available columns in grid
|
|
11976
12077
|
* @returns Preferred column count (1, 2, or 3)
|
|
11977
12078
|
*/
|
|
11978
|
-
function getPreferredColumns(sectionType, preferences = DEFAULT_SECTION_COLUMN_PREFERENCES
|
|
12079
|
+
function getPreferredColumns(sectionType, preferences = DEFAULT_SECTION_COLUMN_PREFERENCES, sectionComponent, // BaseSectionComponent instance
|
|
12080
|
+
availableColumns = 4) {
|
|
12081
|
+
// NEW: Try to get preferences from section component first (dynamic)
|
|
12082
|
+
if (sectionComponent && typeof sectionComponent.getLayoutPreferences === 'function') {
|
|
12083
|
+
try {
|
|
12084
|
+
const layoutPrefs = sectionComponent.getLayoutPreferences(availableColumns);
|
|
12085
|
+
return layoutPrefs.preferredColumns;
|
|
12086
|
+
}
|
|
12087
|
+
catch (error) {
|
|
12088
|
+
// Only warn in development mode
|
|
12089
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
12090
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
12091
|
+
if (isDevelopment) {
|
|
12092
|
+
console.warn('[GridConfig] Failed to get layout preferences from section component:', error);
|
|
12093
|
+
}
|
|
12094
|
+
// Fall through to static preferences
|
|
12095
|
+
}
|
|
12096
|
+
}
|
|
12097
|
+
// Fallback to static preferences (deprecated but kept for backward compatibility)
|
|
11979
12098
|
const type = sectionType?.toLowerCase() || 'default';
|
|
11980
|
-
|
|
12099
|
+
const staticPref = preferences[type] ?? preferences['default'] ?? 1;
|
|
12100
|
+
// Warn if using deprecated static preferences (only in development)
|
|
12101
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
12102
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
12103
|
+
if (isDevelopment && !sectionComponent) {
|
|
12104
|
+
console.warn(`[GridConfig] Using deprecated static preferences for section type "${type}". ` +
|
|
12105
|
+
`Consider implementing getLayoutPreferences() in the section component.`);
|
|
12106
|
+
}
|
|
12107
|
+
return staticPref;
|
|
11981
12108
|
}
|
|
11982
12109
|
/**
|
|
11983
12110
|
* Resolves the effective column span for a section based on preference and availability
|
|
@@ -11985,13 +12112,41 @@ function getPreferredColumns(sectionType, preferences = DEFAULT_SECTION_COLUMN_P
|
|
|
11985
12112
|
* @param preferredColumns - The section's preferred column count
|
|
11986
12113
|
* @param availableColumns - The total columns available in the container
|
|
11987
12114
|
* @param explicitColSpan - Optional explicit colSpan override from section config
|
|
12115
|
+
* @param sectionComponent - Optional section component instance (for dynamic preferences)
|
|
12116
|
+
* @param canShrinkToFill - Whether section can shrink to 1 column to fill grid
|
|
11988
12117
|
* @returns The effective column span to use
|
|
11989
12118
|
*/
|
|
11990
|
-
function resolveColumnSpan(preferredColumns, availableColumns, explicitColSpan
|
|
12119
|
+
function resolveColumnSpan(preferredColumns, availableColumns, explicitColSpan, sectionComponent, // BaseSectionComponent instance
|
|
12120
|
+
canShrinkToFill) {
|
|
11991
12121
|
// Explicit colSpan always takes precedence
|
|
11992
12122
|
if (explicitColSpan !== undefined && explicitColSpan > 0) {
|
|
11993
12123
|
return Math.min(explicitColSpan, availableColumns);
|
|
11994
12124
|
}
|
|
12125
|
+
// Get layout preferences from section component if available
|
|
12126
|
+
if (sectionComponent && typeof sectionComponent.getLayoutPreferences === 'function') {
|
|
12127
|
+
try {
|
|
12128
|
+
const layoutPrefs = sectionComponent.getLayoutPreferences(availableColumns);
|
|
12129
|
+
const effectivePref = Math.min(layoutPrefs.preferredColumns, availableColumns);
|
|
12130
|
+
// Respect min/max constraints
|
|
12131
|
+
const minCols = Math.max(1, layoutPrefs.minColumns);
|
|
12132
|
+
const maxCols = Math.min(availableColumns, layoutPrefs.maxColumns);
|
|
12133
|
+
let result = Math.max(minCols, Math.min(effectivePref, maxCols));
|
|
12134
|
+
// If canShrinkToFill is true and we need to fill gaps, allow shrinking to 1
|
|
12135
|
+
if (canShrinkToFill && layoutPrefs.canShrinkToFill) {
|
|
12136
|
+
result = Math.max(1, result); // Can go down to 1
|
|
12137
|
+
}
|
|
12138
|
+
return result;
|
|
12139
|
+
}
|
|
12140
|
+
catch (error) {
|
|
12141
|
+
// Only warn in development mode
|
|
12142
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
12143
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
12144
|
+
if (isDevelopment) {
|
|
12145
|
+
console.warn('[GridConfig] Failed to resolve column span from section component:', error);
|
|
12146
|
+
}
|
|
12147
|
+
// Fall through to static preferences
|
|
12148
|
+
}
|
|
12149
|
+
}
|
|
11995
12150
|
// Use preferred columns, constrained by available columns
|
|
11996
12151
|
return Math.min(preferredColumns, availableColumns);
|
|
11997
12152
|
}
|
|
@@ -12041,9 +12196,9 @@ function generateLeftExpression(columns, columnIndex, gap = GRID_GAP) {
|
|
|
12041
12196
|
*/
|
|
12042
12197
|
const BREAKPOINTS = {
|
|
12043
12198
|
xs: 0,
|
|
12044
|
-
sm:
|
|
12045
|
-
md:
|
|
12046
|
-
lg:
|
|
12199
|
+
sm: 464, // 2 columns possible (464px = 2*220 + 1*12 + padding)
|
|
12200
|
+
md: 684, // 3 columns possible (684px = 3*220 + 2*12 + padding)
|
|
12201
|
+
lg: 904, // 4 columns possible (904px = 4*220 + 3*12 + padding)
|
|
12047
12202
|
xl: 1024,
|
|
12048
12203
|
'2xl': 1280,
|
|
12049
12204
|
};
|
|
@@ -16641,6 +16796,124 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
16641
16796
|
args: [{ providedIn: 'root' }]
|
|
16642
16797
|
}] });
|
|
16643
16798
|
|
|
16799
|
+
/**
|
|
16800
|
+
* Service to manage section layout preferences.
|
|
16801
|
+
* Allows sections to register their layout preference functions dynamically.
|
|
16802
|
+
* Includes memoization for performance optimization.
|
|
16803
|
+
*/
|
|
16804
|
+
class SectionLayoutPreferenceService {
|
|
16805
|
+
constructor() {
|
|
16806
|
+
/**
|
|
16807
|
+
* Registry of layout preference functions by section type
|
|
16808
|
+
*/
|
|
16809
|
+
this.layoutPreferenceFunctions = new Map();
|
|
16810
|
+
/**
|
|
16811
|
+
* Cache for layout preferences to avoid recalculating for unchanged sections
|
|
16812
|
+
* Key: stringified CacheKey, Value: SectionLayoutPreferences
|
|
16813
|
+
*/
|
|
16814
|
+
this.preferencesCache = new Map();
|
|
16815
|
+
/**
|
|
16816
|
+
* Maximum cache size to prevent memory leaks
|
|
16817
|
+
*/
|
|
16818
|
+
this.MAX_CACHE_SIZE = 500;
|
|
16819
|
+
}
|
|
16820
|
+
/**
|
|
16821
|
+
* Generate cache key from section and available columns
|
|
16822
|
+
* Optimized to avoid expensive JSON.stringify for simple keys
|
|
16823
|
+
*/
|
|
16824
|
+
getCacheKey(section, availableColumns) {
|
|
16825
|
+
// Use simple string concatenation for better performance
|
|
16826
|
+
// Only include values that affect layout preferences
|
|
16827
|
+
return `${section.id || ''}|${(section.type ?? '').toLowerCase()}|${section.fields?.length ?? 0}|${section.items?.length ?? 0}|${section.description?.length ?? 0}|${section.preferredColumns ?? ''}|${availableColumns}`;
|
|
16828
|
+
}
|
|
16829
|
+
/**
|
|
16830
|
+
* Register a layout preference function for a section type
|
|
16831
|
+
*
|
|
16832
|
+
* @param sectionType - Section type (e.g., 'info', 'analytics')
|
|
16833
|
+
* @param preferenceFn - Function that returns layout preferences for a section
|
|
16834
|
+
*/
|
|
16835
|
+
register(sectionType, preferenceFn) {
|
|
16836
|
+
const type = sectionType.toLowerCase();
|
|
16837
|
+
this.layoutPreferenceFunctions.set(type, preferenceFn);
|
|
16838
|
+
// Clear cache when new functions are registered
|
|
16839
|
+
this.preferencesCache.clear();
|
|
16840
|
+
}
|
|
16841
|
+
/**
|
|
16842
|
+
* Get layout preferences for a section with memoization
|
|
16843
|
+
*
|
|
16844
|
+
* @param section - Section data
|
|
16845
|
+
* @param availableColumns - Available columns in grid
|
|
16846
|
+
* @returns Layout preferences or null if not registered
|
|
16847
|
+
*/
|
|
16848
|
+
getPreferences(section, availableColumns = 4) {
|
|
16849
|
+
const type = (section.type ?? '').toLowerCase();
|
|
16850
|
+
const preferenceFn = this.layoutPreferenceFunctions.get(type);
|
|
16851
|
+
if (!preferenceFn) {
|
|
16852
|
+
return null;
|
|
16853
|
+
}
|
|
16854
|
+
// Check cache first
|
|
16855
|
+
const cacheKey = this.getCacheKey(section, availableColumns);
|
|
16856
|
+
const cached = this.preferencesCache.get(cacheKey);
|
|
16857
|
+
if (cached) {
|
|
16858
|
+
return cached;
|
|
16859
|
+
}
|
|
16860
|
+
// Calculate preferences
|
|
16861
|
+
try {
|
|
16862
|
+
const preferences = preferenceFn(section, availableColumns);
|
|
16863
|
+
// Cache the result (with size limit)
|
|
16864
|
+
if (this.preferencesCache.size >= this.MAX_CACHE_SIZE) {
|
|
16865
|
+
// Remove oldest entry (simple FIFO)
|
|
16866
|
+
const firstKey = this.preferencesCache.keys().next().value;
|
|
16867
|
+
if (firstKey) {
|
|
16868
|
+
this.preferencesCache.delete(firstKey);
|
|
16869
|
+
}
|
|
16870
|
+
}
|
|
16871
|
+
this.preferencesCache.set(cacheKey, preferences);
|
|
16872
|
+
return preferences;
|
|
16873
|
+
}
|
|
16874
|
+
catch (error) {
|
|
16875
|
+
// Only log in development mode
|
|
16876
|
+
if (typeof window !== 'undefined' && !window.location.hostname.includes('localhost')) {
|
|
16877
|
+
// Production: silent fail
|
|
16878
|
+
return null;
|
|
16879
|
+
}
|
|
16880
|
+
console.warn(`[SectionLayoutPreferenceService] Error getting preferences for type "${type}":`, error);
|
|
16881
|
+
return null;
|
|
16882
|
+
}
|
|
16883
|
+
}
|
|
16884
|
+
/**
|
|
16885
|
+
* Check if a section type has registered preferences
|
|
16886
|
+
*
|
|
16887
|
+
* @param sectionType - Section type
|
|
16888
|
+
* @returns True if preferences are registered
|
|
16889
|
+
*/
|
|
16890
|
+
hasPreferences(sectionType) {
|
|
16891
|
+
const type = sectionType.toLowerCase();
|
|
16892
|
+
return this.layoutPreferenceFunctions.has(type);
|
|
16893
|
+
}
|
|
16894
|
+
/**
|
|
16895
|
+
* Clear all registered preferences and cache (useful for testing)
|
|
16896
|
+
*/
|
|
16897
|
+
clear() {
|
|
16898
|
+
this.layoutPreferenceFunctions.clear();
|
|
16899
|
+
this.preferencesCache.clear();
|
|
16900
|
+
}
|
|
16901
|
+
/**
|
|
16902
|
+
* Clear only the cache (useful when section data changes)
|
|
16903
|
+
*/
|
|
16904
|
+
clearCache() {
|
|
16905
|
+
this.preferencesCache.clear();
|
|
16906
|
+
}
|
|
16907
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SectionLayoutPreferenceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
16908
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SectionLayoutPreferenceService, providedIn: 'root' }); }
|
|
16909
|
+
}
|
|
16910
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SectionLayoutPreferenceService, decorators: [{
|
|
16911
|
+
type: Injectable,
|
|
16912
|
+
args: [{
|
|
16913
|
+
providedIn: 'root',
|
|
16914
|
+
}]
|
|
16915
|
+
}] });
|
|
16916
|
+
|
|
16644
16917
|
/**
|
|
16645
16918
|
* Analytics Section Component - Compact & Minimalist
|
|
16646
16919
|
*
|
|
@@ -16648,6 +16921,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
16648
16921
|
* Minimal padding, clean typography, maximum information density.
|
|
16649
16922
|
*/
|
|
16650
16923
|
class AnalyticsSectionComponent extends BaseSectionComponent {
|
|
16924
|
+
constructor() {
|
|
16925
|
+
super(...arguments);
|
|
16926
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
16927
|
+
}
|
|
16928
|
+
ngOnInit() {
|
|
16929
|
+
// Register layout preference function for this section type
|
|
16930
|
+
this.layoutService.register('analytics', (section, availableColumns) => {
|
|
16931
|
+
return this.calculateAnalyticsLayoutPreferences(section, availableColumns);
|
|
16932
|
+
});
|
|
16933
|
+
}
|
|
16934
|
+
/**
|
|
16935
|
+
* Calculate layout preferences for analytics section based on content.
|
|
16936
|
+
*/
|
|
16937
|
+
calculateAnalyticsLayoutPreferences(section, availableColumns) {
|
|
16938
|
+
const fields = section.fields ?? [];
|
|
16939
|
+
const fieldCount = fields.length;
|
|
16940
|
+
// Analytics sections: 2 cols default, can shrink to 1, expands to 3 with many metrics
|
|
16941
|
+
let preferredColumns = 2;
|
|
16942
|
+
if (fieldCount >= 8) {
|
|
16943
|
+
preferredColumns = 3;
|
|
16944
|
+
}
|
|
16945
|
+
else if (fieldCount <= 2) {
|
|
16946
|
+
preferredColumns = 1;
|
|
16947
|
+
}
|
|
16948
|
+
// Respect explicit preferences
|
|
16949
|
+
if (section.preferredColumns) {
|
|
16950
|
+
preferredColumns = section.preferredColumns;
|
|
16951
|
+
}
|
|
16952
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
16953
|
+
return {
|
|
16954
|
+
preferredColumns,
|
|
16955
|
+
minColumns: (section.minColumns ?? 1),
|
|
16956
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
16957
|
+
canShrinkToFill: true,
|
|
16958
|
+
shrinkPriority: 18, // Higher priority for shrinking (promotes side-by-side placement)
|
|
16959
|
+
expandOnContent: {
|
|
16960
|
+
fieldCount: 8, // Expand to 3 columns at 8+ metrics
|
|
16961
|
+
},
|
|
16962
|
+
};
|
|
16963
|
+
}
|
|
16964
|
+
/**
|
|
16965
|
+
* Get layout preferences for analytics section.
|
|
16966
|
+
*/
|
|
16967
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
16968
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
16969
|
+
if (servicePrefs) {
|
|
16970
|
+
return servicePrefs;
|
|
16971
|
+
}
|
|
16972
|
+
return this.calculateAnalyticsLayoutPreferences(this.section, availableColumns);
|
|
16973
|
+
}
|
|
16651
16974
|
/**
|
|
16652
16975
|
* Map trend string to TrendDirection type
|
|
16653
16976
|
*/
|
|
@@ -16724,6 +17047,57 @@ var analyticsSection_component = /*#__PURE__*/Object.freeze({
|
|
|
16724
17047
|
* Perfect for brand identity, design systems, and style guides.
|
|
16725
17048
|
*/
|
|
16726
17049
|
class BrandColorsSectionComponent extends BaseSectionComponent {
|
|
17050
|
+
constructor() {
|
|
17051
|
+
super(...arguments);
|
|
17052
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17053
|
+
}
|
|
17054
|
+
ngOnInit() {
|
|
17055
|
+
// Register layout preference function for this section type
|
|
17056
|
+
this.layoutService.register('brand-colors', (section, availableColumns) => {
|
|
17057
|
+
return this.calculateBrandColorsLayoutPreferences(section, availableColumns);
|
|
17058
|
+
});
|
|
17059
|
+
}
|
|
17060
|
+
/**
|
|
17061
|
+
* Calculate layout preferences for brand colors section based on content.
|
|
17062
|
+
* Brand colors sections: 2 cols default, can shrink to 1, expands to 3 for many colors
|
|
17063
|
+
*/
|
|
17064
|
+
calculateBrandColorsLayoutPreferences(section, availableColumns) {
|
|
17065
|
+
const fields = section.fields ?? [];
|
|
17066
|
+
const fieldCount = fields.length;
|
|
17067
|
+
// Brand colors sections: 2 cols default, can shrink to 1, expands to 3 for many colors
|
|
17068
|
+
let preferredColumns = 2;
|
|
17069
|
+
if (fieldCount >= 6 && availableColumns >= 3) {
|
|
17070
|
+
preferredColumns = 3;
|
|
17071
|
+
}
|
|
17072
|
+
if (fieldCount <= 2) {
|
|
17073
|
+
preferredColumns = 1;
|
|
17074
|
+
}
|
|
17075
|
+
// Respect explicit preferences
|
|
17076
|
+
if (section.preferredColumns) {
|
|
17077
|
+
preferredColumns = section.preferredColumns;
|
|
17078
|
+
}
|
|
17079
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17080
|
+
return {
|
|
17081
|
+
preferredColumns,
|
|
17082
|
+
minColumns: (section.minColumns ?? 1),
|
|
17083
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
17084
|
+
canShrinkToFill: true,
|
|
17085
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
17086
|
+
expandOnContent: {
|
|
17087
|
+
fieldCount: 6, // Expand to 3 columns at 6+ colors
|
|
17088
|
+
},
|
|
17089
|
+
};
|
|
17090
|
+
}
|
|
17091
|
+
/**
|
|
17092
|
+
* Get layout preferences for brand colors section.
|
|
17093
|
+
*/
|
|
17094
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17095
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17096
|
+
if (servicePrefs) {
|
|
17097
|
+
return servicePrefs;
|
|
17098
|
+
}
|
|
17099
|
+
return this.calculateBrandColorsLayoutPreferences(this.section, availableColumns);
|
|
17100
|
+
}
|
|
16727
17101
|
/**
|
|
16728
17102
|
* Check if value is a valid color (hex, rgb, rgba, hsl)
|
|
16729
17103
|
*/
|
|
@@ -16771,6 +17145,16 @@ var brandColorsSection_component = /*#__PURE__*/Object.freeze({
|
|
|
16771
17145
|
* Note: Requires Chart.js to be installed.
|
|
16772
17146
|
*/
|
|
16773
17147
|
class ChartSectionComponent extends BaseSectionComponent {
|
|
17148
|
+
constructor() {
|
|
17149
|
+
super(...arguments);
|
|
17150
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17151
|
+
}
|
|
17152
|
+
ngOnInit() {
|
|
17153
|
+
// Register layout preference function for this section type
|
|
17154
|
+
this.layoutService.register('chart', (section, availableColumns) => {
|
|
17155
|
+
return this.calculateChartLayoutPreferences(section, availableColumns);
|
|
17156
|
+
});
|
|
17157
|
+
}
|
|
16774
17158
|
ngAfterViewInit() {
|
|
16775
17159
|
this.renderChart();
|
|
16776
17160
|
}
|
|
@@ -16818,6 +17202,46 @@ class ChartSectionComponent extends BaseSectionComponent {
|
|
|
16818
17202
|
this.chartInstance = null;
|
|
16819
17203
|
}
|
|
16820
17204
|
}
|
|
17205
|
+
/**
|
|
17206
|
+
* Calculate layout preferences for chart section based on content.
|
|
17207
|
+
* Chart sections: 2 cols default, can shrink to 1, expands to 3-4 for wide charts
|
|
17208
|
+
*/
|
|
17209
|
+
calculateChartLayoutPreferences(section, availableColumns) {
|
|
17210
|
+
// Chart sections prefer 2 columns for optimal viewing
|
|
17211
|
+
// Can expand to 3-4 for wide charts, shrink to 1 for compact layouts
|
|
17212
|
+
let preferredColumns = 2;
|
|
17213
|
+
// Check if chart type suggests wider layout
|
|
17214
|
+
const chartType = section.meta?.['chartType'];
|
|
17215
|
+
const isWideChart = chartType === 'line' || chartType === 'bar' || chartType === 'area';
|
|
17216
|
+
if (isWideChart && availableColumns >= 3) {
|
|
17217
|
+
preferredColumns = 3;
|
|
17218
|
+
}
|
|
17219
|
+
// Respect explicit preferences
|
|
17220
|
+
if (section.preferredColumns) {
|
|
17221
|
+
preferredColumns = section.preferredColumns;
|
|
17222
|
+
}
|
|
17223
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17224
|
+
return {
|
|
17225
|
+
preferredColumns,
|
|
17226
|
+
minColumns: (section.minColumns ?? 1),
|
|
17227
|
+
maxColumns: Math.min((section.maxColumns ?? 4), availableColumns),
|
|
17228
|
+
canShrinkToFill: true,
|
|
17229
|
+
shrinkPriority: 25, // Higher priority for shrinking (promotes side-by-side placement)
|
|
17230
|
+
expandOnContent: {
|
|
17231
|
+
// Charts can expand based on data complexity
|
|
17232
|
+
},
|
|
17233
|
+
};
|
|
17234
|
+
}
|
|
17235
|
+
/**
|
|
17236
|
+
* Get layout preferences for chart section.
|
|
17237
|
+
*/
|
|
17238
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17239
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17240
|
+
if (servicePrefs) {
|
|
17241
|
+
return servicePrefs;
|
|
17242
|
+
}
|
|
17243
|
+
return this.calculateChartLayoutPreferences(this.section, availableColumns);
|
|
17244
|
+
}
|
|
16821
17245
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ChartSectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
16822
17246
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: ChartSectionComponent, isStandalone: true, selector: "lib-chart-section", viewQueries: [{ propertyName: "chartCanvas", first: true, predicate: ["chartCanvas"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"chart-container\">\n <!-- Section Header -->\n <lib-section-header [title]=\"section.title\" [description]=\"section.description\"> </lib-section-header>\n\n <!-- Chart Canvas -->\n <div class=\"chart-wrapper\">\n <canvas #chartCanvas></canvas>\n </div>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.chart-container{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.chart-wrapper{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease;padding:var(--osi-spacing-compact-md, 12px);background:var(--surface);min-height:300px;display:flex;flex-direction:column;gap:var(--osi-spacing-compact-sm, 6px)}.chart-wrapper:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.chart-wrapper:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.chart-wrapper{transition:none}}.chart-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--osi-spacing-compact-sm, 6px);flex-wrap:wrap;padding-bottom:var(--osi-spacing-compact-sm, 6px);border-bottom:1px solid var(--border)}.chart-title{font-size:var(--text-base);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);font-size:.9375rem;margin:0;line-height:1.3}.chart-legend{display:flex;gap:var(--osi-spacing-compact-sm, 6px);flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:var(--osi-spacing-compact-xs, 2px);font-size:.7rem;color:var(--muted-foreground)}.legend-color{width:10px;height:10px;border-radius:2px;flex-shrink:0}.chart-canvas-wrapper{flex:1;position:relative;min-height:230px;width:100%}.chart-canvas-wrapper canvas{max-width:100%;max-height:100%}.chart-footer{display:flex;justify-content:space-around;gap:var(--osi-spacing-compact-md, 12px);padding-top:var(--osi-spacing-compact-sm, 6px);border-top:1px solid var(--border)}.chart-stat{display:flex;flex-direction:column;align-items:center;gap:var(--osi-spacing-compact-xs, 2px)}.chart-stat-value{font-size:var(--text-2xl);font-weight:var(--font-semibold);line-height:var(--leading-tight);letter-spacing:-.02em;color:var(--foreground);font-variant-numeric:tabular-nums;font-size:var(--text-lg);font-weight:var(--font-bold)}.chart-stat-label{font-size:var(--text-xs);font-weight:var(--font-normal);line-height:var(--leading-normal);font-size:.7rem;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.04em}@media (max-width: 768px){.chart-wrapper{padding:var(--osi-spacing-compact-md, 12px);min-height:260px}.chart-canvas-wrapper{min-height:200px}}@media (max-width: 480px){.chart-wrapper{padding:var(--osi-spacing-compact-sm, 6px);min-height:220px}.chart-canvas-wrapper{min-height:160px}.chart-header{flex-direction:column}.chart-footer{flex-direction:column;gap:var(--osi-spacing-compact-sm, 6px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SectionHeaderComponent, selector: "lib-section-header", inputs: ["title", "description", "level", "headerClass", "titleClass", "descriptionClass"] }] }); }
|
|
16823
17247
|
}
|
|
@@ -16841,6 +17265,16 @@ var chartSection_component = /*#__PURE__*/Object.freeze({
|
|
|
16841
17265
|
* Perfect for team members, leadership profiles, and stakeholder directories.
|
|
16842
17266
|
*/
|
|
16843
17267
|
class ContactCardSectionComponent extends BaseSectionComponent {
|
|
17268
|
+
constructor() {
|
|
17269
|
+
super(...arguments);
|
|
17270
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17271
|
+
}
|
|
17272
|
+
ngOnInit() {
|
|
17273
|
+
// Register layout preference function for this section type
|
|
17274
|
+
this.layoutService.register('contact-card', (section, availableColumns) => {
|
|
17275
|
+
return this.calculateContactCardLayoutPreferences(section, availableColumns);
|
|
17276
|
+
});
|
|
17277
|
+
}
|
|
16844
17278
|
/**
|
|
16845
17279
|
* Get contact name from field
|
|
16846
17280
|
*/
|
|
@@ -16899,6 +17333,45 @@ class ContactCardSectionComponent extends BaseSectionComponent {
|
|
|
16899
17333
|
// Mac: Use ms-outlook: scheme (works with Outlook desktop app)
|
|
16900
17334
|
return `ms-outlook:${mailtoUrl}`;
|
|
16901
17335
|
}
|
|
17336
|
+
/**
|
|
17337
|
+
* Calculate layout preferences for contact card section based on content.
|
|
17338
|
+
* Contact cards: 1 col default, can expand to 2
|
|
17339
|
+
*/
|
|
17340
|
+
calculateContactCardLayoutPreferences(section, availableColumns) {
|
|
17341
|
+
const items = section.items ?? [];
|
|
17342
|
+
const fields = section.fields ?? [];
|
|
17343
|
+
const itemCount = items.length + fields.length;
|
|
17344
|
+
// Contact cards: 1 col default, can expand to 2 for multiple contacts
|
|
17345
|
+
let preferredColumns = 1;
|
|
17346
|
+
if (itemCount >= 3 && availableColumns >= 2) {
|
|
17347
|
+
preferredColumns = 2;
|
|
17348
|
+
}
|
|
17349
|
+
// Respect explicit preferences
|
|
17350
|
+
if (section.preferredColumns) {
|
|
17351
|
+
preferredColumns = section.preferredColumns;
|
|
17352
|
+
}
|
|
17353
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17354
|
+
return {
|
|
17355
|
+
preferredColumns,
|
|
17356
|
+
minColumns: (section.minColumns ?? 1),
|
|
17357
|
+
maxColumns: Math.min((section.maxColumns ?? 2), availableColumns),
|
|
17358
|
+
canShrinkToFill: true,
|
|
17359
|
+
shrinkPriority: 15, // High priority for shrinking (contact cards are very flexible)
|
|
17360
|
+
expandOnContent: {
|
|
17361
|
+
itemCount: 3, // Expand to 2 columns at 3+ contacts
|
|
17362
|
+
},
|
|
17363
|
+
};
|
|
17364
|
+
}
|
|
17365
|
+
/**
|
|
17366
|
+
* Get layout preferences for contact card section.
|
|
17367
|
+
*/
|
|
17368
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17369
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17370
|
+
if (servicePrefs) {
|
|
17371
|
+
return servicePrefs;
|
|
17372
|
+
}
|
|
17373
|
+
return this.calculateContactCardLayoutPreferences(this.section, availableColumns);
|
|
17374
|
+
}
|
|
16902
17375
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ContactCardSectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
16903
17376
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: ContactCardSectionComponent, isStandalone: true, selector: "lib-contact-card-section", usesInheritance: true, ngImport: i0, template: "<div class=\"contacts\">\n <lib-section-header *ngIf=\"section.title\" [title]=\"section.title\" [description]=\"section.description\">\n </lib-section-header>\n\n <div class=\"grid\" *ngIf=\"section.fields?.length\">\n <div class=\"card\" *ngFor=\"let c of section.fields\">\n <div class=\"avatar\">\n <img [src]=\"getAvatar(c)\" [alt]=\"getContactName(c)\" *ngIf=\"getAvatar(c)\" loading=\"lazy\" />\n <span class=\"initials\" *ngIf=\"!getAvatar(c)\">{{ getInitials(getContactName(c)) }}</span>\n </div>\n <h4 class=\"name\">{{ getContactName(c) }}</h4>\n <p class=\"role\" *ngIf=\"getContactRole(c)\">{{ getContactRole(c) }}</p>\n <lib-badge *ngIf=\"c.department\" class=\"dept\" variant=\"primary\" size=\"sm\">{{ c.department }}</lib-badge>\n <div class=\"actions\">\n <a [href]=\"getOutlookEmailUrl(c.email)\" class=\"action\" *ngIf=\"c.email\" title=\"Email\">\uD83D\uDCE7</a>\n <a [href]=\"'tel:' + c.phone\" class=\"action\" *ngIf=\"c.phone\" title=\"Call\">\uD83D\uDCDE</a>\n <a [href]=\"c.linkedIn\" class=\"action\" target=\"_blank\" rel=\"noopener\" *ngIf=\"c.linkedIn\" title=\"LinkedIn\">\uD83D\uDCBC</a>\n </div>\n </div>\n </div>\n\n <lib-empty-state *ngIf=\"!section.fields?.length\" message=\"No contacts\" icon=\"\uD83D\uDC64\" variant=\"compact\"> </lib-empty-state>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.contacts{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--osi-spacing-compact-sm, 6px)}@media (max-width: 768px){.grid{gap:var(--osi-spacing-compact-xs, 2px)}}@media (max-width: 640px){.grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.grid{grid-template-columns:1fr}}.card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease;transition:var(--transition-shadow),var(--transition-transform);position:relative;overflow:hidden;padding:var(--osi-spacing-compact-md, 12px);text-align:center;min-height:140px;background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:var(--osi-spacing-compact-xs, 2px);transition:all .3s var(--ease-out)}.card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.card{transition:none}}.card:active{transform:translateY(0);box-shadow:var(--shadow-md)}@media (prefers-reduced-motion: reduce){.card:hover,.card:active{transform:none}}.card:after{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1) 50%,transparent 100%);transition:left var(--duration-slower) var(--ease-out);pointer-events:none}.card:hover:after{left:100%}@media (prefers-reduced-motion: reduce){.card:after{display:none}}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.card:hover .avatar{transform:scale(1.06);box-shadow:0 6px 12px #00000026}.card:hover .name{color:var(--accent)}.avatar{width:48px;height:48px;border-radius:var(--radius-lg);border:2px solid var(--border);overflow:hidden;transition:all .3s var(--ease-out);box-shadow:var(--shadow-sm);flex-shrink:0;margin-bottom:var(--osi-spacing-compact-xs, 2px)}.avatar img{width:100%;height:100%;object-fit:cover}.initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--surface-hover);font-size:1rem;font-weight:var(--font-semibold);color:var(--foreground)}.name{font-size:var(--text-base);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0;transition:color .2s var(--ease-out)}.role{font-size:var(--text-xs);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--muted-foreground)}.actions{display:flex;gap:var(--osi-spacing-compact-xs, 2px);margin-top:auto;padding-top:var(--osi-spacing-compact-sm, 6px);border-top:1px solid var(--border);width:100%;justify-content:center}.action{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--surface-hover);text-decoration:none;transition:all .2s var(--ease-out);border:1px solid transparent}.action:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--shadow-sm)}@media (max-width: 480px){.card{padding:var(--osi-spacing-compact-sm, 6px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SectionHeaderComponent, selector: "lib-section-header", inputs: ["title", "description", "level", "headerClass", "titleClass", "descriptionClass"] }, { kind: "component", type: EmptyStateComponent, selector: "lib-empty-state", inputs: ["message", "icon", "actionLabel", "variant", "size", "containerClass"], outputs: ["action"] }, { kind: "component", type: BadgeComponent, selector: "lib-badge", inputs: ["variant", "size", "outlined", "pill", "dot", "badgeClass", "icon", "interactive", "ariaLabel"] }] }); }
|
|
16904
17377
|
}
|
|
@@ -16919,6 +17392,57 @@ var contactCardSection_component = /*#__PURE__*/Object.freeze({
|
|
|
16919
17392
|
* Features: dates, times, locations, status indicators.
|
|
16920
17393
|
*/
|
|
16921
17394
|
class EventSectionComponent extends BaseSectionComponent {
|
|
17395
|
+
constructor() {
|
|
17396
|
+
super(...arguments);
|
|
17397
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17398
|
+
}
|
|
17399
|
+
ngOnInit() {
|
|
17400
|
+
// Register layout preference function for this section type
|
|
17401
|
+
this.layoutService.register('event', (section, availableColumns) => {
|
|
17402
|
+
return this.calculateEventLayoutPreferences(section, availableColumns);
|
|
17403
|
+
});
|
|
17404
|
+
}
|
|
17405
|
+
/**
|
|
17406
|
+
* Calculate layout preferences for event section based on content.
|
|
17407
|
+
* Event sections: 2 cols default, can shrink to 1, expands based on item count
|
|
17408
|
+
*/
|
|
17409
|
+
calculateEventLayoutPreferences(section, availableColumns) {
|
|
17410
|
+
const items = section.items ?? [];
|
|
17411
|
+
const itemCount = items.length;
|
|
17412
|
+
// Event sections: 2 cols default, can shrink to 1, expands based on item count
|
|
17413
|
+
let preferredColumns = 2;
|
|
17414
|
+
if (itemCount >= 5 && availableColumns >= 3) {
|
|
17415
|
+
preferredColumns = 3;
|
|
17416
|
+
}
|
|
17417
|
+
if (itemCount <= 2) {
|
|
17418
|
+
preferredColumns = 1;
|
|
17419
|
+
}
|
|
17420
|
+
// Respect explicit preferences
|
|
17421
|
+
if (section.preferredColumns) {
|
|
17422
|
+
preferredColumns = section.preferredColumns;
|
|
17423
|
+
}
|
|
17424
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17425
|
+
return {
|
|
17426
|
+
preferredColumns,
|
|
17427
|
+
minColumns: (section.minColumns ?? 1),
|
|
17428
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
17429
|
+
canShrinkToFill: true,
|
|
17430
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
17431
|
+
expandOnContent: {
|
|
17432
|
+
itemCount: 5, // Expand to 3 columns at 5+ events
|
|
17433
|
+
},
|
|
17434
|
+
};
|
|
17435
|
+
}
|
|
17436
|
+
/**
|
|
17437
|
+
* Get layout preferences for event section.
|
|
17438
|
+
*/
|
|
17439
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17440
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17441
|
+
if (servicePrefs) {
|
|
17442
|
+
return servicePrefs;
|
|
17443
|
+
}
|
|
17444
|
+
return this.calculateEventLayoutPreferences(this.section, availableColumns);
|
|
17445
|
+
}
|
|
16922
17446
|
/**
|
|
16923
17447
|
* Format date for display
|
|
16924
17448
|
*/
|
|
@@ -16983,8 +17507,53 @@ var eventSection_component = /*#__PURE__*/Object.freeze({
|
|
|
16983
17507
|
class FaqSectionComponent extends BaseSectionComponent {
|
|
16984
17508
|
constructor() {
|
|
16985
17509
|
super(...arguments);
|
|
17510
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
16986
17511
|
this.expandedItems = new Set();
|
|
16987
17512
|
}
|
|
17513
|
+
ngOnInit() {
|
|
17514
|
+
// Register layout preference function for this section type
|
|
17515
|
+
this.layoutService.register('faq', (section, availableColumns) => {
|
|
17516
|
+
return this.calculateFaqLayoutPreferences(section, availableColumns);
|
|
17517
|
+
});
|
|
17518
|
+
}
|
|
17519
|
+
/**
|
|
17520
|
+
* Calculate layout preferences for FAQ section based on content.
|
|
17521
|
+
* FAQ sections: 1 col default (compact), can expand to 2 for readability
|
|
17522
|
+
*/
|
|
17523
|
+
calculateFaqLayoutPreferences(section, availableColumns) {
|
|
17524
|
+
const items = section.items ?? [];
|
|
17525
|
+
const itemCount = items.length;
|
|
17526
|
+
// FAQ sections: 1 col default (compact), can expand to 2 for readability
|
|
17527
|
+
let preferredColumns = 1;
|
|
17528
|
+
if (itemCount >= 3 && availableColumns >= 2) {
|
|
17529
|
+
preferredColumns = 2;
|
|
17530
|
+
}
|
|
17531
|
+
// Respect explicit preferences
|
|
17532
|
+
if (section.preferredColumns) {
|
|
17533
|
+
preferredColumns = section.preferredColumns;
|
|
17534
|
+
}
|
|
17535
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17536
|
+
return {
|
|
17537
|
+
preferredColumns,
|
|
17538
|
+
minColumns: (section.minColumns ?? 1),
|
|
17539
|
+
maxColumns: Math.min((section.maxColumns ?? 2), availableColumns),
|
|
17540
|
+
canShrinkToFill: true,
|
|
17541
|
+
shrinkPriority: 15, // High priority for shrinking (FAQ sections are very flexible)
|
|
17542
|
+
expandOnContent: {
|
|
17543
|
+
itemCount: 3, // Expand to 2 columns at 3+ FAQs
|
|
17544
|
+
},
|
|
17545
|
+
};
|
|
17546
|
+
}
|
|
17547
|
+
/**
|
|
17548
|
+
* Get layout preferences for FAQ section.
|
|
17549
|
+
*/
|
|
17550
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17551
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17552
|
+
if (servicePrefs) {
|
|
17553
|
+
return servicePrefs;
|
|
17554
|
+
}
|
|
17555
|
+
return this.calculateFaqLayoutPreferences(this.section, availableColumns);
|
|
17556
|
+
}
|
|
16988
17557
|
/**
|
|
16989
17558
|
* Toggle FAQ item expansion
|
|
16990
17559
|
*/
|
|
@@ -17029,6 +17598,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
17029
17598
|
* Perfect for revenue, expenses, P&L statements, and investment summaries.
|
|
17030
17599
|
*/
|
|
17031
17600
|
class FinancialsSectionComponent extends BaseSectionComponent {
|
|
17601
|
+
constructor() {
|
|
17602
|
+
super(...arguments);
|
|
17603
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17604
|
+
}
|
|
17605
|
+
ngOnInit() {
|
|
17606
|
+
// Register layout preference function for this section type
|
|
17607
|
+
this.layoutService.register('financials', (section, availableColumns) => {
|
|
17608
|
+
return this.calculateFinancialsLayoutPreferences(section, availableColumns);
|
|
17609
|
+
});
|
|
17610
|
+
}
|
|
17611
|
+
/**
|
|
17612
|
+
* Calculate layout preferences for financials section based on content.
|
|
17613
|
+
* Financials sections: 3 cols default, can shrink to 1-2
|
|
17614
|
+
*/
|
|
17615
|
+
calculateFinancialsLayoutPreferences(section, availableColumns) {
|
|
17616
|
+
const fields = section.fields ?? [];
|
|
17617
|
+
const fieldCount = fields.length;
|
|
17618
|
+
// Financials sections: 3 cols default, can shrink to 1-2
|
|
17619
|
+
let preferredColumns = 3;
|
|
17620
|
+
if (fieldCount <= 4) {
|
|
17621
|
+
preferredColumns = 2;
|
|
17622
|
+
}
|
|
17623
|
+
if (fieldCount <= 2) {
|
|
17624
|
+
preferredColumns = 1;
|
|
17625
|
+
}
|
|
17626
|
+
// Respect explicit preferences
|
|
17627
|
+
if (section.preferredColumns) {
|
|
17628
|
+
preferredColumns = section.preferredColumns;
|
|
17629
|
+
}
|
|
17630
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17631
|
+
return {
|
|
17632
|
+
preferredColumns,
|
|
17633
|
+
minColumns: (section.minColumns ?? 1),
|
|
17634
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
17635
|
+
canShrinkToFill: true,
|
|
17636
|
+
shrinkPriority: 25, // Higher priority for shrinking (promotes side-by-side placement)
|
|
17637
|
+
expandOnContent: {
|
|
17638
|
+
fieldCount: 6, // Expand to 3 columns at 6+ fields
|
|
17639
|
+
},
|
|
17640
|
+
};
|
|
17641
|
+
}
|
|
17642
|
+
/**
|
|
17643
|
+
* Get layout preferences for financials section.
|
|
17644
|
+
*/
|
|
17645
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17646
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17647
|
+
if (servicePrefs) {
|
|
17648
|
+
return servicePrefs;
|
|
17649
|
+
}
|
|
17650
|
+
return this.calculateFinancialsLayoutPreferences(this.section, availableColumns);
|
|
17651
|
+
}
|
|
17032
17652
|
/**
|
|
17033
17653
|
* Get trend class
|
|
17034
17654
|
*/
|
|
@@ -17081,11 +17701,62 @@ var financialsSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17081
17701
|
* Features: lazy loading, captions, hover effects.
|
|
17082
17702
|
*/
|
|
17083
17703
|
class GallerySectionComponent extends BaseSectionComponent {
|
|
17084
|
-
|
|
17085
|
-
|
|
17086
|
-
|
|
17087
|
-
|
|
17088
|
-
|
|
17704
|
+
constructor() {
|
|
17705
|
+
super(...arguments);
|
|
17706
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17707
|
+
}
|
|
17708
|
+
ngOnInit() {
|
|
17709
|
+
// Register layout preference function for this section type
|
|
17710
|
+
this.layoutService.register('gallery', (section, availableColumns) => {
|
|
17711
|
+
return this.calculateGalleryLayoutPreferences(section, availableColumns);
|
|
17712
|
+
});
|
|
17713
|
+
}
|
|
17714
|
+
/**
|
|
17715
|
+
* Calculate layout preferences for gallery section based on content.
|
|
17716
|
+
* Gallery sections: 2 cols default, can shrink to 1, expands to 3-4 for many images
|
|
17717
|
+
*/
|
|
17718
|
+
calculateGalleryLayoutPreferences(section, availableColumns) {
|
|
17719
|
+
const items = section.items ?? [];
|
|
17720
|
+
const itemCount = items.length;
|
|
17721
|
+
// Gallery sections: 2 cols default, can shrink to 1, expands to 3-4 for many images
|
|
17722
|
+
let preferredColumns = 2;
|
|
17723
|
+
if (itemCount >= 6 && availableColumns >= 3) {
|
|
17724
|
+
preferredColumns = 3;
|
|
17725
|
+
}
|
|
17726
|
+
if (itemCount <= 2) {
|
|
17727
|
+
preferredColumns = 1;
|
|
17728
|
+
}
|
|
17729
|
+
// Respect explicit preferences
|
|
17730
|
+
if (section.preferredColumns) {
|
|
17731
|
+
preferredColumns = section.preferredColumns;
|
|
17732
|
+
}
|
|
17733
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17734
|
+
return {
|
|
17735
|
+
preferredColumns,
|
|
17736
|
+
minColumns: (section.minColumns ?? 1),
|
|
17737
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
17738
|
+
canShrinkToFill: true,
|
|
17739
|
+
shrinkPriority: 18, // Higher priority for shrinking (galleries are flexible, promotes side-by-side)
|
|
17740
|
+
expandOnContent: {
|
|
17741
|
+
itemCount: 6, // Expand to 3 columns at 6+ images
|
|
17742
|
+
},
|
|
17743
|
+
};
|
|
17744
|
+
}
|
|
17745
|
+
/**
|
|
17746
|
+
* Get layout preferences for gallery section.
|
|
17747
|
+
*/
|
|
17748
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17749
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17750
|
+
if (servicePrefs) {
|
|
17751
|
+
return servicePrefs;
|
|
17752
|
+
}
|
|
17753
|
+
return this.calculateGalleryLayoutPreferences(this.section, availableColumns);
|
|
17754
|
+
}
|
|
17755
|
+
/**
|
|
17756
|
+
* Get image URL from item
|
|
17757
|
+
*/
|
|
17758
|
+
getImageUrl(item) {
|
|
17759
|
+
return item.meta?.url || item.meta?.src || item.url || '';
|
|
17089
17760
|
}
|
|
17090
17761
|
/**
|
|
17091
17762
|
* Get image caption
|
|
@@ -17180,6 +17851,70 @@ class InfoSectionComponent extends BaseSectionComponent {
|
|
|
17180
17851
|
* TrackBy function for fields
|
|
17181
17852
|
*/
|
|
17182
17853
|
this.trackByField = trackByField;
|
|
17854
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17855
|
+
}
|
|
17856
|
+
ngOnInit() {
|
|
17857
|
+
// Register layout preference function for this section type
|
|
17858
|
+
this.layoutService.register('info', (section, availableColumns) => {
|
|
17859
|
+
return this.calculateInfoLayoutPreferences(section, availableColumns);
|
|
17860
|
+
});
|
|
17861
|
+
}
|
|
17862
|
+
/**
|
|
17863
|
+
* Calculate layout preferences for info section based on section data.
|
|
17864
|
+
* This method can be called statically via the service.
|
|
17865
|
+
*/
|
|
17866
|
+
calculateInfoLayoutPreferences(section, availableColumns) {
|
|
17867
|
+
const fields = section.fields ?? [];
|
|
17868
|
+
const fieldCount = fields.length;
|
|
17869
|
+
const descriptionLength = section.description?.length ?? 0;
|
|
17870
|
+
// Calculate preferred columns based on content:
|
|
17871
|
+
// 1-3 fields = 1 column (compact)
|
|
17872
|
+
// 4-6 fields = 2 columns (comfortable)
|
|
17873
|
+
// 7+ fields = 3 columns (spacious)
|
|
17874
|
+
let preferredColumns = 1;
|
|
17875
|
+
if (fieldCount >= 4 && fieldCount <= 6) {
|
|
17876
|
+
preferredColumns = 2;
|
|
17877
|
+
}
|
|
17878
|
+
else if (fieldCount >= 7) {
|
|
17879
|
+
preferredColumns = 3;
|
|
17880
|
+
}
|
|
17881
|
+
// Adjust for description length
|
|
17882
|
+
if (descriptionLength > 200 && preferredColumns < 2) {
|
|
17883
|
+
preferredColumns = 2;
|
|
17884
|
+
}
|
|
17885
|
+
if (descriptionLength > 400 && preferredColumns < 3) {
|
|
17886
|
+
preferredColumns = 3;
|
|
17887
|
+
}
|
|
17888
|
+
// Respect explicit preferences from section data
|
|
17889
|
+
if (section.preferredColumns) {
|
|
17890
|
+
preferredColumns = section.preferredColumns;
|
|
17891
|
+
}
|
|
17892
|
+
// Constrain to available columns
|
|
17893
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
17894
|
+
return {
|
|
17895
|
+
preferredColumns,
|
|
17896
|
+
minColumns: (section.minColumns ?? 1),
|
|
17897
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
17898
|
+
canShrinkToFill: true, // Info sections can shrink to 1 column to fill grid
|
|
17899
|
+
shrinkPriority: 20, // Higher priority for shrinking (promotes side-by-side placement)
|
|
17900
|
+
expandOnContent: {
|
|
17901
|
+
fieldCount: 7, // Expand to 3 columns at 7+ fields
|
|
17902
|
+
descriptionLength: 200, // Expand with long descriptions
|
|
17903
|
+
},
|
|
17904
|
+
};
|
|
17905
|
+
}
|
|
17906
|
+
/**
|
|
17907
|
+
* Get layout preferences for info section.
|
|
17908
|
+
* Uses the registered preference function via service, or calculates directly.
|
|
17909
|
+
*/
|
|
17910
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
17911
|
+
// Try to get from service first (if registered)
|
|
17912
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
17913
|
+
if (servicePrefs) {
|
|
17914
|
+
return servicePrefs;
|
|
17915
|
+
}
|
|
17916
|
+
// Fallback to direct calculation
|
|
17917
|
+
return this.calculateInfoLayoutPreferences(this.section, availableColumns);
|
|
17183
17918
|
}
|
|
17184
17919
|
/**
|
|
17185
17920
|
* Get trend class (deprecated - kept for backward compatibility)
|
|
@@ -17233,6 +17968,56 @@ var infoSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17233
17968
|
* Perfect for task lists, features, requirements, and inventory.
|
|
17234
17969
|
*/
|
|
17235
17970
|
class ListSectionComponent extends BaseSectionComponent {
|
|
17971
|
+
constructor() {
|
|
17972
|
+
super(...arguments);
|
|
17973
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
17974
|
+
}
|
|
17975
|
+
ngOnInit() {
|
|
17976
|
+
// Register layout preference function for this section type
|
|
17977
|
+
this.layoutService.register('list', (section, availableColumns) => {
|
|
17978
|
+
return this.calculateListLayoutPreferences(section, availableColumns);
|
|
17979
|
+
});
|
|
17980
|
+
}
|
|
17981
|
+
/**
|
|
17982
|
+
* Calculate layout preferences for list section based on content.
|
|
17983
|
+
*/
|
|
17984
|
+
calculateListLayoutPreferences(section, availableColumns) {
|
|
17985
|
+
const items = section.items ?? [];
|
|
17986
|
+
const itemCount = items.length;
|
|
17987
|
+
// List sections: 1-2 cols default, can shrink to 1, expands based on item count
|
|
17988
|
+
let preferredColumns = 1;
|
|
17989
|
+
if (itemCount >= 5) {
|
|
17990
|
+
preferredColumns = 2;
|
|
17991
|
+
}
|
|
17992
|
+
if (itemCount >= 10) {
|
|
17993
|
+
preferredColumns = 3;
|
|
17994
|
+
}
|
|
17995
|
+
// Respect explicit preferences
|
|
17996
|
+
if (section.preferredColumns) {
|
|
17997
|
+
preferredColumns = section.preferredColumns;
|
|
17998
|
+
}
|
|
17999
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18000
|
+
return {
|
|
18001
|
+
preferredColumns,
|
|
18002
|
+
minColumns: (section.minColumns ?? 1),
|
|
18003
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18004
|
+
canShrinkToFill: true,
|
|
18005
|
+
shrinkPriority: 15, // Very high priority for shrinking (lists are very flexible, promotes consolidation)
|
|
18006
|
+
expandOnContent: {
|
|
18007
|
+
itemCount: 5, // Expand to 2 columns at 5+ items
|
|
18008
|
+
},
|
|
18009
|
+
};
|
|
18010
|
+
}
|
|
18011
|
+
/**
|
|
18012
|
+
* Get layout preferences for list section.
|
|
18013
|
+
*/
|
|
18014
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18015
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18016
|
+
if (servicePrefs) {
|
|
18017
|
+
return servicePrefs;
|
|
18018
|
+
}
|
|
18019
|
+
return this.calculateListLayoutPreferences(this.section, availableColumns);
|
|
18020
|
+
}
|
|
17236
18021
|
/**
|
|
17237
18022
|
* Get status class (deprecated - kept for backward compatibility)
|
|
17238
18023
|
*/
|
|
@@ -17303,6 +18088,16 @@ var listSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17303
18088
|
* Note: Requires Leaflet library to be installed.
|
|
17304
18089
|
*/
|
|
17305
18090
|
class MapSectionComponent extends BaseSectionComponent {
|
|
18091
|
+
constructor() {
|
|
18092
|
+
super(...arguments);
|
|
18093
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18094
|
+
}
|
|
18095
|
+
ngOnInit() {
|
|
18096
|
+
// Register layout preference function for this section type
|
|
18097
|
+
this.layoutService.register('map', (section, availableColumns) => {
|
|
18098
|
+
return this.calculateMapLayoutPreferences(section, availableColumns);
|
|
18099
|
+
});
|
|
18100
|
+
}
|
|
17306
18101
|
ngAfterViewInit() {
|
|
17307
18102
|
this.initializeMap();
|
|
17308
18103
|
}
|
|
@@ -17353,6 +18148,44 @@ class MapSectionComponent extends BaseSectionComponent {
|
|
|
17353
18148
|
this.mapInstance = null;
|
|
17354
18149
|
}
|
|
17355
18150
|
}
|
|
18151
|
+
/**
|
|
18152
|
+
* Calculate layout preferences for map section based on content.
|
|
18153
|
+
* Map sections: 2 cols default, can shrink to 1, expands to 3-4 for wide maps
|
|
18154
|
+
*/
|
|
18155
|
+
calculateMapLayoutPreferences(section, availableColumns) {
|
|
18156
|
+
// Map sections prefer 2 columns for optimal viewing
|
|
18157
|
+
// Can expand to 3-4 for wide maps, shrink to 1 for compact layouts
|
|
18158
|
+
let preferredColumns = 2;
|
|
18159
|
+
// Maps benefit from wider layouts when space is available
|
|
18160
|
+
if (availableColumns >= 3) {
|
|
18161
|
+
preferredColumns = 3;
|
|
18162
|
+
}
|
|
18163
|
+
// Respect explicit preferences
|
|
18164
|
+
if (section.preferredColumns) {
|
|
18165
|
+
preferredColumns = section.preferredColumns;
|
|
18166
|
+
}
|
|
18167
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18168
|
+
return {
|
|
18169
|
+
preferredColumns,
|
|
18170
|
+
minColumns: (section.minColumns ?? 1),
|
|
18171
|
+
maxColumns: Math.min((section.maxColumns ?? 4), availableColumns),
|
|
18172
|
+
canShrinkToFill: true,
|
|
18173
|
+
shrinkPriority: 25, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18174
|
+
expandOnContent: {
|
|
18175
|
+
// Maps can expand based on location count
|
|
18176
|
+
},
|
|
18177
|
+
};
|
|
18178
|
+
}
|
|
18179
|
+
/**
|
|
18180
|
+
* Get layout preferences for map section.
|
|
18181
|
+
*/
|
|
18182
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18183
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18184
|
+
if (servicePrefs) {
|
|
18185
|
+
return servicePrefs;
|
|
18186
|
+
}
|
|
18187
|
+
return this.calculateMapLayoutPreferences(this.section, availableColumns);
|
|
18188
|
+
}
|
|
17356
18189
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: MapSectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
17357
18190
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: MapSectionComponent, isStandalone: true, selector: "lib-map-section", viewQueries: [{ propertyName: "mapElement", first: true, predicate: ["mapElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"map-container\">\n <!-- Section Header -->\n <lib-section-header [title]=\"section.title\" [description]=\"section.description\"> </lib-section-header>\n\n <!-- Map Display -->\n <div class=\"map-wrapper\">\n <div #mapElement class=\"map-element\"></div>\n </div>\n\n <!-- Location List (Optional) -->\n <div class=\"location-list\" *ngIf=\"section.fields && section.fields.length > 1\">\n <div class=\"location-item\" *ngFor=\"let location of section.fields\">\n <h4 class=\"location-name\">{{ location.name }}</h4>\n <p class=\"location-address\" *ngIf=\"location.address\">{{ location.address }}</p>\n <span class=\"location-type\" *ngIf=\"location.type\">{{ location.type }}</span>\n </div>\n </div>\n\n <!-- Empty State -->\n <lib-empty-state\n *ngIf=\"!section.fields || section.fields.length === 0\"\n message=\"No locations to display\"\n icon=\"\uD83D\uDDFA\uFE0F\"\n variant=\"minimal\"\n >\n </lib-empty-state>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.map-container{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.map-wrapper{background:var(--osi-surface);border:1px solid var(--osi-border-muted);border-radius:var(--osi-radius-md);overflow:hidden;height:280px}@media (max-width: 480px){.map-wrapper{height:180px}}.map-element{width:100%;height:100%}.location-list{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-xs, 2px);margin-top:var(--osi-spacing-compact-sm, 6px)}.location-item{background:var(--osi-surface);border:1px solid var(--osi-border-muted);border-radius:var(--osi-radius-sm);padding:var(--osi-spacing-compact-sm, 6px);transition:all var(--osi-duration-normal) var(--osi-ease-out)}.location-item:hover{background:var(--osi-surface-raised)}@media (max-width: 480px){.location-item{padding:var(--osi-spacing-compact-xs, 2px)}}.location-name{font-size:var(--text-sm);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0}.location-address{font-size:var(--text-sm);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--foreground);margin:var(--osi-spacing-compact-xs, 2px) 0 0}.location-type{font-size:var(--text-sm);font-weight:var(--font-semibold);color:var(--foreground);text-transform:none;display:inline-block;margin-top:var(--osi-spacing-compact-xs, 2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SectionHeaderComponent, selector: "lib-section-header", inputs: ["title", "description", "level", "headerClass", "titleClass", "descriptionClass"] }, { kind: "component", type: EmptyStateComponent, selector: "lib-empty-state", inputs: ["message", "icon", "actionLabel", "variant", "size", "containerClass"], outputs: ["action"] }] }); }
|
|
17358
18191
|
}
|
|
@@ -17376,6 +18209,55 @@ var mapSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17376
18209
|
* Features: influence scores, connection counts, status indicators.
|
|
17377
18210
|
*/
|
|
17378
18211
|
class NetworkCardSectionComponent extends BaseSectionComponent {
|
|
18212
|
+
constructor() {
|
|
18213
|
+
super(...arguments);
|
|
18214
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18215
|
+
}
|
|
18216
|
+
ngOnInit() {
|
|
18217
|
+
// Register layout preference function for this section type
|
|
18218
|
+
this.layoutService.register('network-card', (section, availableColumns) => {
|
|
18219
|
+
return this.calculateNetworkCardLayoutPreferences(section, availableColumns);
|
|
18220
|
+
});
|
|
18221
|
+
}
|
|
18222
|
+
/**
|
|
18223
|
+
* Calculate layout preferences for network card section based on content.
|
|
18224
|
+
* Network cards: 1-2 cols default, similar to contact cards
|
|
18225
|
+
*/
|
|
18226
|
+
calculateNetworkCardLayoutPreferences(section, availableColumns) {
|
|
18227
|
+
const items = section.items ?? [];
|
|
18228
|
+
const fields = section.fields ?? [];
|
|
18229
|
+
const itemCount = items.length + fields.length;
|
|
18230
|
+
// Network cards: 1-2 cols default, similar to contact cards
|
|
18231
|
+
let preferredColumns = 1;
|
|
18232
|
+
if (itemCount >= 3 && availableColumns >= 2) {
|
|
18233
|
+
preferredColumns = 2;
|
|
18234
|
+
}
|
|
18235
|
+
// Respect explicit preferences
|
|
18236
|
+
if (section.preferredColumns) {
|
|
18237
|
+
preferredColumns = section.preferredColumns;
|
|
18238
|
+
}
|
|
18239
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18240
|
+
return {
|
|
18241
|
+
preferredColumns,
|
|
18242
|
+
minColumns: (section.minColumns ?? 1),
|
|
18243
|
+
maxColumns: Math.min((section.maxColumns ?? 2), availableColumns),
|
|
18244
|
+
canShrinkToFill: true,
|
|
18245
|
+
shrinkPriority: 20, // High priority for shrinking (network cards are flexible)
|
|
18246
|
+
expandOnContent: {
|
|
18247
|
+
itemCount: 3, // Expand to 2 columns at 3+ items
|
|
18248
|
+
},
|
|
18249
|
+
};
|
|
18250
|
+
}
|
|
18251
|
+
/**
|
|
18252
|
+
* Get layout preferences for network card section.
|
|
18253
|
+
*/
|
|
18254
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18255
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18256
|
+
if (servicePrefs) {
|
|
18257
|
+
return servicePrefs;
|
|
18258
|
+
}
|
|
18259
|
+
return this.calculateNetworkCardLayoutPreferences(this.section, availableColumns);
|
|
18260
|
+
}
|
|
17379
18261
|
/**
|
|
17380
18262
|
* Get status class
|
|
17381
18263
|
*/
|
|
@@ -17404,6 +18286,57 @@ var networkCardSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17404
18286
|
* Features: publication dates, sources, categories, featured images.
|
|
17405
18287
|
*/
|
|
17406
18288
|
class NewsSectionComponent extends BaseSectionComponent {
|
|
18289
|
+
constructor() {
|
|
18290
|
+
super(...arguments);
|
|
18291
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18292
|
+
}
|
|
18293
|
+
ngOnInit() {
|
|
18294
|
+
// Register layout preference function for this section type
|
|
18295
|
+
this.layoutService.register('news', (section, availableColumns) => {
|
|
18296
|
+
return this.calculateNewsLayoutPreferences(section, availableColumns);
|
|
18297
|
+
});
|
|
18298
|
+
}
|
|
18299
|
+
/**
|
|
18300
|
+
* Calculate layout preferences for news section based on content.
|
|
18301
|
+
* News sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18302
|
+
*/
|
|
18303
|
+
calculateNewsLayoutPreferences(section, availableColumns) {
|
|
18304
|
+
const items = section.items ?? [];
|
|
18305
|
+
const itemCount = items.length;
|
|
18306
|
+
// News sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18307
|
+
let preferredColumns = 2;
|
|
18308
|
+
if (itemCount >= 5 && availableColumns >= 3) {
|
|
18309
|
+
preferredColumns = 3;
|
|
18310
|
+
}
|
|
18311
|
+
if (itemCount <= 2) {
|
|
18312
|
+
preferredColumns = 1;
|
|
18313
|
+
}
|
|
18314
|
+
// Respect explicit preferences
|
|
18315
|
+
if (section.preferredColumns) {
|
|
18316
|
+
preferredColumns = section.preferredColumns;
|
|
18317
|
+
}
|
|
18318
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18319
|
+
return {
|
|
18320
|
+
preferredColumns,
|
|
18321
|
+
minColumns: (section.minColumns ?? 1),
|
|
18322
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18323
|
+
canShrinkToFill: true,
|
|
18324
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18325
|
+
expandOnContent: {
|
|
18326
|
+
itemCount: 5, // Expand to 3 columns at 5+ articles
|
|
18327
|
+
},
|
|
18328
|
+
};
|
|
18329
|
+
}
|
|
18330
|
+
/**
|
|
18331
|
+
* Get layout preferences for news section.
|
|
18332
|
+
*/
|
|
18333
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18334
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18335
|
+
if (servicePrefs) {
|
|
18336
|
+
return servicePrefs;
|
|
18337
|
+
}
|
|
18338
|
+
return this.calculateNewsLayoutPreferences(this.section, availableColumns);
|
|
18339
|
+
}
|
|
17407
18340
|
/**
|
|
17408
18341
|
* Get article image URL
|
|
17409
18342
|
*/
|
|
@@ -17447,6 +18380,59 @@ var newsSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17447
18380
|
* Perfect for company profiles, key highlights, and quick insights.
|
|
17448
18381
|
*/
|
|
17449
18382
|
class OverviewSectionComponent extends BaseSectionComponent {
|
|
18383
|
+
constructor() {
|
|
18384
|
+
super(...arguments);
|
|
18385
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18386
|
+
}
|
|
18387
|
+
ngOnInit() {
|
|
18388
|
+
// Register layout preference function for this section type
|
|
18389
|
+
this.layoutService.register('overview', (section, availableColumns) => {
|
|
18390
|
+
return this.calculateOverviewLayoutPreferences(section, availableColumns);
|
|
18391
|
+
});
|
|
18392
|
+
}
|
|
18393
|
+
/**
|
|
18394
|
+
* Calculate layout preferences for overview section based on content.
|
|
18395
|
+
*/
|
|
18396
|
+
calculateOverviewLayoutPreferences(section, availableColumns) {
|
|
18397
|
+
const fields = section.fields ?? [];
|
|
18398
|
+
const fieldCount = fields.length;
|
|
18399
|
+
// Overview sections: 3 cols default, can shrink to 1-2, expands to 4 for many fields
|
|
18400
|
+
let preferredColumns = 3;
|
|
18401
|
+
if (fieldCount >= 12) {
|
|
18402
|
+
preferredColumns = 4;
|
|
18403
|
+
}
|
|
18404
|
+
else if (fieldCount <= 4) {
|
|
18405
|
+
preferredColumns = 2;
|
|
18406
|
+
}
|
|
18407
|
+
else if (fieldCount <= 2) {
|
|
18408
|
+
preferredColumns = 1;
|
|
18409
|
+
}
|
|
18410
|
+
// Respect explicit preferences
|
|
18411
|
+
if (section.preferredColumns) {
|
|
18412
|
+
preferredColumns = section.preferredColumns;
|
|
18413
|
+
}
|
|
18414
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18415
|
+
return {
|
|
18416
|
+
preferredColumns,
|
|
18417
|
+
minColumns: (section.minColumns ?? 1),
|
|
18418
|
+
maxColumns: Math.min((section.maxColumns ?? 4), availableColumns),
|
|
18419
|
+
canShrinkToFill: true,
|
|
18420
|
+
shrinkPriority: 40, // Lower priority (overview sections prefer to stay wide)
|
|
18421
|
+
expandOnContent: {
|
|
18422
|
+
fieldCount: 12, // Expand to 4 columns at 12+ fields
|
|
18423
|
+
},
|
|
18424
|
+
};
|
|
18425
|
+
}
|
|
18426
|
+
/**
|
|
18427
|
+
* Get layout preferences for overview section.
|
|
18428
|
+
*/
|
|
18429
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18430
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18431
|
+
if (servicePrefs) {
|
|
18432
|
+
return servicePrefs;
|
|
18433
|
+
}
|
|
18434
|
+
return this.calculateOverviewLayoutPreferences(this.section, availableColumns);
|
|
18435
|
+
}
|
|
17450
18436
|
/**
|
|
17451
18437
|
* Check if field should be highlighted
|
|
17452
18438
|
*/
|
|
@@ -17473,6 +18459,57 @@ var overviewSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17473
18459
|
* Perfect for product catalogs, feature lists, and service offerings.
|
|
17474
18460
|
*/
|
|
17475
18461
|
class ProductSectionComponent extends BaseSectionComponent {
|
|
18462
|
+
constructor() {
|
|
18463
|
+
super(...arguments);
|
|
18464
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18465
|
+
}
|
|
18466
|
+
ngOnInit() {
|
|
18467
|
+
// Register layout preference function for this section type
|
|
18468
|
+
this.layoutService.register('product', (section, availableColumns) => {
|
|
18469
|
+
return this.calculateProductLayoutPreferences(section, availableColumns);
|
|
18470
|
+
});
|
|
18471
|
+
}
|
|
18472
|
+
/**
|
|
18473
|
+
* Calculate layout preferences for product section based on content.
|
|
18474
|
+
* Product sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18475
|
+
*/
|
|
18476
|
+
calculateProductLayoutPreferences(section, availableColumns) {
|
|
18477
|
+
const items = section.items ?? [];
|
|
18478
|
+
const itemCount = items.length;
|
|
18479
|
+
// Product sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18480
|
+
let preferredColumns = 2;
|
|
18481
|
+
if (itemCount >= 5 && availableColumns >= 3) {
|
|
18482
|
+
preferredColumns = 3;
|
|
18483
|
+
}
|
|
18484
|
+
if (itemCount <= 2) {
|
|
18485
|
+
preferredColumns = 1;
|
|
18486
|
+
}
|
|
18487
|
+
// Respect explicit preferences
|
|
18488
|
+
if (section.preferredColumns) {
|
|
18489
|
+
preferredColumns = section.preferredColumns;
|
|
18490
|
+
}
|
|
18491
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18492
|
+
return {
|
|
18493
|
+
preferredColumns,
|
|
18494
|
+
minColumns: (section.minColumns ?? 1),
|
|
18495
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18496
|
+
canShrinkToFill: true,
|
|
18497
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18498
|
+
expandOnContent: {
|
|
18499
|
+
itemCount: 5, // Expand to 3 columns at 5+ products
|
|
18500
|
+
},
|
|
18501
|
+
};
|
|
18502
|
+
}
|
|
18503
|
+
/**
|
|
18504
|
+
* Get layout preferences for product section.
|
|
18505
|
+
*/
|
|
18506
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18507
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18508
|
+
if (servicePrefs) {
|
|
18509
|
+
return servicePrefs;
|
|
18510
|
+
}
|
|
18511
|
+
return this.calculateProductLayoutPreferences(this.section, availableColumns);
|
|
18512
|
+
}
|
|
17476
18513
|
/**
|
|
17477
18514
|
* Get status class (deprecated)
|
|
17478
18515
|
*/
|
|
@@ -17518,6 +18555,58 @@ var productSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17518
18555
|
* Perfect for customer feedback, expert opinions, and highlighted content.
|
|
17519
18556
|
*/
|
|
17520
18557
|
class QuotationSectionComponent extends BaseSectionComponent {
|
|
18558
|
+
constructor() {
|
|
18559
|
+
super(...arguments);
|
|
18560
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18561
|
+
}
|
|
18562
|
+
ngOnInit() {
|
|
18563
|
+
// Register layout preference function for this section type
|
|
18564
|
+
this.layoutService.register('quotation', (section, availableColumns) => {
|
|
18565
|
+
return this.calculateQuotationLayoutPreferences(section, availableColumns);
|
|
18566
|
+
});
|
|
18567
|
+
}
|
|
18568
|
+
/**
|
|
18569
|
+
* Calculate layout preferences for quotation section based on content.
|
|
18570
|
+
* Quotation sections: 2 cols default, can shrink to 1, expands to 3 for readability
|
|
18571
|
+
*/
|
|
18572
|
+
calculateQuotationLayoutPreferences(section, availableColumns) {
|
|
18573
|
+
const fields = section.fields ?? [];
|
|
18574
|
+
const fieldCount = fields.length;
|
|
18575
|
+
const descriptionLength = section.description?.length ?? 0;
|
|
18576
|
+
// Quotation sections: 2 cols default, can shrink to 1, expands to 3 for readability
|
|
18577
|
+
let preferredColumns = 2;
|
|
18578
|
+
if (descriptionLength > 300 && availableColumns >= 3) {
|
|
18579
|
+
preferredColumns = 3;
|
|
18580
|
+
}
|
|
18581
|
+
if (fieldCount <= 1) {
|
|
18582
|
+
preferredColumns = 1;
|
|
18583
|
+
}
|
|
18584
|
+
// Respect explicit preferences
|
|
18585
|
+
if (section.preferredColumns) {
|
|
18586
|
+
preferredColumns = section.preferredColumns;
|
|
18587
|
+
}
|
|
18588
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18589
|
+
return {
|
|
18590
|
+
preferredColumns,
|
|
18591
|
+
minColumns: (section.minColumns ?? 1),
|
|
18592
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18593
|
+
canShrinkToFill: true,
|
|
18594
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18595
|
+
expandOnContent: {
|
|
18596
|
+
descriptionLength: 300, // Expand to 3 columns for long quotes
|
|
18597
|
+
},
|
|
18598
|
+
};
|
|
18599
|
+
}
|
|
18600
|
+
/**
|
|
18601
|
+
* Get layout preferences for quotation section.
|
|
18602
|
+
*/
|
|
18603
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18604
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18605
|
+
if (servicePrefs) {
|
|
18606
|
+
return servicePrefs;
|
|
18607
|
+
}
|
|
18608
|
+
return this.calculateQuotationLayoutPreferences(this.section, availableColumns);
|
|
18609
|
+
}
|
|
17521
18610
|
/**
|
|
17522
18611
|
* Get quote text
|
|
17523
18612
|
*/
|
|
@@ -17550,6 +18639,57 @@ var quotationSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17550
18639
|
* Features: platform icons, follower counts, verification badges.
|
|
17551
18640
|
*/
|
|
17552
18641
|
class SocialMediaSectionComponent extends BaseSectionComponent {
|
|
18642
|
+
constructor() {
|
|
18643
|
+
super(...arguments);
|
|
18644
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18645
|
+
}
|
|
18646
|
+
ngOnInit() {
|
|
18647
|
+
// Register layout preference function for this section type
|
|
18648
|
+
this.layoutService.register('social-media', (section, availableColumns) => {
|
|
18649
|
+
return this.calculateSocialMediaLayoutPreferences(section, availableColumns);
|
|
18650
|
+
});
|
|
18651
|
+
}
|
|
18652
|
+
/**
|
|
18653
|
+
* Calculate layout preferences for social media section based on content.
|
|
18654
|
+
* Social media sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18655
|
+
*/
|
|
18656
|
+
calculateSocialMediaLayoutPreferences(section, availableColumns) {
|
|
18657
|
+
const items = section.items ?? [];
|
|
18658
|
+
const itemCount = items.length;
|
|
18659
|
+
// Social media sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18660
|
+
let preferredColumns = 2;
|
|
18661
|
+
if (itemCount >= 5 && availableColumns >= 3) {
|
|
18662
|
+
preferredColumns = 3;
|
|
18663
|
+
}
|
|
18664
|
+
if (itemCount <= 2) {
|
|
18665
|
+
preferredColumns = 1;
|
|
18666
|
+
}
|
|
18667
|
+
// Respect explicit preferences
|
|
18668
|
+
if (section.preferredColumns) {
|
|
18669
|
+
preferredColumns = section.preferredColumns;
|
|
18670
|
+
}
|
|
18671
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18672
|
+
return {
|
|
18673
|
+
preferredColumns,
|
|
18674
|
+
minColumns: (section.minColumns ?? 1),
|
|
18675
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18676
|
+
canShrinkToFill: true,
|
|
18677
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18678
|
+
expandOnContent: {
|
|
18679
|
+
itemCount: 5, // Expand to 3 columns at 5+ platforms
|
|
18680
|
+
},
|
|
18681
|
+
};
|
|
18682
|
+
}
|
|
18683
|
+
/**
|
|
18684
|
+
* Get layout preferences for social media section.
|
|
18685
|
+
*/
|
|
18686
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18687
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18688
|
+
if (servicePrefs) {
|
|
18689
|
+
return servicePrefs;
|
|
18690
|
+
}
|
|
18691
|
+
return this.calculateSocialMediaLayoutPreferences(this.section, availableColumns);
|
|
18692
|
+
}
|
|
17553
18693
|
/**
|
|
17554
18694
|
* Get platform icon (emoji fallback)
|
|
17555
18695
|
*/
|
|
@@ -17599,6 +18739,57 @@ var socialMediaSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17599
18739
|
* Features: benefits, complexity indicators, delivery timeframes.
|
|
17600
18740
|
*/
|
|
17601
18741
|
class SolutionsSectionComponent extends BaseSectionComponent {
|
|
18742
|
+
constructor() {
|
|
18743
|
+
super(...arguments);
|
|
18744
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18745
|
+
}
|
|
18746
|
+
ngOnInit() {
|
|
18747
|
+
// Register layout preference function for this section type
|
|
18748
|
+
this.layoutService.register('solutions', (section, availableColumns) => {
|
|
18749
|
+
return this.calculateSolutionsLayoutPreferences(section, availableColumns);
|
|
18750
|
+
});
|
|
18751
|
+
}
|
|
18752
|
+
/**
|
|
18753
|
+
* Calculate layout preferences for solutions section based on content.
|
|
18754
|
+
* Solutions sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18755
|
+
*/
|
|
18756
|
+
calculateSolutionsLayoutPreferences(section, availableColumns) {
|
|
18757
|
+
const items = section.items ?? [];
|
|
18758
|
+
const itemCount = items.length;
|
|
18759
|
+
// Solutions sections: 2 cols default, can shrink to 1, expands based on item count
|
|
18760
|
+
let preferredColumns = 2;
|
|
18761
|
+
if (itemCount >= 5 && availableColumns >= 3) {
|
|
18762
|
+
preferredColumns = 3;
|
|
18763
|
+
}
|
|
18764
|
+
if (itemCount <= 2) {
|
|
18765
|
+
preferredColumns = 1;
|
|
18766
|
+
}
|
|
18767
|
+
// Respect explicit preferences
|
|
18768
|
+
if (section.preferredColumns) {
|
|
18769
|
+
preferredColumns = section.preferredColumns;
|
|
18770
|
+
}
|
|
18771
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18772
|
+
return {
|
|
18773
|
+
preferredColumns,
|
|
18774
|
+
minColumns: (section.minColumns ?? 1),
|
|
18775
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18776
|
+
canShrinkToFill: true,
|
|
18777
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18778
|
+
expandOnContent: {
|
|
18779
|
+
itemCount: 5, // Expand to 3 columns at 5+ solutions
|
|
18780
|
+
},
|
|
18781
|
+
};
|
|
18782
|
+
}
|
|
18783
|
+
/**
|
|
18784
|
+
* Get layout preferences for solutions section.
|
|
18785
|
+
*/
|
|
18786
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18787
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18788
|
+
if (servicePrefs) {
|
|
18789
|
+
return servicePrefs;
|
|
18790
|
+
}
|
|
18791
|
+
return this.calculateSolutionsLayoutPreferences(this.section, availableColumns);
|
|
18792
|
+
}
|
|
17602
18793
|
/**
|
|
17603
18794
|
* Get complexity class (deprecated)
|
|
17604
18795
|
*/
|
|
@@ -17642,6 +18833,58 @@ var solutionsSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17642
18833
|
* Perfect for articles, research summaries, and resource libraries.
|
|
17643
18834
|
*/
|
|
17644
18835
|
class TextReferenceSectionComponent extends BaseSectionComponent {
|
|
18836
|
+
constructor() {
|
|
18837
|
+
super(...arguments);
|
|
18838
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18839
|
+
}
|
|
18840
|
+
ngOnInit() {
|
|
18841
|
+
// Register layout preference function for this section type
|
|
18842
|
+
this.layoutService.register('text-reference', (section, availableColumns) => {
|
|
18843
|
+
return this.calculateTextReferenceLayoutPreferences(section, availableColumns);
|
|
18844
|
+
});
|
|
18845
|
+
}
|
|
18846
|
+
/**
|
|
18847
|
+
* Calculate layout preferences for text reference section based on content.
|
|
18848
|
+
* Text reference sections: 2 cols default, can shrink to 1, expands to 3 for readability
|
|
18849
|
+
*/
|
|
18850
|
+
calculateTextReferenceLayoutPreferences(section, availableColumns) {
|
|
18851
|
+
const fields = section.fields ?? [];
|
|
18852
|
+
const fieldCount = fields.length;
|
|
18853
|
+
const descriptionLength = section.description?.length ?? 0;
|
|
18854
|
+
// Text reference sections: 2 cols default, can shrink to 1, expands to 3 for readability
|
|
18855
|
+
let preferredColumns = 2;
|
|
18856
|
+
if (descriptionLength > 300 && availableColumns >= 3) {
|
|
18857
|
+
preferredColumns = 3;
|
|
18858
|
+
}
|
|
18859
|
+
if (fieldCount <= 1) {
|
|
18860
|
+
preferredColumns = 1;
|
|
18861
|
+
}
|
|
18862
|
+
// Respect explicit preferences
|
|
18863
|
+
if (section.preferredColumns) {
|
|
18864
|
+
preferredColumns = section.preferredColumns;
|
|
18865
|
+
}
|
|
18866
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18867
|
+
return {
|
|
18868
|
+
preferredColumns,
|
|
18869
|
+
minColumns: (section.minColumns ?? 1),
|
|
18870
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18871
|
+
canShrinkToFill: true,
|
|
18872
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18873
|
+
expandOnContent: {
|
|
18874
|
+
descriptionLength: 300, // Expand to 3 columns for long text
|
|
18875
|
+
},
|
|
18876
|
+
};
|
|
18877
|
+
}
|
|
18878
|
+
/**
|
|
18879
|
+
* Get layout preferences for text reference section.
|
|
18880
|
+
*/
|
|
18881
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18882
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18883
|
+
if (servicePrefs) {
|
|
18884
|
+
return servicePrefs;
|
|
18885
|
+
}
|
|
18886
|
+
return this.calculateTextReferenceLayoutPreferences(this.section, availableColumns);
|
|
18887
|
+
}
|
|
17645
18888
|
/**
|
|
17646
18889
|
* Get reference title
|
|
17647
18890
|
*/
|
|
@@ -17674,6 +18917,57 @@ var textReferenceSection_component = /*#__PURE__*/Object.freeze({
|
|
|
17674
18917
|
* Features: vertical timeline, date markers, status indicators.
|
|
17675
18918
|
*/
|
|
17676
18919
|
class TimelineSectionComponent extends BaseSectionComponent {
|
|
18920
|
+
constructor() {
|
|
18921
|
+
super(...arguments);
|
|
18922
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
18923
|
+
}
|
|
18924
|
+
ngOnInit() {
|
|
18925
|
+
// Register layout preference function for this section type
|
|
18926
|
+
this.layoutService.register('timeline', (section, availableColumns) => {
|
|
18927
|
+
return this.calculateTimelineLayoutPreferences(section, availableColumns);
|
|
18928
|
+
});
|
|
18929
|
+
}
|
|
18930
|
+
/**
|
|
18931
|
+
* Calculate layout preferences for timeline section based on content.
|
|
18932
|
+
* Timeline sections: 3 cols default, can shrink to 1-2
|
|
18933
|
+
*/
|
|
18934
|
+
calculateTimelineLayoutPreferences(section, availableColumns) {
|
|
18935
|
+
const items = section.items ?? [];
|
|
18936
|
+
const itemCount = items.length;
|
|
18937
|
+
// Timeline sections: 3 cols default, can shrink to 1-2
|
|
18938
|
+
let preferredColumns = 3;
|
|
18939
|
+
if (itemCount <= 3) {
|
|
18940
|
+
preferredColumns = 2;
|
|
18941
|
+
}
|
|
18942
|
+
if (itemCount <= 1) {
|
|
18943
|
+
preferredColumns = 1;
|
|
18944
|
+
}
|
|
18945
|
+
// Respect explicit preferences
|
|
18946
|
+
if (section.preferredColumns) {
|
|
18947
|
+
preferredColumns = section.preferredColumns;
|
|
18948
|
+
}
|
|
18949
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
18950
|
+
return {
|
|
18951
|
+
preferredColumns,
|
|
18952
|
+
minColumns: (section.minColumns ?? 1),
|
|
18953
|
+
maxColumns: Math.min((section.maxColumns ?? 3), availableColumns),
|
|
18954
|
+
canShrinkToFill: true,
|
|
18955
|
+
shrinkPriority: 22, // Higher priority for shrinking (promotes side-by-side placement)
|
|
18956
|
+
expandOnContent: {
|
|
18957
|
+
itemCount: 4, // Expand to 3 columns at 4+ items
|
|
18958
|
+
},
|
|
18959
|
+
};
|
|
18960
|
+
}
|
|
18961
|
+
/**
|
|
18962
|
+
* Get layout preferences for timeline section.
|
|
18963
|
+
*/
|
|
18964
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
18965
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
18966
|
+
if (servicePrefs) {
|
|
18967
|
+
return servicePrefs;
|
|
18968
|
+
}
|
|
18969
|
+
return this.calculateTimelineLayoutPreferences(this.section, availableColumns);
|
|
18970
|
+
}
|
|
17677
18971
|
/**
|
|
17678
18972
|
* Get date display
|
|
17679
18973
|
*/
|
|
@@ -17706,6 +19000,54 @@ class VideoSectionComponent extends BaseSectionComponent {
|
|
|
17706
19000
|
constructor(sanitizer) {
|
|
17707
19001
|
super();
|
|
17708
19002
|
this.sanitizer = sanitizer;
|
|
19003
|
+
this.layoutService = inject(SectionLayoutPreferenceService);
|
|
19004
|
+
}
|
|
19005
|
+
ngOnInit() {
|
|
19006
|
+
// Register layout preference function for this section type
|
|
19007
|
+
this.layoutService.register('video', (section, availableColumns) => {
|
|
19008
|
+
return this.calculateVideoLayoutPreferences(section, availableColumns);
|
|
19009
|
+
});
|
|
19010
|
+
}
|
|
19011
|
+
/**
|
|
19012
|
+
* Calculate layout preferences for video section based on content.
|
|
19013
|
+
* Video sections: 2 cols default, can shrink to 1, expands to 3-4 for wide videos
|
|
19014
|
+
*/
|
|
19015
|
+
calculateVideoLayoutPreferences(section, availableColumns) {
|
|
19016
|
+
const items = section.items ?? [];
|
|
19017
|
+
const itemCount = items.length;
|
|
19018
|
+
// Video sections: 2 cols default, can shrink to 1, expands to 3-4 for wide videos
|
|
19019
|
+
let preferredColumns = 2;
|
|
19020
|
+
if (itemCount >= 3 && availableColumns >= 3) {
|
|
19021
|
+
preferredColumns = 3;
|
|
19022
|
+
}
|
|
19023
|
+
if (itemCount <= 1) {
|
|
19024
|
+
preferredColumns = 1;
|
|
19025
|
+
}
|
|
19026
|
+
// Respect explicit preferences
|
|
19027
|
+
if (section.preferredColumns) {
|
|
19028
|
+
preferredColumns = section.preferredColumns;
|
|
19029
|
+
}
|
|
19030
|
+
preferredColumns = Math.min(preferredColumns, availableColumns);
|
|
19031
|
+
return {
|
|
19032
|
+
preferredColumns,
|
|
19033
|
+
minColumns: (section.minColumns ?? 1),
|
|
19034
|
+
maxColumns: Math.min((section.maxColumns ?? 4), availableColumns),
|
|
19035
|
+
canShrinkToFill: true,
|
|
19036
|
+
shrinkPriority: 25, // Higher priority for shrinking (promotes side-by-side placement)
|
|
19037
|
+
expandOnContent: {
|
|
19038
|
+
itemCount: 3, // Expand to 3 columns at 3+ videos
|
|
19039
|
+
},
|
|
19040
|
+
};
|
|
19041
|
+
}
|
|
19042
|
+
/**
|
|
19043
|
+
* Get layout preferences for video section.
|
|
19044
|
+
*/
|
|
19045
|
+
getLayoutPreferences(availableColumns = 4) {
|
|
19046
|
+
const servicePrefs = this.layoutService.getPreferences(this.section, availableColumns);
|
|
19047
|
+
if (servicePrefs) {
|
|
19048
|
+
return servicePrefs;
|
|
19049
|
+
}
|
|
19050
|
+
return this.calculateVideoLayoutPreferences(this.section, availableColumns);
|
|
17709
19051
|
}
|
|
17710
19052
|
/**
|
|
17711
19053
|
* Get video URL
|
|
@@ -20659,6 +22001,146 @@ function createAnalyticsPreset(options) {
|
|
|
20659
22001
|
* Factory functions and presets for common card configurations
|
|
20660
22002
|
*/
|
|
20661
22003
|
|
|
22004
|
+
/**
|
|
22005
|
+
* Card Actions Component
|
|
22006
|
+
*
|
|
22007
|
+
* Renders card-level action buttons (CTAs).
|
|
22008
|
+
* Extracted from AICardRendererComponent for better separation of concerns.
|
|
22009
|
+
*
|
|
22010
|
+
* Uses ViewEncapsulation.None to allow styles to be inherited from
|
|
22011
|
+
* the parent Shadow DOM (ai-card-renderer).
|
|
22012
|
+
*/
|
|
22013
|
+
class CardActionsComponent {
|
|
22014
|
+
constructor() {
|
|
22015
|
+
this.iconService = inject(IconService);
|
|
22016
|
+
this.actions = [];
|
|
22017
|
+
this.actionClick = new EventEmitter();
|
|
22018
|
+
this.trackAction = (_index, action) => action.id ?? `${action.label}-${_index}`;
|
|
22019
|
+
}
|
|
22020
|
+
onActionClick(action) {
|
|
22021
|
+
this.actionClick.emit(action);
|
|
22022
|
+
}
|
|
22023
|
+
getActionIconName(action) {
|
|
22024
|
+
// If icon is explicitly provided, use it
|
|
22025
|
+
if (action.icon) {
|
|
22026
|
+
return this.iconService.getFieldIcon(action.icon);
|
|
22027
|
+
}
|
|
22028
|
+
// If type is specified and it's a button behavior type (not legacy styling), use default icons
|
|
22029
|
+
if (action.type && ['mail', 'website', 'agent', 'question'].includes(action.type)) {
|
|
22030
|
+
switch (action.type) {
|
|
22031
|
+
case 'mail':
|
|
22032
|
+
return 'mail';
|
|
22033
|
+
case 'website':
|
|
22034
|
+
return 'external-link';
|
|
22035
|
+
case 'agent':
|
|
22036
|
+
return 'user';
|
|
22037
|
+
case 'question':
|
|
22038
|
+
return 'message-circle';
|
|
22039
|
+
default:
|
|
22040
|
+
break;
|
|
22041
|
+
}
|
|
22042
|
+
}
|
|
22043
|
+
// Fallback to deriving icon from label
|
|
22044
|
+
return this.iconService.getFieldIcon(action.label);
|
|
22045
|
+
}
|
|
22046
|
+
getDefaultIconForButtonType(buttonType) {
|
|
22047
|
+
if (!buttonType || !['mail', 'website', 'agent', 'question'].includes(buttonType)) {
|
|
22048
|
+
return null;
|
|
22049
|
+
}
|
|
22050
|
+
switch (buttonType) {
|
|
22051
|
+
case 'mail':
|
|
22052
|
+
return 'mail';
|
|
22053
|
+
case 'website':
|
|
22054
|
+
return 'external-link';
|
|
22055
|
+
case 'agent':
|
|
22056
|
+
return 'user';
|
|
22057
|
+
case 'question':
|
|
22058
|
+
return 'message-circle';
|
|
22059
|
+
default:
|
|
22060
|
+
return null;
|
|
22061
|
+
}
|
|
22062
|
+
}
|
|
22063
|
+
getActionIconNameForDisplay(action) {
|
|
22064
|
+
// If explicit icon is provided and it's a URL, return null (will be handled as image)
|
|
22065
|
+
if (action.icon && action.icon.startsWith('http')) {
|
|
22066
|
+
return null;
|
|
22067
|
+
}
|
|
22068
|
+
// If explicit icon is provided and it's a lucide icon name, use it
|
|
22069
|
+
if (action.icon && !action.icon.startsWith('http')) {
|
|
22070
|
+
// Check if it's a lucide icon name (simple string like 'mail', 'user', etc.)
|
|
22071
|
+
if (/^[a-z-]+$/i.test(action.icon)) {
|
|
22072
|
+
return this.getActionIconName(action);
|
|
22073
|
+
}
|
|
22074
|
+
// Otherwise it's a text icon, return null (will be handled as text)
|
|
22075
|
+
return null;
|
|
22076
|
+
}
|
|
22077
|
+
// If no explicit icon, check if type is a button behavior type with default icon
|
|
22078
|
+
if (action.type && ['mail', 'website', 'agent', 'question'].includes(action.type)) {
|
|
22079
|
+
return this.getDefaultIconForButtonType(action.type);
|
|
22080
|
+
}
|
|
22081
|
+
// Fallback: try to derive icon from label
|
|
22082
|
+
const derivedIcon = this.getActionIconName(action);
|
|
22083
|
+
// Only use if it's a valid lucide icon name (simple string)
|
|
22084
|
+
if (derivedIcon && /^[a-z-]+$/i.test(derivedIcon)) {
|
|
22085
|
+
return derivedIcon;
|
|
22086
|
+
}
|
|
22087
|
+
return null;
|
|
22088
|
+
}
|
|
22089
|
+
hasTextIcon(action) {
|
|
22090
|
+
return !!(action.icon && !action.icon.startsWith('http') && !/^[a-z-]+$/i.test(action.icon));
|
|
22091
|
+
}
|
|
22092
|
+
hasImageIcon(action) {
|
|
22093
|
+
return !!(action.icon && action.icon.startsWith('http'));
|
|
22094
|
+
}
|
|
22095
|
+
/**
|
|
22096
|
+
* Get comprehensive ARIA label for action button
|
|
22097
|
+
*/
|
|
22098
|
+
getActionAriaLabel(action) {
|
|
22099
|
+
let label = action.label;
|
|
22100
|
+
if (action.type === 'website' && action.url) {
|
|
22101
|
+
label += `: Opens ${action.url} in new window`;
|
|
22102
|
+
}
|
|
22103
|
+
else if (action.type === 'mail') {
|
|
22104
|
+
const email = action.email?.to || action.email?.contact?.email || 'email';
|
|
22105
|
+
label += `: Opens email to ${email}`;
|
|
22106
|
+
}
|
|
22107
|
+
else if (action.type === 'agent') {
|
|
22108
|
+
label += ': Triggers agent action';
|
|
22109
|
+
}
|
|
22110
|
+
else if (action.type === 'question') {
|
|
22111
|
+
label += ': Opens chat question';
|
|
22112
|
+
}
|
|
22113
|
+
return label;
|
|
22114
|
+
}
|
|
22115
|
+
getActionButtonClasses(action) {
|
|
22116
|
+
const primaryClasses = 'bg-[var(--color-brand)] text-white font-semibold border-0 hover:bg-[var(--color-brand)]/90 hover:shadow-lg hover:shadow-[var(--color-brand)]/40 active:scale-95';
|
|
22117
|
+
const outlineClasses = 'text-[var(--color-brand)] border border-[var(--color-brand)] bg-transparent font-semibold hover:bg-[var(--color-brand)]/10 active:scale-95';
|
|
22118
|
+
const ghostClasses = 'text-[var(--color-brand)] bg-transparent border-0 font-semibold hover:bg-[var(--color-brand)]/10 active:scale-95';
|
|
22119
|
+
// Use variant field if present, otherwise check legacy type field for styling
|
|
22120
|
+
const styleVariant = action.variant ||
|
|
22121
|
+
(action.type === 'primary' || action.type === 'secondary' ? action.type : 'primary');
|
|
22122
|
+
switch (styleVariant) {
|
|
22123
|
+
case 'secondary':
|
|
22124
|
+
case 'outline':
|
|
22125
|
+
return outlineClasses;
|
|
22126
|
+
case 'ghost':
|
|
22127
|
+
return ghostClasses;
|
|
22128
|
+
default:
|
|
22129
|
+
return primaryClasses;
|
|
22130
|
+
}
|
|
22131
|
+
}
|
|
22132
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CardActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22133
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CardActionsComponent, isStandalone: true, selector: "app-card-actions", inputs: { actions: "actions" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<ng-container *ngFor=\"let action of actions; trackBy: trackAction; let i = index\">\n <button\n type=\"button\"\n class=\"osi-action-button\"\n [class.osi-action-button--primary]=\"!action.variant || action.variant === 'primary'\"\n [class.osi-action-button--secondary]=\"action.variant === 'secondary' || action.variant === 'outline'\"\n [attr.aria-label]=\"getActionAriaLabel(action)\"\n [attr.aria-describedby]=\"action.type === 'mail' ? 'action-mail-hint-' + i : null\"\n (click)=\"onActionClick(action)\"\n (keydown.enter)=\"onActionClick(action)\"\n (keydown.space)=\"$event.preventDefault(); onActionClick(action)\"\n >\n <!-- Lucide icon (for type defaults or explicit lucide icon names) -->\n <lucide-icon\n *ngIf=\"getActionIconNameForDisplay(action) as iconName\"\n [name]=\"iconName\"\n [size]=\"16\"\n aria-hidden=\"true\"\n >\n </lucide-icon>\n <!-- Image icon (for URL-based icons) -->\n <img\n *ngIf=\"hasImageIcon(action)\"\n [src]=\"action.icon\"\n [alt]=\"action.label + ' icon'\"\n class=\"osi-action-button__icon\"\n aria-hidden=\"true\"\n />\n <!-- Text icon (for emoji or text-based icons) -->\n <span *ngIf=\"hasTextIcon(action)\" class=\"osi-action-button__emoji\" aria-hidden=\"true\">{{ action.icon }}</span>\n <span class=\"osi-action-button__label\">{{ action.label }}</span>\n <!-- Hidden hint for mail actions -->\n <span *ngIf=\"action.type === 'mail'\" [id]=\"'action-mail-hint-' + i\" class=\"sr-only\">\n This will open your email client with pre-filled recipient and message\n </span>\n </button>\n</ng-container>\n", styles: [":host{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:.75rem!important;margin-top:var(--section-card-gap, 12px)!important;margin-left:4px!important;margin-right:4px!important;padding-bottom:16px!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important}.osi-action-button{margin:0!important;-webkit-appearance:none!important;appearance:none!important;display:inline-flex!important;align-items:center!important;gap:.5rem!important;padding:.625rem 1.25rem!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:.875rem!important;font-weight:600!important;line-height:1.25rem!important;text-decoration:none!important;white-space:nowrap!important;cursor:pointer!important;border-radius:10px!important;transition:all .2s ease!important;box-sizing:border-box!important}.osi-action-button--primary{background-color:#ff7900!important;color:#fff!important;border:none!important;box-shadow:0 2px 8px #ff790040!important}.osi-action-button--primary *{color:#fff!important}.osi-action-button--primary:hover{background-color:#e66d00!important;color:#fff!important;box-shadow:0 4px 16px #ff790066!important;transform:translateY(-1px)!important}.osi-action-button--primary:active{background-color:#cc6000!important;color:#fff!important;transform:scale(.98) translateY(0)!important;box-shadow:0 2px 4px #ff790033!important}.osi-action-button--primary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button--secondary{background-color:transparent!important;color:#fff!important;border:2px solid #ff7900!important}.osi-action-button--secondary *{color:#fff!important}.osi-action-button--secondary:hover{background-color:#ff79001a!important;color:#fff!important;box-shadow:0 2px 8px #ff790033!important}.osi-action-button--secondary:active{background-color:#ff790026!important;color:#fff!important;transform:scale(.98)!important}.osi-action-button--secondary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button__label{color:#fff!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.osi-action-button__icon{width:18px!important;height:18px!important;object-fit:contain!important;flex-shrink:0!important}.osi-action-button__emoji{font-size:16px!important;line-height:1!important;flex-shrink:0!important}.osi-action-button lucide-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important;color:#fff!important}.osi-action-button lucide-icon svg{width:16px!important;height:16px!important;stroke:#fff!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: LucideIconsModule }, { kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
22134
|
+
}
|
|
22135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CardActionsComponent, decorators: [{
|
|
22136
|
+
type: Component,
|
|
22137
|
+
args: [{ selector: 'app-card-actions', standalone: true, imports: [CommonModule, LucideIconsModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let action of actions; trackBy: trackAction; let i = index\">\n <button\n type=\"button\"\n class=\"osi-action-button\"\n [class.osi-action-button--primary]=\"!action.variant || action.variant === 'primary'\"\n [class.osi-action-button--secondary]=\"action.variant === 'secondary' || action.variant === 'outline'\"\n [attr.aria-label]=\"getActionAriaLabel(action)\"\n [attr.aria-describedby]=\"action.type === 'mail' ? 'action-mail-hint-' + i : null\"\n (click)=\"onActionClick(action)\"\n (keydown.enter)=\"onActionClick(action)\"\n (keydown.space)=\"$event.preventDefault(); onActionClick(action)\"\n >\n <!-- Lucide icon (for type defaults or explicit lucide icon names) -->\n <lucide-icon\n *ngIf=\"getActionIconNameForDisplay(action) as iconName\"\n [name]=\"iconName\"\n [size]=\"16\"\n aria-hidden=\"true\"\n >\n </lucide-icon>\n <!-- Image icon (for URL-based icons) -->\n <img\n *ngIf=\"hasImageIcon(action)\"\n [src]=\"action.icon\"\n [alt]=\"action.label + ' icon'\"\n class=\"osi-action-button__icon\"\n aria-hidden=\"true\"\n />\n <!-- Text icon (for emoji or text-based icons) -->\n <span *ngIf=\"hasTextIcon(action)\" class=\"osi-action-button__emoji\" aria-hidden=\"true\">{{ action.icon }}</span>\n <span class=\"osi-action-button__label\">{{ action.label }}</span>\n <!-- Hidden hint for mail actions -->\n <span *ngIf=\"action.type === 'mail'\" [id]=\"'action-mail-hint-' + i\" class=\"sr-only\">\n This will open your email client with pre-filled recipient and message\n </span>\n </button>\n</ng-container>\n", styles: [":host{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:.75rem!important;margin-top:var(--section-card-gap, 12px)!important;margin-left:4px!important;margin-right:4px!important;padding-bottom:16px!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important}.osi-action-button{margin:0!important;-webkit-appearance:none!important;appearance:none!important;display:inline-flex!important;align-items:center!important;gap:.5rem!important;padding:.625rem 1.25rem!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:.875rem!important;font-weight:600!important;line-height:1.25rem!important;text-decoration:none!important;white-space:nowrap!important;cursor:pointer!important;border-radius:10px!important;transition:all .2s ease!important;box-sizing:border-box!important}.osi-action-button--primary{background-color:#ff7900!important;color:#fff!important;border:none!important;box-shadow:0 2px 8px #ff790040!important}.osi-action-button--primary *{color:#fff!important}.osi-action-button--primary:hover{background-color:#e66d00!important;color:#fff!important;box-shadow:0 4px 16px #ff790066!important;transform:translateY(-1px)!important}.osi-action-button--primary:active{background-color:#cc6000!important;color:#fff!important;transform:scale(.98) translateY(0)!important;box-shadow:0 2px 4px #ff790033!important}.osi-action-button--primary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button--secondary{background-color:transparent!important;color:#fff!important;border:2px solid #ff7900!important}.osi-action-button--secondary *{color:#fff!important}.osi-action-button--secondary:hover{background-color:#ff79001a!important;color:#fff!important;box-shadow:0 2px 8px #ff790033!important}.osi-action-button--secondary:active{background-color:#ff790026!important;color:#fff!important;transform:scale(.98)!important}.osi-action-button--secondary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button__label{color:#fff!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.osi-action-button__icon{width:18px!important;height:18px!important;object-fit:contain!important;flex-shrink:0!important}.osi-action-button__emoji{font-size:16px!important;line-height:1!important;flex-shrink:0!important}.osi-action-button lucide-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important;color:#fff!important}.osi-action-button lucide-icon svg{width:16px!important;height:16px!important;stroke:#fff!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}\n"] }]
|
|
22138
|
+
}], propDecorators: { actions: [{
|
|
22139
|
+
type: Input
|
|
22140
|
+
}], actionClick: [{
|
|
22141
|
+
type: Output
|
|
22142
|
+
}] } });
|
|
22143
|
+
|
|
20662
22144
|
/**
|
|
20663
22145
|
* Card Header Component
|
|
20664
22146
|
*
|
|
@@ -21153,7 +22635,7 @@ const SECTION_HEIGHT_ESTIMATES$1 = {
|
|
|
21153
22635
|
list: 220,
|
|
21154
22636
|
event: 240,
|
|
21155
22637
|
timeline: 240,
|
|
21156
|
-
product:
|
|
22638
|
+
product: 220,
|
|
21157
22639
|
solutions: 240,
|
|
21158
22640
|
quotation: 160,
|
|
21159
22641
|
'text-reference': 180,
|
|
@@ -22629,7 +24111,7 @@ const SECTION_HEIGHT_ESTIMATES = {
|
|
|
22629
24111
|
list: 220,
|
|
22630
24112
|
event: 240,
|
|
22631
24113
|
timeline: 240,
|
|
22632
|
-
product:
|
|
24114
|
+
product: 220,
|
|
22633
24115
|
solutions: 240,
|
|
22634
24116
|
quotation: 160,
|
|
22635
24117
|
'text-reference': 180,
|
|
@@ -22662,19 +24144,177 @@ const DEFAULT_COLUMN_PACKER_CONFIG = {
|
|
|
22662
24144
|
packingMode: 'ffdh',
|
|
22663
24145
|
allowReordering: true,
|
|
22664
24146
|
sortByHeight: true,
|
|
22665
|
-
useSkylineThreshold:
|
|
24147
|
+
useSkylineThreshold: 1, // Very aggressive: Switch to Skyline at first gap
|
|
24148
|
+
optimizationPasses: 4, // Increased: More passes for maximum compactness
|
|
24149
|
+
enableGapAwarePlacement: true, // Consider gap creation when placing
|
|
22666
24150
|
};
|
|
22667
24151
|
// ============================================================================
|
|
22668
24152
|
// FFDH PACKING ALGORITHM
|
|
22669
24153
|
// ============================================================================
|
|
22670
24154
|
/**
|
|
22671
|
-
* Finds the best column position for a section using FFDH
|
|
22672
|
-
* Returns the column index where the section should be placed
|
|
24155
|
+
* Finds the best column position for a section using FFDH
|
|
24156
|
+
* Returns the column index where the section should be placed
|
|
24157
|
+
*/
|
|
24158
|
+
function findShortestColumn(colHeights, colSpan, columns) {
|
|
24159
|
+
let bestColumn = 0;
|
|
24160
|
+
let minHeight = Infinity;
|
|
24161
|
+
// Try all possible column positions
|
|
24162
|
+
for (let col = 0; col <= columns - colSpan; col++) {
|
|
24163
|
+
// Find the maximum height among columns this section would span
|
|
24164
|
+
let maxColHeight = 0;
|
|
24165
|
+
for (let c = col; c < col + colSpan; c++) {
|
|
24166
|
+
const colHeight = colHeights[c] ?? 0;
|
|
24167
|
+
if (colHeight > maxColHeight) {
|
|
24168
|
+
maxColHeight = colHeight;
|
|
24169
|
+
}
|
|
24170
|
+
}
|
|
24171
|
+
// Choose the position with the lowest maximum height (shortest column)
|
|
24172
|
+
if (maxColHeight < minHeight) {
|
|
24173
|
+
minHeight = maxColHeight;
|
|
24174
|
+
bestColumn = col;
|
|
24175
|
+
}
|
|
24176
|
+
}
|
|
24177
|
+
return bestColumn;
|
|
24178
|
+
}
|
|
24179
|
+
/**
|
|
24180
|
+
* Packs sections using FFDH (First Fit Decreasing Height) algorithm
|
|
24181
|
+
* Enhanced with gap-aware placement and multi-pass optimization
|
|
24182
|
+
*/
|
|
24183
|
+
function packWithFFDH(sectionsWithMetrics, columns, gap, optimizePasses = 1) {
|
|
24184
|
+
let positioned = [];
|
|
24185
|
+
let bestPositioned = [];
|
|
24186
|
+
let bestMetrics = { gapCount: Infinity, heightVariance: Infinity, totalHeight: Infinity };
|
|
24187
|
+
// Multi-pass optimization: try different strategies and pick the best
|
|
24188
|
+
for (let pass = 0; pass < optimizePasses; pass++) {
|
|
24189
|
+
const colHeights = new Array(columns).fill(0);
|
|
24190
|
+
positioned = [];
|
|
24191
|
+
// Strategy variation: try different sorting strategies for better consolidation
|
|
24192
|
+
let orderedSections = sectionsWithMetrics;
|
|
24193
|
+
if (pass > 0) {
|
|
24194
|
+
// Alternate strategies for different passes
|
|
24195
|
+
if (pass % 3 === 1) {
|
|
24196
|
+
// Single-column first: prioritize 1-column sections to maximize side-by-side placement
|
|
24197
|
+
orderedSections = [...sectionsWithMetrics].sort((a, b) => {
|
|
24198
|
+
const aIsSingle = a.colSpan === 1 ? 1 : 0;
|
|
24199
|
+
const bIsSingle = b.colSpan === 1 ? 1 : 0;
|
|
24200
|
+
if (aIsSingle !== bIsSingle)
|
|
24201
|
+
return bIsSingle - aIsSingle; // Single columns first
|
|
24202
|
+
return b.height - a.height; // Then by height
|
|
24203
|
+
});
|
|
24204
|
+
}
|
|
24205
|
+
else if (pass % 3 === 2) {
|
|
24206
|
+
// Density-first: prioritize sections with more content
|
|
24207
|
+
orderedSections = [...sectionsWithMetrics].sort((a, b) => {
|
|
24208
|
+
const densityA = (a.section.items?.length ?? 0) + (a.section.fields?.length ?? 0);
|
|
24209
|
+
const densityB = (b.section.items?.length ?? 0) + (b.section.fields?.length ?? 0);
|
|
24210
|
+
return densityB - densityA;
|
|
24211
|
+
});
|
|
24212
|
+
}
|
|
24213
|
+
else {
|
|
24214
|
+
// Width-first: prioritize wider sections to fill rows better
|
|
24215
|
+
orderedSections = [...sectionsWithMetrics].sort((a, b) => b.colSpan - a.colSpan);
|
|
24216
|
+
}
|
|
24217
|
+
}
|
|
24218
|
+
for (const item of orderedSections) {
|
|
24219
|
+
const { section, height, colSpan, preferredColumns, originalIndex, canShrinkToFill } = item;
|
|
24220
|
+
// AGGRESSIVE SHRINKING: Try shrinking to 1 column if canShrinkToFill is true
|
|
24221
|
+
// This maximizes horizontal space utilization by placing more sections side by side
|
|
24222
|
+
let effectiveColSpan = Math.min(colSpan, columns);
|
|
24223
|
+
if (canShrinkToFill && effectiveColSpan > 1) {
|
|
24224
|
+
// Check if shrinking to 1 column would fill a gap better
|
|
24225
|
+
const shrinkScore = findShortestColumnWithGapAwareness(colHeights, 1, columns, height, gap);
|
|
24226
|
+
const shrinkMaxHeight = Math.max(...Array.from({ length: 1 }, (_, i) => colHeights[shrinkScore + i] ?? 0));
|
|
24227
|
+
const normalScore = findShortestColumnWithGapAwareness(colHeights, effectiveColSpan, columns, height, gap);
|
|
24228
|
+
const normalMaxHeight = Math.max(...Array.from({ length: effectiveColSpan }, (_, i) => colHeights[normalScore + i] ?? 0));
|
|
24229
|
+
// Very aggressive shrinking: prioritize horizontal placement
|
|
24230
|
+
// Shrink if heights are similar OR if it reduces gap creation
|
|
24231
|
+
const heightDiff = normalMaxHeight - shrinkMaxHeight;
|
|
24232
|
+
const heightSimilarity = Math.abs(heightDiff) < 30; // Heights within 30px are "similar"
|
|
24233
|
+
// Always shrink if heights are similar (promotes side-by-side)
|
|
24234
|
+
// Or shrink if it reduces gap significantly
|
|
24235
|
+
if (heightSimilarity || heightDiff > 5 || (effectiveColSpan >= 2 && heightDiff >= 0)) {
|
|
24236
|
+
effectiveColSpan = 1;
|
|
24237
|
+
}
|
|
24238
|
+
}
|
|
24239
|
+
// Enhanced placement: consider gap creation when choosing position
|
|
24240
|
+
const bestColumn = findShortestColumnWithGapAwareness(colHeights, effectiveColSpan, columns, height, gap);
|
|
24241
|
+
// Calculate top position: max height among columns this section will span
|
|
24242
|
+
let maxColHeight = 0;
|
|
24243
|
+
for (let c = bestColumn; c < bestColumn + effectiveColSpan; c++) {
|
|
24244
|
+
if (colHeights[c] > maxColHeight) {
|
|
24245
|
+
maxColHeight = colHeights[c];
|
|
24246
|
+
}
|
|
24247
|
+
}
|
|
24248
|
+
const top = maxColHeight;
|
|
24249
|
+
// Update column heights
|
|
24250
|
+
const newHeight = top + height + gap;
|
|
24251
|
+
for (let c = bestColumn; c < bestColumn + effectiveColSpan; c++) {
|
|
24252
|
+
colHeights[c] = newHeight;
|
|
24253
|
+
}
|
|
24254
|
+
// Generate CSS expressions
|
|
24255
|
+
const left = generateLeftExpression(columns, bestColumn, gap);
|
|
24256
|
+
const width = generateWidthExpression(columns, effectiveColSpan, gap);
|
|
24257
|
+
positioned.push({
|
|
24258
|
+
section,
|
|
24259
|
+
colSpan: effectiveColSpan,
|
|
24260
|
+
preferredColumns,
|
|
24261
|
+
left,
|
|
24262
|
+
top,
|
|
24263
|
+
width,
|
|
24264
|
+
originalIndex,
|
|
24265
|
+
columnIndex: bestColumn,
|
|
24266
|
+
});
|
|
24267
|
+
}
|
|
24268
|
+
// Evaluate this pass
|
|
24269
|
+
const totalHeight = Math.max(...positioned.map((p) => p.top + estimateSectionHeight$1(p.section)), 0);
|
|
24270
|
+
const metrics = calculateMetrics(positioned, totalHeight, columns, gap);
|
|
24271
|
+
// Keep the best result
|
|
24272
|
+
// Enhanced scoring: prioritize horizontal placement and consolidation
|
|
24273
|
+
// Count how many sections are placed side-by-side (same top position)
|
|
24274
|
+
// Tighter tolerance (30px) for better row detection and consolidation
|
|
24275
|
+
const rowGroups = new Map();
|
|
24276
|
+
for (const p of positioned) {
|
|
24277
|
+
const rowKey = Math.floor(p.top / 30); // Group by approximate row (30px tolerance for tighter grouping)
|
|
24278
|
+
rowGroups.set(rowKey, (rowGroups.get(rowKey) || 0) + 1);
|
|
24279
|
+
}
|
|
24280
|
+
const avgSectionsPerRow = rowGroups.size > 0
|
|
24281
|
+
? Array.from(rowGroups.values()).reduce((sum, count) => sum + count, 0) / rowGroups.size
|
|
24282
|
+
: 0;
|
|
24283
|
+
const horizontalBonus = avgSectionsPerRow * 75; // Increased bonus for more sections per row (better consolidation)
|
|
24284
|
+
// Lower score = better (we subtract horizontalBonus to reward side-by-side placement)
|
|
24285
|
+
const score = metrics.gapCount * 1000 + metrics.heightVariance + totalHeight - horizontalBonus;
|
|
24286
|
+
// Calculate bestScore with previous best's horizontal bonus (if exists)
|
|
24287
|
+
let bestHorizontalBonus = 0;
|
|
24288
|
+
if (bestPositioned.length > 0) {
|
|
24289
|
+
const bestRowGroups = new Map();
|
|
24290
|
+
for (const p of bestPositioned) {
|
|
24291
|
+
const rowKey = Math.floor(p.top / 30); // Tighter tolerance for better consolidation
|
|
24292
|
+
bestRowGroups.set(rowKey, (bestRowGroups.get(rowKey) || 0) + 1);
|
|
24293
|
+
}
|
|
24294
|
+
const bestAvgSectionsPerRow = bestRowGroups.size > 0
|
|
24295
|
+
? Array.from(bestRowGroups.values()).reduce((sum, count) => sum + count, 0) /
|
|
24296
|
+
bestRowGroups.size
|
|
24297
|
+
: 0;
|
|
24298
|
+
bestHorizontalBonus = bestAvgSectionsPerRow * 50;
|
|
24299
|
+
}
|
|
24300
|
+
const bestScore = bestMetrics.gapCount * 1000 +
|
|
24301
|
+
bestMetrics.heightVariance +
|
|
24302
|
+
bestMetrics.totalHeight -
|
|
24303
|
+
bestHorizontalBonus;
|
|
24304
|
+
if (score < bestScore) {
|
|
24305
|
+
bestPositioned = positioned;
|
|
24306
|
+
bestMetrics = { ...metrics, totalHeight };
|
|
24307
|
+
}
|
|
24308
|
+
}
|
|
24309
|
+
return bestPositioned.length > 0 ? bestPositioned : positioned;
|
|
24310
|
+
}
|
|
24311
|
+
/**
|
|
24312
|
+
* Enhanced column finder that considers gap creation
|
|
24313
|
+
* Prefers positions that minimize both height and gap creation
|
|
22673
24314
|
*/
|
|
22674
|
-
function
|
|
24315
|
+
function findShortestColumnWithGapAwareness(colHeights, colSpan, columns, sectionHeight, gap) {
|
|
22675
24316
|
let bestColumn = 0;
|
|
22676
|
-
let
|
|
22677
|
-
// Try all possible column positions
|
|
24317
|
+
let minScore = Infinity;
|
|
22678
24318
|
for (let col = 0; col <= columns - colSpan; col++) {
|
|
22679
24319
|
// Find the maximum height among columns this section would span
|
|
22680
24320
|
let maxColHeight = 0;
|
|
@@ -22684,56 +24324,54 @@ function findShortestColumn(colHeights, colSpan, columns) {
|
|
|
22684
24324
|
maxColHeight = colHeight;
|
|
22685
24325
|
}
|
|
22686
24326
|
}
|
|
22687
|
-
//
|
|
22688
|
-
|
|
22689
|
-
|
|
24327
|
+
// Calculate gap score: how much empty space would be created
|
|
24328
|
+
const remainingCols = columns - col - colSpan;
|
|
24329
|
+
const gapScore = calculateGapScoreForPosition(colHeights, col, colSpan, columns, maxColHeight);
|
|
24330
|
+
// Combined score: prioritize horizontal placement and gap minimization
|
|
24331
|
+
// Very aggressive: strongly favor side-by-side placement
|
|
24332
|
+
// Lower height weight even more to maximize horizontal packing
|
|
24333
|
+
const score = maxColHeight * 0.5 + gapScore * 150;
|
|
24334
|
+
if (score < minScore) {
|
|
24335
|
+
minScore = score;
|
|
22690
24336
|
bestColumn = col;
|
|
22691
24337
|
}
|
|
22692
24338
|
}
|
|
22693
24339
|
return bestColumn;
|
|
22694
24340
|
}
|
|
22695
24341
|
/**
|
|
22696
|
-
*
|
|
24342
|
+
* Calculate gap score for a potential placement position
|
|
24343
|
+
* Lower score = better (less gaps created)
|
|
24344
|
+
* Enhanced to better detect opportunities for horizontal placement
|
|
22697
24345
|
*/
|
|
22698
|
-
function
|
|
22699
|
-
|
|
22700
|
-
|
|
22701
|
-
for (
|
|
22702
|
-
const
|
|
22703
|
-
|
|
22704
|
-
|
|
22705
|
-
|
|
22706
|
-
|
|
22707
|
-
let maxColHeight = 0;
|
|
22708
|
-
for (let c = bestColumn; c < bestColumn + effectiveColSpan; c++) {
|
|
22709
|
-
if (colHeights[c] > maxColHeight) {
|
|
22710
|
-
maxColHeight = colHeights[c];
|
|
22711
|
-
}
|
|
24346
|
+
function calculateGapScoreForPosition(colHeights, startCol, colSpan, columns, placementHeight) {
|
|
24347
|
+
let gapScore = 0;
|
|
24348
|
+
// Check columns before placement
|
|
24349
|
+
for (let c = 0; c < startCol; c++) {
|
|
24350
|
+
const heightDiff = placementHeight - (colHeights[c] ?? 0);
|
|
24351
|
+
if (heightDiff > 5) {
|
|
24352
|
+
// Very aggressive: detect gaps > 5px
|
|
24353
|
+
// Significant gap would be created - penalize heavily
|
|
24354
|
+
gapScore += heightDiff * 2.0; // Increased penalty for better consolidation
|
|
22712
24355
|
}
|
|
22713
|
-
|
|
22714
|
-
|
|
22715
|
-
|
|
22716
|
-
|
|
22717
|
-
|
|
24356
|
+
}
|
|
24357
|
+
// Check columns after placement
|
|
24358
|
+
for (let c = startCol + colSpan; c < columns; c++) {
|
|
24359
|
+
const heightDiff = placementHeight - (colHeights[c] ?? 0);
|
|
24360
|
+
if (heightDiff > 5) {
|
|
24361
|
+
// Very aggressive: detect gaps > 5px
|
|
24362
|
+
gapScore += heightDiff * 2.0; // Increased penalty
|
|
22718
24363
|
}
|
|
22719
|
-
// Generate CSS expressions
|
|
22720
|
-
const left = generateLeftExpression(columns, bestColumn, gap);
|
|
22721
|
-
const width = generateWidthExpression(columns, effectiveColSpan, gap);
|
|
22722
|
-
positioned.push({
|
|
22723
|
-
section,
|
|
22724
|
-
colSpan: effectiveColSpan,
|
|
22725
|
-
preferredColumns,
|
|
22726
|
-
left,
|
|
22727
|
-
top,
|
|
22728
|
-
width,
|
|
22729
|
-
originalIndex,
|
|
22730
|
-
columnIndex: bestColumn,
|
|
22731
|
-
});
|
|
22732
24364
|
}
|
|
22733
|
-
|
|
24365
|
+
// Bonus: Prefer placements that create balanced row heights (promotes side-by-side)
|
|
24366
|
+
const avgHeight = colHeights.reduce((sum, h) => sum + h, 0) / columns;
|
|
24367
|
+
const heightVariance = Math.abs(placementHeight - avgHeight);
|
|
24368
|
+
if (heightVariance < 40) {
|
|
24369
|
+
gapScore -= 30; // Increased reward for balanced rows (better consolidation)
|
|
24370
|
+
}
|
|
24371
|
+
return gapScore;
|
|
22734
24372
|
}
|
|
22735
24373
|
/**
|
|
22736
|
-
* Calculates packing metrics
|
|
24374
|
+
* Calculates packing metrics with enhanced gap detection
|
|
22737
24375
|
*/
|
|
22738
24376
|
function calculateMetrics(positioned, totalHeight, columns, gap) {
|
|
22739
24377
|
// Calculate total area
|
|
@@ -22761,12 +24399,24 @@ function calculateMetrics(positioned, totalHeight, columns, gap) {
|
|
|
22761
24399
|
}
|
|
22762
24400
|
}
|
|
22763
24401
|
}
|
|
22764
|
-
//
|
|
24402
|
+
// Enhanced gap detection: count gaps and calculate gap area
|
|
22765
24403
|
const maxHeight = Math.max(...colHeights, totalHeight);
|
|
22766
|
-
const
|
|
24404
|
+
const minHeight = Math.min(...colHeights.filter((h) => h > 0), maxHeight);
|
|
24405
|
+
const heightVariance = maxHeight - minHeight;
|
|
24406
|
+
// Count gaps: columns that are significantly shorter than the maximum height
|
|
24407
|
+
// Very aggressive: lowered threshold to 10px for maximum consolidation
|
|
24408
|
+
const gapThreshold = 10;
|
|
24409
|
+
const gapCount = colHeights.filter((h) => h < maxHeight - gapThreshold).length;
|
|
24410
|
+
// Calculate total gap area (unused vertical space)
|
|
24411
|
+
const gapArea = colHeights.reduce((sum, h) => {
|
|
24412
|
+
const gapHeight = Math.max(0, maxHeight - h - gapThreshold);
|
|
24413
|
+
return sum + gapHeight;
|
|
24414
|
+
}, 0);
|
|
22767
24415
|
return {
|
|
22768
24416
|
utilization: Math.round(utilization * 100) / 100,
|
|
22769
24417
|
gapCount,
|
|
24418
|
+
gapArea: Math.round(gapArea),
|
|
24419
|
+
heightVariance: Math.round(heightVariance),
|
|
22770
24420
|
};
|
|
22771
24421
|
}
|
|
22772
24422
|
// ============================================================================
|
|
@@ -22795,8 +24445,11 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22795
24445
|
algorithm: 'ffdh',
|
|
22796
24446
|
};
|
|
22797
24447
|
}
|
|
22798
|
-
// Debug logging
|
|
22799
|
-
|
|
24448
|
+
// Debug logging - only in development mode
|
|
24449
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
24450
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
24451
|
+
if (isDevelopment &&
|
|
24452
|
+
(packingMode === 'hybrid' || packingMode === 'skyline' || sections.length > 10)) {
|
|
22800
24453
|
console.log('[ColumnPacker] 🚀 Starting packing', {
|
|
22801
24454
|
sectionCount: sections.length,
|
|
22802
24455
|
columns,
|
|
@@ -22809,14 +24462,33 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22809
24462
|
}
|
|
22810
24463
|
// Prepare sections with metrics
|
|
22811
24464
|
const sectionsWithMetrics = sections.map((section, index) => {
|
|
22812
|
-
|
|
22813
|
-
|
|
24465
|
+
// Try to get layout preferences from service if available
|
|
24466
|
+
let preferredColumns = 2;
|
|
24467
|
+
let canShrinkToFill = false;
|
|
24468
|
+
let shrinkPriority = 50;
|
|
24469
|
+
if (fullConfig.layoutPreferenceService) {
|
|
24470
|
+
const layoutPrefs = fullConfig.layoutPreferenceService.getPreferences(section, columns);
|
|
24471
|
+
if (layoutPrefs) {
|
|
24472
|
+
preferredColumns = layoutPrefs.preferredColumns;
|
|
24473
|
+
canShrinkToFill = layoutPrefs.canShrinkToFill;
|
|
24474
|
+
shrinkPriority = layoutPrefs.shrinkPriority ?? 50;
|
|
24475
|
+
}
|
|
24476
|
+
else {
|
|
24477
|
+
preferredColumns = getPreferredColumns(String(section.type ?? 'default'), undefined, undefined, columns);
|
|
24478
|
+
}
|
|
24479
|
+
}
|
|
24480
|
+
else {
|
|
24481
|
+
preferredColumns = getPreferredColumns(String(section.type ?? 'default'), undefined, undefined, columns);
|
|
24482
|
+
}
|
|
24483
|
+
const colSpan = resolveColumnSpan(preferredColumns, columns, section.colSpan, undefined, canShrinkToFill);
|
|
22814
24484
|
return {
|
|
22815
24485
|
section,
|
|
22816
24486
|
originalIndex: index,
|
|
22817
24487
|
height: estimateSectionHeight$1(section),
|
|
22818
24488
|
colSpan,
|
|
22819
24489
|
preferredColumns,
|
|
24490
|
+
canShrinkToFill,
|
|
24491
|
+
shrinkPriority,
|
|
22820
24492
|
};
|
|
22821
24493
|
});
|
|
22822
24494
|
// Sort by height if enabled (FFDH = First Fit Decreasing Height)
|
|
@@ -22836,10 +24508,11 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22836
24508
|
});
|
|
22837
24509
|
const skylinePositions = skylineResultToPositions(skylineResult, columns, gap);
|
|
22838
24510
|
// Map back to our format, preserving original indices
|
|
22839
|
-
//
|
|
24511
|
+
// Create lookup map for O(1) access instead of O(n) find()
|
|
24512
|
+
const sectionToMetrics = new Map(orderedSections.map((s) => [s.section, s]));
|
|
22840
24513
|
positioned = skylinePositions.map((pos, skylineIndex) => {
|
|
22841
|
-
//
|
|
22842
|
-
const originalItem =
|
|
24514
|
+
// Use Map lookup instead of find() for better performance
|
|
24515
|
+
const originalItem = sectionToMetrics.get(pos.section);
|
|
22843
24516
|
// Parse column index from left CSS expression
|
|
22844
24517
|
let columnIndex = 0;
|
|
22845
24518
|
if (pos.left !== '0px' && pos.left.includes('calc')) {
|
|
@@ -22865,8 +24538,10 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22865
24538
|
}
|
|
22866
24539
|
}
|
|
22867
24540
|
else {
|
|
22868
|
-
// Use FFDH algorithm
|
|
22869
|
-
|
|
24541
|
+
// Use FFDH algorithm with multi-pass optimization
|
|
24542
|
+
const optimizationPasses = fullConfig.optimizationPasses ?? 2;
|
|
24543
|
+
const enableGapAware = fullConfig.enableGapAwarePlacement ?? true;
|
|
24544
|
+
positioned = packWithFFDH(orderedSections, columns, gap, enableGapAware ? optimizationPasses : 1);
|
|
22870
24545
|
// Restore original order if reordering is disabled
|
|
22871
24546
|
if (!allowReordering) {
|
|
22872
24547
|
positioned.sort((a, b) => a.originalIndex - b.originalIndex);
|
|
@@ -22883,8 +24558,11 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22883
24558
|
sortByHeight: true,
|
|
22884
24559
|
});
|
|
22885
24560
|
const skylinePositions = skylineResultToPositions(skylineResult, columns, gap);
|
|
24561
|
+
// Create lookup map for O(1) access instead of O(n) find()
|
|
24562
|
+
const sectionToMetrics = new Map(orderedSections.map((s) => [s.section, s]));
|
|
22886
24563
|
positioned = skylinePositions.map((pos, skylineIndex) => {
|
|
22887
|
-
|
|
24564
|
+
// Use Map lookup instead of find() for better performance
|
|
24565
|
+
const originalItem = sectionToMetrics.get(pos.section);
|
|
22888
24566
|
// Parse column index from left CSS expression
|
|
22889
24567
|
let columnIndex = 0;
|
|
22890
24568
|
if (pos.left !== '0px' && pos.left.includes('calc')) {
|
|
@@ -22915,11 +24593,12 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22915
24593
|
const totalHeight = Math.max(...positioned.map((p) => p.top + estimateSectionHeight$1(p.section)), 0);
|
|
22916
24594
|
// Calculate metrics
|
|
22917
24595
|
const metrics = calculateMetrics(positioned, totalHeight, columns, gap);
|
|
22918
|
-
// Debug logging -
|
|
22919
|
-
if (
|
|
22920
|
-
packingMode === '
|
|
22921
|
-
|
|
22922
|
-
|
|
24596
|
+
// Debug logging - only in development mode (reuse isDevelopment from above)
|
|
24597
|
+
if (isDevelopment &&
|
|
24598
|
+
(packingMode === 'hybrid' ||
|
|
24599
|
+
packingMode === 'skyline' ||
|
|
24600
|
+
metrics.gapCount > 0 ||
|
|
24601
|
+
sections.length > 10)) {
|
|
22923
24602
|
const columnHeights = Array.from({ length: columns }, (_, i) => {
|
|
22924
24603
|
const colSections = positioned.filter((p) => {
|
|
22925
24604
|
const startCol = p.columnIndex;
|
|
@@ -22935,11 +24614,12 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22935
24614
|
totalHeight: Math.round(totalHeight),
|
|
22936
24615
|
utilization: metrics.utilization.toFixed(1) + '%',
|
|
22937
24616
|
gapCount: metrics.gapCount,
|
|
24617
|
+
gapArea: metrics.gapArea,
|
|
24618
|
+
heightVariance: metrics.heightVariance,
|
|
22938
24619
|
sections: positioned.length,
|
|
22939
24620
|
columnHeights: columnHeights.map((h) => Math.round(h)),
|
|
22940
24621
|
maxColumnHeight: Math.max(...columnHeights),
|
|
22941
24622
|
minColumnHeight: Math.min(...columnHeights.filter((h) => h > 0)),
|
|
22942
|
-
heightVariance: Math.max(...columnHeights) - Math.min(...columnHeights.filter((h) => h > 0)),
|
|
22943
24623
|
});
|
|
22944
24624
|
}
|
|
22945
24625
|
return {
|
|
@@ -22948,6 +24628,8 @@ function packSectionsIntoColumns(sections, config) {
|
|
|
22948
24628
|
columns,
|
|
22949
24629
|
utilization: metrics.utilization,
|
|
22950
24630
|
gapCount: metrics.gapCount,
|
|
24631
|
+
gapArea: metrics.gapArea,
|
|
24632
|
+
heightVariance: metrics.heightVariance,
|
|
22951
24633
|
algorithm: useSkyline ? 'skyline' : 'ffdh',
|
|
22952
24634
|
};
|
|
22953
24635
|
}
|
|
@@ -22975,6 +24657,9 @@ function columnPackingResultToPositions(result) {
|
|
|
22975
24657
|
* Extracted from masonry-grid.component.ts for better separation of concerns.
|
|
22976
24658
|
*/
|
|
22977
24659
|
class MasonryGridLayoutService {
|
|
24660
|
+
constructor() {
|
|
24661
|
+
this.layoutPreferenceService = inject(SectionLayoutPreferenceService);
|
|
24662
|
+
}
|
|
22978
24663
|
/**
|
|
22979
24664
|
* Calculate layout for sections
|
|
22980
24665
|
*/
|
|
@@ -22985,7 +24670,12 @@ class MasonryGridLayoutService {
|
|
|
22985
24670
|
}
|
|
22986
24671
|
catch (error) {
|
|
22987
24672
|
if (config.useLegacyFallback) {
|
|
22988
|
-
|
|
24673
|
+
// Only warn in development mode
|
|
24674
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
24675
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
24676
|
+
if (isDevelopment) {
|
|
24677
|
+
console.warn('[LayoutService] Column-based failed, using legacy:', error);
|
|
24678
|
+
}
|
|
22989
24679
|
return this.calculateLegacyLayout(sections, config, getStableKey, markAsNew);
|
|
22990
24680
|
}
|
|
22991
24681
|
throw error;
|
|
@@ -22997,7 +24687,12 @@ class MasonryGridLayoutService {
|
|
|
22997
24687
|
}
|
|
22998
24688
|
catch (error) {
|
|
22999
24689
|
if (config.useLegacyFallback) {
|
|
23000
|
-
|
|
24690
|
+
// Only warn in development mode
|
|
24691
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
24692
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
24693
|
+
if (isDevelopment) {
|
|
24694
|
+
console.warn('[LayoutService] Row-first failed, using legacy:', error);
|
|
24695
|
+
}
|
|
23001
24696
|
return this.calculateLegacyLayout(sections, config, getStableKey, markAsNew);
|
|
23002
24697
|
}
|
|
23003
24698
|
throw error;
|
|
@@ -23009,11 +24704,16 @@ class MasonryGridLayoutService {
|
|
|
23009
24704
|
* Calculate layout using column-based algorithm
|
|
23010
24705
|
*/
|
|
23011
24706
|
calculateColumnBasedLayout(sections, config, getStableKey, markAsNew) {
|
|
23012
|
-
|
|
23013
|
-
|
|
23014
|
-
|
|
23015
|
-
|
|
23016
|
-
|
|
24707
|
+
// Only log in development mode
|
|
24708
|
+
const isDevelopment = typeof window !== 'undefined' &&
|
|
24709
|
+
(window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
|
|
24710
|
+
if (isDevelopment) {
|
|
24711
|
+
console.log('[LayoutService] 🎯 calculateColumnBasedLayout called', {
|
|
24712
|
+
sectionsCount: sections.length,
|
|
24713
|
+
columns: config.columns,
|
|
24714
|
+
containerWidth: config.containerWidth,
|
|
24715
|
+
});
|
|
24716
|
+
}
|
|
23017
24717
|
const packConfig = {
|
|
23018
24718
|
columns: config.columns,
|
|
23019
24719
|
gap: config.gap,
|
|
@@ -23022,15 +24722,18 @@ class MasonryGridLayoutService {
|
|
|
23022
24722
|
allowReordering: config.columnPackingOptions?.allowReordering ?? true,
|
|
23023
24723
|
sortByHeight: config.columnPackingOptions?.sortByHeight ?? true,
|
|
23024
24724
|
useSkylineThreshold: config.columnPackingOptions?.useSkylineThreshold ?? 3,
|
|
24725
|
+
layoutPreferenceService: this.layoutPreferenceService, // NEW: Pass service for dynamic preferences
|
|
23025
24726
|
};
|
|
23026
24727
|
const result = packSectionsIntoColumns(sections, packConfig);
|
|
23027
|
-
|
|
23028
|
-
|
|
23029
|
-
|
|
23030
|
-
|
|
23031
|
-
|
|
23032
|
-
|
|
23033
|
-
|
|
24728
|
+
if (isDevelopment) {
|
|
24729
|
+
console.log('[LayoutService] 📦 Packing result', {
|
|
24730
|
+
positionedCount: result.positionedSections.length,
|
|
24731
|
+
totalHeight: result.totalHeight,
|
|
24732
|
+
algorithm: result.algorithm,
|
|
24733
|
+
utilization: result.utilization,
|
|
24734
|
+
gapCount: result.gapCount,
|
|
24735
|
+
});
|
|
24736
|
+
}
|
|
23034
24737
|
const positions = columnPackingResultToPositions(result);
|
|
23035
24738
|
const positionedSections = positions.map((pos, index) => {
|
|
23036
24739
|
const section = pos.section;
|
|
@@ -23047,11 +24750,13 @@ class MasonryGridLayoutService {
|
|
|
23047
24750
|
isNew,
|
|
23048
24751
|
};
|
|
23049
24752
|
});
|
|
23050
|
-
|
|
23051
|
-
|
|
23052
|
-
|
|
23053
|
-
|
|
23054
|
-
|
|
24753
|
+
if (isDevelopment) {
|
|
24754
|
+
console.log('[LayoutService] ✅ Column-based layout complete', {
|
|
24755
|
+
positionedSectionsCount: positionedSections.length,
|
|
24756
|
+
containerHeight: result.totalHeight,
|
|
24757
|
+
columns: config.columns,
|
|
24758
|
+
});
|
|
24759
|
+
}
|
|
23055
24760
|
return {
|
|
23056
24761
|
positionedSections,
|
|
23057
24762
|
containerHeight: result.totalHeight,
|
|
@@ -23802,7 +25507,7 @@ class DynamicColumnOptimizer {
|
|
|
23802
25507
|
}
|
|
23803
25508
|
const DEFAULT_CONFIG = {
|
|
23804
25509
|
gap: 12,
|
|
23805
|
-
minColumnWidth:
|
|
25510
|
+
minColumnWidth: 220,
|
|
23806
25511
|
maxColumns: 4,
|
|
23807
25512
|
enableWeightedSelection: true,
|
|
23808
25513
|
enableIntelligence: true,
|
|
@@ -24482,6 +26187,7 @@ class MasonryGridComponent {
|
|
|
24482
26187
|
this.layoutLog = new EventEmitter();
|
|
24483
26188
|
this.cdr = inject(ChangeDetectorRef);
|
|
24484
26189
|
this.layoutService = inject(MasonryGridLayoutService);
|
|
26190
|
+
this.layoutPreferenceService = inject(SectionLayoutPreferenceService);
|
|
24485
26191
|
this.positionedSections = [];
|
|
24486
26192
|
this.containerHeight = 0;
|
|
24487
26193
|
this.isLayoutReady = false; // Prevent FOUC (Flash of Unstyled Content)
|
|
@@ -25021,29 +26727,37 @@ class MasonryGridComponent {
|
|
|
25021
26727
|
* Calculate responsive columns based on container width
|
|
25022
26728
|
*/
|
|
25023
26729
|
calculateResponsiveColumns(containerWidth) {
|
|
25024
|
-
|
|
25025
|
-
|
|
25026
|
-
if (containerWidth <
|
|
25027
|
-
return
|
|
25028
|
-
if (containerWidth <
|
|
25029
|
-
return
|
|
25030
|
-
|
|
26730
|
+
// Updated breakpoints for 220px min column width
|
|
26731
|
+
// 2 cols: 2*220 + 1*12 = 452px, 3 cols: 3*220 + 2*12 = 684px, 4 cols: 4*220 + 3*12 = 916px
|
|
26732
|
+
if (containerWidth < 464)
|
|
26733
|
+
return 1; // Mobile (< 2 columns)
|
|
26734
|
+
if (containerWidth < 684)
|
|
26735
|
+
return 2; // Tablet (2 columns)
|
|
26736
|
+
if (containerWidth < 904)
|
|
26737
|
+
return 3; // Desktop (3 columns)
|
|
26738
|
+
return Math.min(4, this.maxColumns); // Wide (4 columns)
|
|
25031
26739
|
}
|
|
25032
26740
|
/**
|
|
25033
26741
|
* Get column span for a section - simple and respects preferred columns (1-4)
|
|
25034
|
-
* Priority: explicit colSpan → preferredColumns → type-based default
|
|
26742
|
+
* Priority: explicit colSpan → dynamic layout preferences → preferredColumns → type-based default
|
|
25035
26743
|
*/
|
|
25036
26744
|
getColSpan(section) {
|
|
25037
26745
|
// Priority 1: Explicit colSpan always takes precedence
|
|
25038
26746
|
if (section.colSpan && section.colSpan > 0) {
|
|
25039
26747
|
return Math.min(section.colSpan, this.currentColumns);
|
|
25040
26748
|
}
|
|
25041
|
-
// Priority 2: Use
|
|
25042
|
-
const
|
|
25043
|
-
if (
|
|
25044
|
-
|
|
26749
|
+
// Priority 2: Use dynamic layout preferences (NEW)
|
|
26750
|
+
const layoutPrefs = this.getSectionLayoutPreferences(section);
|
|
26751
|
+
if (layoutPrefs.preferredColumns && layoutPrefs.preferredColumns > 0) {
|
|
26752
|
+
// Respect min/max constraints
|
|
26753
|
+
const result = Math.max(layoutPrefs.minColumns, Math.min(layoutPrefs.preferredColumns, layoutPrefs.maxColumns, this.currentColumns));
|
|
26754
|
+
return result;
|
|
26755
|
+
}
|
|
26756
|
+
// Priority 3: Use preferredColumns from section data
|
|
26757
|
+
if (section.preferredColumns && section.preferredColumns > 0) {
|
|
26758
|
+
return Math.min(section.preferredColumns, this.currentColumns);
|
|
25045
26759
|
}
|
|
25046
|
-
// Priority
|
|
26760
|
+
// Priority 4: Type-based defaults (keep simple)
|
|
25047
26761
|
const type = (section.type || '').toLowerCase();
|
|
25048
26762
|
// Full-width types
|
|
25049
26763
|
if (type === 'overview' || type === 'header' || type === 'hero') {
|
|
@@ -25286,9 +27000,14 @@ class MasonryGridComponent {
|
|
|
25286
27000
|
}
|
|
25287
27001
|
/**
|
|
25288
27002
|
* Gets the preferred column count for a section.
|
|
25289
|
-
* Checks: section.preferredColumns → meta.preferredColumns → type-based default
|
|
27003
|
+
* Checks: section layout preferences (dynamic) → section.preferredColumns → meta.preferredColumns → type-based default
|
|
25290
27004
|
*/
|
|
25291
27005
|
getPreferredColumns(section) {
|
|
27006
|
+
// NEW: Try to get dynamic layout preferences from service first
|
|
27007
|
+
const layoutPrefs = this.layoutPreferenceService.getPreferences(section, this.currentColumns);
|
|
27008
|
+
if (layoutPrefs) {
|
|
27009
|
+
return layoutPrefs.preferredColumns;
|
|
27010
|
+
}
|
|
25292
27011
|
// Direct property takes precedence
|
|
25293
27012
|
if (section.preferredColumns) {
|
|
25294
27013
|
return section.preferredColumns;
|
|
@@ -25300,7 +27019,32 @@ class MasonryGridComponent {
|
|
|
25300
27019
|
return metaPref;
|
|
25301
27020
|
}
|
|
25302
27021
|
// Fall back to type-based default
|
|
25303
|
-
return getPreferredColumns(section.type ?? 'info');
|
|
27022
|
+
return getPreferredColumns(section.type ?? 'info', undefined, undefined, this.currentColumns);
|
|
27023
|
+
}
|
|
27024
|
+
/**
|
|
27025
|
+
* Get layout preferences for a section (including canShrinkToFill flag)
|
|
27026
|
+
*/
|
|
27027
|
+
getSectionLayoutPreferences(section) {
|
|
27028
|
+
// Try to get from service first
|
|
27029
|
+
const layoutPrefs = this.layoutPreferenceService.getPreferences(section, this.currentColumns);
|
|
27030
|
+
if (layoutPrefs) {
|
|
27031
|
+
return {
|
|
27032
|
+
preferredColumns: layoutPrefs.preferredColumns,
|
|
27033
|
+
minColumns: layoutPrefs.minColumns,
|
|
27034
|
+
maxColumns: layoutPrefs.maxColumns,
|
|
27035
|
+
canShrinkToFill: layoutPrefs.canShrinkToFill,
|
|
27036
|
+
shrinkPriority: layoutPrefs.shrinkPriority ?? 50,
|
|
27037
|
+
};
|
|
27038
|
+
}
|
|
27039
|
+
// Fallback to static preferences
|
|
27040
|
+
const preferredColumns = this.getPreferredColumns(section);
|
|
27041
|
+
return {
|
|
27042
|
+
preferredColumns,
|
|
27043
|
+
minColumns: section.minColumns ?? 1,
|
|
27044
|
+
maxColumns: section.maxColumns ?? 4,
|
|
27045
|
+
canShrinkToFill: false, // Default: don't shrink unless explicitly enabled
|
|
27046
|
+
shrinkPriority: 50,
|
|
27047
|
+
};
|
|
25304
27048
|
}
|
|
25305
27049
|
/**
|
|
25306
27050
|
* Finds the optimal column assignment for a section.
|
|
@@ -26250,146 +27994,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
26250
27994
|
type: Output
|
|
26251
27995
|
}] } });
|
|
26252
27996
|
|
|
26253
|
-
/**
|
|
26254
|
-
* Card Actions Component
|
|
26255
|
-
*
|
|
26256
|
-
* Renders card-level action buttons (CTAs).
|
|
26257
|
-
* Extracted from AICardRendererComponent for better separation of concerns.
|
|
26258
|
-
*
|
|
26259
|
-
* Uses ViewEncapsulation.None to allow styles to be inherited from
|
|
26260
|
-
* the parent Shadow DOM (ai-card-renderer).
|
|
26261
|
-
*/
|
|
26262
|
-
class CardActionsComponent {
|
|
26263
|
-
constructor() {
|
|
26264
|
-
this.iconService = inject(IconService);
|
|
26265
|
-
this.actions = [];
|
|
26266
|
-
this.actionClick = new EventEmitter();
|
|
26267
|
-
this.trackAction = (_index, action) => action.id ?? `${action.label}-${_index}`;
|
|
26268
|
-
}
|
|
26269
|
-
onActionClick(action) {
|
|
26270
|
-
this.actionClick.emit(action);
|
|
26271
|
-
}
|
|
26272
|
-
getActionIconName(action) {
|
|
26273
|
-
// If icon is explicitly provided, use it
|
|
26274
|
-
if (action.icon) {
|
|
26275
|
-
return this.iconService.getFieldIcon(action.icon);
|
|
26276
|
-
}
|
|
26277
|
-
// If type is specified and it's a button behavior type (not legacy styling), use default icons
|
|
26278
|
-
if (action.type && ['mail', 'website', 'agent', 'question'].includes(action.type)) {
|
|
26279
|
-
switch (action.type) {
|
|
26280
|
-
case 'mail':
|
|
26281
|
-
return 'mail';
|
|
26282
|
-
case 'website':
|
|
26283
|
-
return 'external-link';
|
|
26284
|
-
case 'agent':
|
|
26285
|
-
return 'user';
|
|
26286
|
-
case 'question':
|
|
26287
|
-
return 'message-circle';
|
|
26288
|
-
default:
|
|
26289
|
-
break;
|
|
26290
|
-
}
|
|
26291
|
-
}
|
|
26292
|
-
// Fallback to deriving icon from label
|
|
26293
|
-
return this.iconService.getFieldIcon(action.label);
|
|
26294
|
-
}
|
|
26295
|
-
getDefaultIconForButtonType(buttonType) {
|
|
26296
|
-
if (!buttonType || !['mail', 'website', 'agent', 'question'].includes(buttonType)) {
|
|
26297
|
-
return null;
|
|
26298
|
-
}
|
|
26299
|
-
switch (buttonType) {
|
|
26300
|
-
case 'mail':
|
|
26301
|
-
return 'mail';
|
|
26302
|
-
case 'website':
|
|
26303
|
-
return 'external-link';
|
|
26304
|
-
case 'agent':
|
|
26305
|
-
return 'user';
|
|
26306
|
-
case 'question':
|
|
26307
|
-
return 'message-circle';
|
|
26308
|
-
default:
|
|
26309
|
-
return null;
|
|
26310
|
-
}
|
|
26311
|
-
}
|
|
26312
|
-
getActionIconNameForDisplay(action) {
|
|
26313
|
-
// If explicit icon is provided and it's a URL, return null (will be handled as image)
|
|
26314
|
-
if (action.icon && action.icon.startsWith('http')) {
|
|
26315
|
-
return null;
|
|
26316
|
-
}
|
|
26317
|
-
// If explicit icon is provided and it's a lucide icon name, use it
|
|
26318
|
-
if (action.icon && !action.icon.startsWith('http')) {
|
|
26319
|
-
// Check if it's a lucide icon name (simple string like 'mail', 'user', etc.)
|
|
26320
|
-
if (/^[a-z-]+$/i.test(action.icon)) {
|
|
26321
|
-
return this.getActionIconName(action);
|
|
26322
|
-
}
|
|
26323
|
-
// Otherwise it's a text icon, return null (will be handled as text)
|
|
26324
|
-
return null;
|
|
26325
|
-
}
|
|
26326
|
-
// If no explicit icon, check if type is a button behavior type with default icon
|
|
26327
|
-
if (action.type && ['mail', 'website', 'agent', 'question'].includes(action.type)) {
|
|
26328
|
-
return this.getDefaultIconForButtonType(action.type);
|
|
26329
|
-
}
|
|
26330
|
-
// Fallback: try to derive icon from label
|
|
26331
|
-
const derivedIcon = this.getActionIconName(action);
|
|
26332
|
-
// Only use if it's a valid lucide icon name (simple string)
|
|
26333
|
-
if (derivedIcon && /^[a-z-]+$/i.test(derivedIcon)) {
|
|
26334
|
-
return derivedIcon;
|
|
26335
|
-
}
|
|
26336
|
-
return null;
|
|
26337
|
-
}
|
|
26338
|
-
hasTextIcon(action) {
|
|
26339
|
-
return !!(action.icon && !action.icon.startsWith('http') && !/^[a-z-]+$/i.test(action.icon));
|
|
26340
|
-
}
|
|
26341
|
-
hasImageIcon(action) {
|
|
26342
|
-
return !!(action.icon && action.icon.startsWith('http'));
|
|
26343
|
-
}
|
|
26344
|
-
/**
|
|
26345
|
-
* Get comprehensive ARIA label for action button
|
|
26346
|
-
*/
|
|
26347
|
-
getActionAriaLabel(action) {
|
|
26348
|
-
let label = action.label;
|
|
26349
|
-
if (action.type === 'website' && action.url) {
|
|
26350
|
-
label += `: Opens ${action.url} in new window`;
|
|
26351
|
-
}
|
|
26352
|
-
else if (action.type === 'mail') {
|
|
26353
|
-
const email = action.email?.to || action.email?.contact?.email || 'email';
|
|
26354
|
-
label += `: Opens email to ${email}`;
|
|
26355
|
-
}
|
|
26356
|
-
else if (action.type === 'agent') {
|
|
26357
|
-
label += ': Triggers agent action';
|
|
26358
|
-
}
|
|
26359
|
-
else if (action.type === 'question') {
|
|
26360
|
-
label += ': Opens chat question';
|
|
26361
|
-
}
|
|
26362
|
-
return label;
|
|
26363
|
-
}
|
|
26364
|
-
getActionButtonClasses(action) {
|
|
26365
|
-
const primaryClasses = 'bg-[var(--color-brand)] text-white font-semibold border-0 hover:bg-[var(--color-brand)]/90 hover:shadow-lg hover:shadow-[var(--color-brand)]/40 active:scale-95';
|
|
26366
|
-
const outlineClasses = 'text-[var(--color-brand)] border border-[var(--color-brand)] bg-transparent font-semibold hover:bg-[var(--color-brand)]/10 active:scale-95';
|
|
26367
|
-
const ghostClasses = 'text-[var(--color-brand)] bg-transparent border-0 font-semibold hover:bg-[var(--color-brand)]/10 active:scale-95';
|
|
26368
|
-
// Use variant field if present, otherwise check legacy type field for styling
|
|
26369
|
-
const styleVariant = action.variant ||
|
|
26370
|
-
(action.type === 'primary' || action.type === 'secondary' ? action.type : 'primary');
|
|
26371
|
-
switch (styleVariant) {
|
|
26372
|
-
case 'secondary':
|
|
26373
|
-
case 'outline':
|
|
26374
|
-
return outlineClasses;
|
|
26375
|
-
case 'ghost':
|
|
26376
|
-
return ghostClasses;
|
|
26377
|
-
default:
|
|
26378
|
-
return primaryClasses;
|
|
26379
|
-
}
|
|
26380
|
-
}
|
|
26381
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CardActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26382
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CardActionsComponent, isStandalone: true, selector: "app-card-actions", inputs: { actions: "actions" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<ng-container *ngFor=\"let action of actions; trackBy: trackAction; let i = index\">\n <button\n type=\"button\"\n class=\"osi-action-button\"\n [class.osi-action-button--primary]=\"!action.variant || action.variant === 'primary'\"\n [class.osi-action-button--secondary]=\"action.variant === 'secondary' || action.variant === 'outline'\"\n [attr.aria-label]=\"getActionAriaLabel(action)\"\n [attr.aria-describedby]=\"action.type === 'mail' ? 'action-mail-hint-' + i : null\"\n (click)=\"onActionClick(action)\"\n (keydown.enter)=\"onActionClick(action)\"\n (keydown.space)=\"$event.preventDefault(); onActionClick(action)\"\n >\n <!-- Lucide icon (for type defaults or explicit lucide icon names) -->\n <lucide-icon\n *ngIf=\"getActionIconNameForDisplay(action) as iconName\"\n [name]=\"iconName\"\n [size]=\"16\"\n aria-hidden=\"true\"\n >\n </lucide-icon>\n <!-- Image icon (for URL-based icons) -->\n <img\n *ngIf=\"hasImageIcon(action)\"\n [src]=\"action.icon\"\n [alt]=\"action.label + ' icon'\"\n class=\"osi-action-button__icon\"\n aria-hidden=\"true\"\n />\n <!-- Text icon (for emoji or text-based icons) -->\n <span *ngIf=\"hasTextIcon(action)\" class=\"osi-action-button__emoji\" aria-hidden=\"true\">{{ action.icon }}</span>\n <span class=\"osi-action-button__label\">{{ action.label }}</span>\n <!-- Hidden hint for mail actions -->\n <span *ngIf=\"action.type === 'mail'\" [id]=\"'action-mail-hint-' + i\" class=\"sr-only\">\n This will open your email client with pre-filled recipient and message\n </span>\n </button>\n</ng-container>\n", styles: [":host{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:.75rem!important;margin-top:var(--section-card-gap, 12px)!important;margin-left:4px!important;margin-right:4px!important;padding-bottom:16px!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important}.osi-action-button{margin:0!important;-webkit-appearance:none!important;appearance:none!important;display:inline-flex!important;align-items:center!important;gap:.5rem!important;padding:.625rem 1.25rem!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:.875rem!important;font-weight:600!important;line-height:1.25rem!important;text-decoration:none!important;white-space:nowrap!important;cursor:pointer!important;border-radius:10px!important;transition:all .2s ease!important;box-sizing:border-box!important}.osi-action-button--primary{background-color:#ff7900!important;color:#fff!important;border:none!important;box-shadow:0 2px 8px #ff790040!important}.osi-action-button--primary *{color:#fff!important}.osi-action-button--primary:hover{background-color:#e66d00!important;color:#fff!important;box-shadow:0 4px 16px #ff790066!important;transform:translateY(-1px)!important}.osi-action-button--primary:active{background-color:#cc6000!important;color:#fff!important;transform:scale(.98) translateY(0)!important;box-shadow:0 2px 4px #ff790033!important}.osi-action-button--primary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button--secondary{background-color:transparent!important;color:#fff!important;border:2px solid #ff7900!important}.osi-action-button--secondary *{color:#fff!important}.osi-action-button--secondary:hover{background-color:#ff79001a!important;color:#fff!important;box-shadow:0 2px 8px #ff790033!important}.osi-action-button--secondary:active{background-color:#ff790026!important;color:#fff!important;transform:scale(.98)!important}.osi-action-button--secondary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button__label{color:#fff!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.osi-action-button__icon{width:18px!important;height:18px!important;object-fit:contain!important;flex-shrink:0!important}.osi-action-button__emoji{font-size:16px!important;line-height:1!important;flex-shrink:0!important}.osi-action-button lucide-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important;color:#fff!important}.osi-action-button lucide-icon svg{width:16px!important;height:16px!important;stroke:#fff!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: LucideIconsModule }, { kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
26383
|
-
}
|
|
26384
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CardActionsComponent, decorators: [{
|
|
26385
|
-
type: Component,
|
|
26386
|
-
args: [{ selector: 'app-card-actions', standalone: true, imports: [CommonModule, LucideIconsModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let action of actions; trackBy: trackAction; let i = index\">\n <button\n type=\"button\"\n class=\"osi-action-button\"\n [class.osi-action-button--primary]=\"!action.variant || action.variant === 'primary'\"\n [class.osi-action-button--secondary]=\"action.variant === 'secondary' || action.variant === 'outline'\"\n [attr.aria-label]=\"getActionAriaLabel(action)\"\n [attr.aria-describedby]=\"action.type === 'mail' ? 'action-mail-hint-' + i : null\"\n (click)=\"onActionClick(action)\"\n (keydown.enter)=\"onActionClick(action)\"\n (keydown.space)=\"$event.preventDefault(); onActionClick(action)\"\n >\n <!-- Lucide icon (for type defaults or explicit lucide icon names) -->\n <lucide-icon\n *ngIf=\"getActionIconNameForDisplay(action) as iconName\"\n [name]=\"iconName\"\n [size]=\"16\"\n aria-hidden=\"true\"\n >\n </lucide-icon>\n <!-- Image icon (for URL-based icons) -->\n <img\n *ngIf=\"hasImageIcon(action)\"\n [src]=\"action.icon\"\n [alt]=\"action.label + ' icon'\"\n class=\"osi-action-button__icon\"\n aria-hidden=\"true\"\n />\n <!-- Text icon (for emoji or text-based icons) -->\n <span *ngIf=\"hasTextIcon(action)\" class=\"osi-action-button__emoji\" aria-hidden=\"true\">{{ action.icon }}</span>\n <span class=\"osi-action-button__label\">{{ action.label }}</span>\n <!-- Hidden hint for mail actions -->\n <span *ngIf=\"action.type === 'mail'\" [id]=\"'action-mail-hint-' + i\" class=\"sr-only\">\n This will open your email client with pre-filled recipient and message\n </span>\n </button>\n</ng-container>\n", styles: [":host{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:.75rem!important;margin-top:var(--section-card-gap, 12px)!important;margin-left:4px!important;margin-right:4px!important;padding-bottom:16px!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important}.osi-action-button{margin:0!important;-webkit-appearance:none!important;appearance:none!important;display:inline-flex!important;align-items:center!important;gap:.5rem!important;padding:.625rem 1.25rem!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:.875rem!important;font-weight:600!important;line-height:1.25rem!important;text-decoration:none!important;white-space:nowrap!important;cursor:pointer!important;border-radius:10px!important;transition:all .2s ease!important;box-sizing:border-box!important}.osi-action-button--primary{background-color:#ff7900!important;color:#fff!important;border:none!important;box-shadow:0 2px 8px #ff790040!important}.osi-action-button--primary *{color:#fff!important}.osi-action-button--primary:hover{background-color:#e66d00!important;color:#fff!important;box-shadow:0 4px 16px #ff790066!important;transform:translateY(-1px)!important}.osi-action-button--primary:active{background-color:#cc6000!important;color:#fff!important;transform:scale(.98) translateY(0)!important;box-shadow:0 2px 4px #ff790033!important}.osi-action-button--primary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button--secondary{background-color:transparent!important;color:#fff!important;border:2px solid #ff7900!important}.osi-action-button--secondary *{color:#fff!important}.osi-action-button--secondary:hover{background-color:#ff79001a!important;color:#fff!important;box-shadow:0 2px 8px #ff790033!important}.osi-action-button--secondary:active{background-color:#ff790026!important;color:#fff!important;transform:scale(.98)!important}.osi-action-button--secondary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button__label{color:#fff!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.osi-action-button__icon{width:18px!important;height:18px!important;object-fit:contain!important;flex-shrink:0!important}.osi-action-button__emoji{font-size:16px!important;line-height:1!important;flex-shrink:0!important}.osi-action-button lucide-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important;color:#fff!important}.osi-action-button lucide-icon svg{width:16px!important;height:16px!important;stroke:#fff!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}\n"] }]
|
|
26387
|
-
}], propDecorators: { actions: [{
|
|
26388
|
-
type: Input
|
|
26389
|
-
}], actionClick: [{
|
|
26390
|
-
type: Output
|
|
26391
|
-
}] } });
|
|
26392
|
-
|
|
26393
27997
|
class AICardRendererComponent {
|
|
26394
27998
|
constructor() {
|
|
26395
27999
|
this.el = inject(ElementRef);
|
|
@@ -26479,41 +28083,7 @@ class AICardRendererComponent {
|
|
|
26479
28083
|
this.magneticTiltService = inject(MagneticTiltService);
|
|
26480
28084
|
this.iconService = inject(IconService);
|
|
26481
28085
|
this.sectionNormalizationService = inject(SectionNormalizationService);
|
|
26482
|
-
|
|
26483
|
-
// private readonly viewportScroller = inject(ViewportScroller);
|
|
26484
|
-
// Fallback card configuration for testing
|
|
26485
|
-
this.fallbackCard = {
|
|
26486
|
-
id: 'fallback-test',
|
|
26487
|
-
cardTitle: 'Test Company',
|
|
26488
|
-
sections: [
|
|
26489
|
-
{
|
|
26490
|
-
id: 'test-info',
|
|
26491
|
-
title: 'Company Information',
|
|
26492
|
-
type: 'info',
|
|
26493
|
-
fields: [
|
|
26494
|
-
{
|
|
26495
|
-
id: 'industry',
|
|
26496
|
-
label: 'Industry',
|
|
26497
|
-
value: 'Technology',
|
|
26498
|
-
type: 'text',
|
|
26499
|
-
},
|
|
26500
|
-
{
|
|
26501
|
-
id: 'employees',
|
|
26502
|
-
label: 'Employees',
|
|
26503
|
-
value: '250',
|
|
26504
|
-
type: 'text',
|
|
26505
|
-
},
|
|
26506
|
-
],
|
|
26507
|
-
},
|
|
26508
|
-
],
|
|
26509
|
-
actions: [
|
|
26510
|
-
{
|
|
26511
|
-
id: 'view-details',
|
|
26512
|
-
label: 'View Details',
|
|
26513
|
-
variant: 'primary',
|
|
26514
|
-
},
|
|
26515
|
-
],
|
|
26516
|
-
};
|
|
28086
|
+
this.http = inject(HttpClient, { optional: true });
|
|
26517
28087
|
this.trackSection = (_index, section) => section.id ?? `${section.title}-${_index}`;
|
|
26518
28088
|
this.trackField = (_index, field) => field.id ?? `${field.label}-${_index}`;
|
|
26519
28089
|
this.trackItem = (_index, item) => item.id ?? `${item.title}-${_index}`;
|
|
@@ -26647,9 +28217,9 @@ class AICardRendererComponent {
|
|
|
26647
28217
|
this.startMessageRotation();
|
|
26648
28218
|
// Track scroll for parallax effect
|
|
26649
28219
|
this.setupScrollTracking();
|
|
26650
|
-
// Use fallback if no card config provided
|
|
28220
|
+
// Use LLM fallback if no card config provided
|
|
26651
28221
|
if (!this.cardConfig) {
|
|
26652
|
-
this.
|
|
28222
|
+
this.generateFallbackCard();
|
|
26653
28223
|
}
|
|
26654
28224
|
if (!this.processedSections.length) {
|
|
26655
28225
|
this.refreshProcessedSections(true);
|
|
@@ -27458,6 +29028,146 @@ class AICardRendererComponent {
|
|
|
27458
29028
|
trackByParticle(index) {
|
|
27459
29029
|
return index;
|
|
27460
29030
|
}
|
|
29031
|
+
/**
|
|
29032
|
+
* Generates a fallback card using LLM API call.
|
|
29033
|
+
* Similar to Orange Sales Assistance implementation pattern.
|
|
29034
|
+
* Makes an HTTP POST request to the LLM endpoint with a prompt to generate card data.
|
|
29035
|
+
*/
|
|
29036
|
+
generateFallbackCard() {
|
|
29037
|
+
// Check if HttpClient is available
|
|
29038
|
+
if (!this.http) {
|
|
29039
|
+
if (isDevMode()) {
|
|
29040
|
+
console.warn('HttpClient not available. Cannot generate fallback card via LLM. Make sure HttpClient is provided in your app configuration.');
|
|
29041
|
+
}
|
|
29042
|
+
return;
|
|
29043
|
+
}
|
|
29044
|
+
// Only make API calls in browser environment
|
|
29045
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
29046
|
+
return;
|
|
29047
|
+
}
|
|
29048
|
+
// Determine the API endpoint (default or custom)
|
|
29049
|
+
// Following Orange Sales Assistance pattern: 'osa/invoke' or similar
|
|
29050
|
+
const endpoint = this.llmFallbackEndpoint || '/api/llm/generate-card';
|
|
29051
|
+
// Create the prompt for LLM based on documentation guidelines
|
|
29052
|
+
// This prompt follows the LLM_PROMPT.md documentation structure
|
|
29053
|
+
const prompt = this.llmFallbackPrompt ||
|
|
29054
|
+
`Generate a complete OSI card configuration JSON following these guidelines:
|
|
29055
|
+
|
|
29056
|
+
1. Use valid section types: analytics, brand-colors, chart, contact-card, event, faq, financials, gallery, info, list, map, network-card, news, overview, product, quotation, social-media, solutions, text-reference, timeline, or video.
|
|
29057
|
+
|
|
29058
|
+
2. Match data structure - use 'fields' for sections like info, analytics, overview, or 'items' for sections like list, gallery, timeline.
|
|
29059
|
+
|
|
29060
|
+
3. Include required properties: 'title' and 'type' are always required for each section.
|
|
29061
|
+
|
|
29062
|
+
4. Create a card with:
|
|
29063
|
+
- cardTitle: A descriptive title for the card
|
|
29064
|
+
- cardType: company|contact|event|product|analytics (optional)
|
|
29065
|
+
- sections: Array of 2-4 sections with diverse types
|
|
29066
|
+
- actions: Optional array of action buttons
|
|
29067
|
+
|
|
29068
|
+
5. Example structure:
|
|
29069
|
+
- Overview section (type: overview) with key company information
|
|
29070
|
+
- Info section (type: info) with detailed fields
|
|
29071
|
+
- Analytics section (type: analytics) with metrics if applicable
|
|
29072
|
+
- Contact section (type: contact-card) with contact information
|
|
29073
|
+
|
|
29074
|
+
6. Ensure all JSON is valid and properly formatted.
|
|
29075
|
+
|
|
29076
|
+
Generate a default company card with comprehensive information including overview, key details, metrics, and contact information.`;
|
|
29077
|
+
// Prepare the payload similar to Orange Sales Assistance pattern
|
|
29078
|
+
// Matches the structure used in Orange Sales Assistance chatbot component
|
|
29079
|
+
// See: chatbot.component.ts line 201-216
|
|
29080
|
+
const payload = {
|
|
29081
|
+
question: prompt,
|
|
29082
|
+
knowledge_base: 'default',
|
|
29083
|
+
session_id: 'fallback',
|
|
29084
|
+
chat_id: 'fallback-card',
|
|
29085
|
+
sources: [],
|
|
29086
|
+
prompt: prompt,
|
|
29087
|
+
model_name: 'gpt-4o', // Default model, matching Orange Sales Assistance default
|
|
29088
|
+
prompt_status: 'Default',
|
|
29089
|
+
source_weights: [],
|
|
29090
|
+
};
|
|
29091
|
+
// Make LLM API call (following Orange Sales Assistance pattern)
|
|
29092
|
+
// Response structure matches Orange Sales Assistance: { result: string, ... }
|
|
29093
|
+
// See: chatbot.component.ts line 225-229
|
|
29094
|
+
this.http
|
|
29095
|
+
.post(endpoint, payload)
|
|
29096
|
+
.pipe(takeUntil(this.destroyed$), catchError$1((error) => {
|
|
29097
|
+
// Log error but don't throw - allow empty state to show
|
|
29098
|
+
// Following Orange Sales Assistance error handling pattern
|
|
29099
|
+
if (isDevMode()) {
|
|
29100
|
+
console.error('LLM fallback API call failed:', error);
|
|
29101
|
+
console.warn('Falling back to empty state. Ensure LLM endpoint is configured correctly.');
|
|
29102
|
+
}
|
|
29103
|
+
// Return null to allow empty state to display
|
|
29104
|
+
return of(null);
|
|
29105
|
+
}))
|
|
29106
|
+
.subscribe((response) => {
|
|
29107
|
+
if (response) {
|
|
29108
|
+
// Handle different response formats (flexible like Orange Sales Assistance)
|
|
29109
|
+
// Orange Sales Assistance returns: { result: string } where result may be JSON
|
|
29110
|
+
let cardConfig = null;
|
|
29111
|
+
// Try different response property names (matching Orange Sales Assistance pattern)
|
|
29112
|
+
if (response.result) {
|
|
29113
|
+
// Orange Sales Assistance pattern: result contains the response
|
|
29114
|
+
try {
|
|
29115
|
+
const parsed = JSON.parse(response.result);
|
|
29116
|
+
if (parsed && typeof parsed === 'object') {
|
|
29117
|
+
cardConfig = parsed;
|
|
29118
|
+
}
|
|
29119
|
+
}
|
|
29120
|
+
catch (parseError) {
|
|
29121
|
+
// If result is not JSON, try to extract JSON from the string
|
|
29122
|
+
try {
|
|
29123
|
+
// Look for JSON object in the response string
|
|
29124
|
+
const jsonMatch = response.result.match(/\{[\s\S]*\}/);
|
|
29125
|
+
if (jsonMatch) {
|
|
29126
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
29127
|
+
if (parsed && typeof parsed === 'object') {
|
|
29128
|
+
cardConfig = parsed;
|
|
29129
|
+
}
|
|
29130
|
+
}
|
|
29131
|
+
}
|
|
29132
|
+
catch (extractError) {
|
|
29133
|
+
if (isDevMode()) {
|
|
29134
|
+
console.error('Failed to parse LLM result as JSON:', extractError);
|
|
29135
|
+
}
|
|
29136
|
+
}
|
|
29137
|
+
}
|
|
29138
|
+
}
|
|
29139
|
+
else if (response.card) {
|
|
29140
|
+
cardConfig = response.card;
|
|
29141
|
+
}
|
|
29142
|
+
else if (response.data) {
|
|
29143
|
+
cardConfig = response.data;
|
|
29144
|
+
}
|
|
29145
|
+
else if (response.response) {
|
|
29146
|
+
// If response is a JSON string, parse it
|
|
29147
|
+
try {
|
|
29148
|
+
const parsed = JSON.parse(response.response);
|
|
29149
|
+
if (parsed && typeof parsed === 'object') {
|
|
29150
|
+
cardConfig = parsed;
|
|
29151
|
+
}
|
|
29152
|
+
}
|
|
29153
|
+
catch (parseError) {
|
|
29154
|
+
if (isDevMode()) {
|
|
29155
|
+
console.error('Failed to parse LLM response as JSON:', parseError);
|
|
29156
|
+
}
|
|
29157
|
+
}
|
|
29158
|
+
}
|
|
29159
|
+
// Update card config if we got valid data
|
|
29160
|
+
if (cardConfig) {
|
|
29161
|
+
this.cardConfig = cardConfig;
|
|
29162
|
+
this.cdr.markForCheck();
|
|
29163
|
+
// Refresh sections if needed
|
|
29164
|
+
if (!this.processedSections.length) {
|
|
29165
|
+
this.refreshProcessedSections(true);
|
|
29166
|
+
}
|
|
29167
|
+
}
|
|
29168
|
+
}
|
|
29169
|
+
});
|
|
29170
|
+
}
|
|
27461
29171
|
/**
|
|
27462
29172
|
* Validates that animation providers are configured.
|
|
27463
29173
|
* Warns in development mode if animations are not available.
|
|
@@ -27486,7 +29196,7 @@ class AICardRendererComponent {
|
|
|
27486
29196
|
}
|
|
27487
29197
|
}
|
|
27488
29198
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AICardRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27489
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: AICardRendererComponent, isStandalone: true, selector: "app-ai-card-renderer", inputs: { loadingMessages: "loadingMessages", loadingTitle: "loadingTitle", cardConfig: "cardConfig", updateSource: "updateSource", isFullscreen: "isFullscreen", tiltEnabled: "tiltEnabled", streamingStage: "streamingStage", streamingProgress: "streamingProgress", streamingProgressLabel: "streamingProgressLabel", isStreaming: "isStreaming", showLoadingByDefault: "showLoadingByDefault", containerWidth: "containerWidth", changeType: "changeType" }, outputs: { fieldInteraction: "fieldInteraction", cardInteraction: "cardInteraction", fullscreenToggle: "fullscreenToggle", agentAction: "agentAction", questionAction: "questionAction", export: "export" }, viewQueries: [{ propertyName: "cardContainer", first: true, predicate: ["cardContainer"], descendants: true }, { propertyName: "tiltContainerRef", first: true, predicate: ["tiltContainer"], descendants: true }, { propertyName: "emptyStateContainer", first: true, predicate: ["emptyStateContainer"], descendants: true }], ngImport: i0, template: "<div\n *ngIf=\"cardConfig\"\n #cardContainer\n class=\"w-full h-full card-container-wrapper\"\n [class.max-w-none]=\"isFullscreen\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n [style.min-height]=\"'0'\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave()\"\n (mousemove)=\"onMouseMove($event)\"\n>\n <div\n class=\"glow-container w-full flex-1 min-h-0\"\n [ngClass]=\"{ 'max-w-none': isFullscreen }\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n >\n <div\n class=\"tilt-container w-full flex-1 min-h-0\"\n [ngClass]=\"{ 'max-w-none': isFullscreen }\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n #tiltContainer\n [ngStyle]=\"tiltStyle\"\n >\n <article\n class=\"ai-card-surface flex-1 min-h-0\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n [ngClass]=\"{\n 'ai-card-surface--fullscreen': isFullscreen,\n 'ai-card-surface--empty-state': !processedSections.length,\n 'streaming-active': isStreamingActive,\n }\"\n [attr.aria-label]=\"(cardConfig && cardConfig.cardTitle) || 'Card'\"\n [attr.aria-live]=\"effectiveStreamingStage === 'streaming' ? 'polite' : 'off'\"\n [attr.aria-busy]=\"effectiveStreamingStage === 'streaming' || effectiveStreamingStage === 'thinking'\"\n role=\"article\"\n >\n <!-- Card Header -->\n <app-card-header\n *ngIf=\"processedSections.length\"\n [cardTitle]=\"cardConfig.cardTitle\"\n [showExport]=\"true\"\n (export)=\"onExport()\"\n >\n </app-card-header>\n\n <!-- Card Section List -->\n <app-card-section-list\n *ngIf=\"processedSections.length; else emptyState\"\n [sections]=\"processedSections\"\n [containerWidth]=\"effectiveContainerWidth\"\n [isStreaming]=\"isStreamingActive\"\n (sectionEvent)=\"onSectionEvent($event)\"\n (layoutChange)=\"onLayoutChange($event)\"\n >\n </app-card-section-list>\n\n <ng-template #emptyState>\n <div\n class=\"card-empty-state\"\n #emptyStateContainer\n (mousemove)=\"onEmptyStateMouseMove($event)\"\n (mouseleave)=\"onEmptyStateMouseLeave()\"\n >\n <div class=\"empty-state-background\">\n <div class=\"empty-state-gradient\" [style.transform]=\"gradientTransform\"></div>\n <div class=\"empty-state-particles\">\n <div\n *ngFor=\"let particle of particles; let i = index; trackBy: trackByParticle\"\n class=\"particle\"\n [class]=\"'particle-' + (i + 1)\"\n [style.transform]=\"particle.transform\"\n [style.opacity]=\"particle.opacity\"\n ></div>\n </div>\n </div>\n <div class=\"empty-state-content\" [style.transform]=\"contentTransform\">\n <div class=\"empty-state-text\">\n <h3 class=\"empty-state-title\">{{ loadingTitle }}</h3>\n <div class=\"empty-state-message-container\">\n <p class=\"empty-state-message\" [@messageAnimation]=\"currentMessageIndex\">\n {{ currentMessage }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n <!-- Card Actions -->\n <app-card-actions\n *ngIf=\"processedSections.length && cardConfig.actions?.length\"\n [actions]=\"cardConfig.actions || []\"\n (actionClick)=\"onActionClick($event)\"\n >\n </app-card-actions>\n\n <!-- Signature at bottom of card -->\n <div *ngIf=\"processedSections.length\" class=\"card-signature\">Powered by Orange Sales Intelligence</div>\n </article>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{all:initial;display:block;position:relative;box-sizing:border-box;padding:8px;background:transparent!important;background-color:transparent!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif;font-size:var(--font-size-base, 14px);line-height:1.5;color:var(--foreground, #1c1c1f);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:\"kern\" 1;-webkit-tap-highlight-color:transparent;contain:layout style}:host([hidden]){display:none!important}:host([disabled]){pointer-events:none;opacity:.6}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border-width:0;border-style:solid;border-color:currentColor}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;line-height:inherit;margin:0}p,span,div{margin:0;padding:0}a{color:inherit;text-decoration:inherit;cursor:pointer}a:focus-visible{outline:2px solid var(--color-brand, #ff7900);outline-offset:2px;border-radius:2px}ul,ol{list-style:none;margin:0;padding:0}li{margin:0;padding:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0;background:transparent;border:none}button,[type=button],[type=reset],[type=submit]{cursor:pointer;-webkit-appearance:button;background-color:transparent;background-image:none}button:focus-visible,[type=button]:focus-visible,[type=reset]:focus-visible,[type=submit]:focus-visible{outline:2px solid var(--color-brand, #ff7900);outline-offset:2px}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}img,video{max-width:100%;height:auto}svg{fill:currentColor}lucide-icon,lucide-angular{display:inline-flex!important;align-items:center!important;justify-content:center!important;vertical-align:middle!important;flex-shrink:0}lucide-icon svg,lucide-angular svg{display:block!important;width:inherit!important;height:inherit!important;stroke:currentColor!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}table{text-indent:0;border-color:inherit;border-collapse:collapse}summary{display:list-item;cursor:pointer}[role=button]{cursor:pointer}:focus-visible{outline:2px solid var(--color-brand, #ff7900);outline-offset:2px}:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media (prefers-contrast: high){*{border-color:currentColor!important}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--muted, #f0f0f1);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--muted-foreground, #92999e);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--foreground, #1c1c1f)}*{scrollbar-width:thin;scrollbar-color:var(--muted-foreground, #92999e) var(--muted, #f0f0f1)}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}}:host{color-scheme:light dark;--color-white: #ffffff;--color-black: #000000;--color-brand: #ff7900;--color-brand-dark: #cc5f00;--color-brand-light: #ff9933;--color-gray-50: #ffffff;--color-gray-100: #fcfcfc;--color-gray-150: #f7f7f7;--color-gray-200: #f0f0f1;--color-gray-300: #e9e9e9;--color-gray-400: #92999e;--color-gray-500: #5a5f62;--color-gray-600: #343541;--color-gray-700: #2a2a2a;--color-gray-800: #232323;--color-gray-850: #171717;--color-gray-900: #000000;--background: #ffffff;--surface-contrast-color: #000000;--theme-ai-card-border: 1px solid rgba(255, 255, 255, .06);--theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, .25);--theme-ai-card-background: var(--background);--theme-ai-card-background-hover: var(--background);--theme-ai-card-box-shadow: 0 2px 12px -1px rgba(0, 0, 0, .12);--theme-ai-card-box-shadow-hover: 0 8px 20px -3px rgba(0, 0, 0, .18), 0 0 0 1px rgba(255, 121, 0, .12);--theme-ai-card-transition: all .28s cubic-bezier(.4, 0, .2, 1);--theme-card-border: 1px solid rgba(0, 0, 0, .06);--theme-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-card-background: var(--background);--theme-card-background-hover: var(--background);--theme-card-box-shadow: 0 1px 2px rgba(15, 15, 20, .03);--theme-card-box-shadow-hover: 0 1px 3px rgba(10, 10, 16, .05);--theme-section-border: 1px solid rgba(0, 0, 0, .06);--theme-section-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, .04);--theme-section-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, .05);--theme-section-transition: border-color .22s cubic-bezier(.4, 0, .2, 1), box-shadow .22s cubic-bezier(.4, 0, .2, 1);--section-background: var(--background);--section-background-hover: var(--background);--section-surface: var(--background);--section-surface-hover: var(--background);--theme-section-item-border: 1px solid rgba(0, 0, 0, .06);--theme-section-item-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-item-background: var(--background);--theme-section-item-background-hover: var(--background);--theme-section-item-box-shadow: var(--shadow-md, 0 1px 2px rgba(0, 0, 0, .04));--theme-section-item-box-shadow-hover: var(--shadow-lg, 0 1px 3px rgba(0, 0, 0, .05));--theme-section-item-hover-transform: none;--theme-section-item-transition: border-color .2s cubic-bezier(.4, 0, .2, 1), background .2s cubic-bezier(.4, 0, .2, 1), box-shadow .2s cubic-bezier(.4, 0, .2, 1);--shadow-sm: 0 1px 1px rgba(0, 0, 0, .03);--shadow-md: 0 1px 2px rgba(0, 0, 0, .04);--shadow-lg: 0 1px 3px rgba(0, 0, 0, .05);--shadow-xl: 0 2px 4px rgba(0, 0, 0, .06);--shadow-glow-sm: 0 0 3px rgba(255, 121, 0, .05);--shadow-glow-md: 0 0 5px rgba(255, 121, 0, .08);--shadow-glow-lg: 0 0 8px rgba(255, 121, 0, .1);--shadow-inset-sm: inset 0 1px 2px rgba(0, 0, 0, .04);--shadow-inset-md: inset 0 2px 4px rgba(0, 0, 0, .05);--shadow-hover: var(--shadow-lg), var(--shadow-glow-sm);--radius-base: .625rem;--radius-xs: .25rem;--radius-sm: .375rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-2xl: 1.5rem;--radius-full: 9999px;--spacing-base: .25rem;--space-1: clamp(2px, .4vw, 6px);--space-2: clamp(4px, .6vw, 8px);--space-3: clamp(6px, .8vw, 12px);--space-4: clamp(8px, 1vw, 14px);--space-5: clamp(10px, 1.2vw, 18px);--space-6: clamp(12px, 1.4vw, 20px);--space-7: clamp(14px, 1.6vw, 22px);--space-8: clamp(16px, 1.8vw, 24px);--space-9: clamp(18px, 2vw, 28px);--space-10: clamp(20px, 2.2vw, 32px);--space-11: clamp(22px, 2.4vw, 36px);--space-12: clamp(24px, 2.6vw, 40px);--spacing-xs: var(--space-1);--spacing-sm: var(--space-2);--spacing-md: var(--space-3);--spacing-lg: var(--space-4);--spacing-xl: var(--space-5);--spacing-2xl: var(--space-6);--spacing-3xl: var(--space-7);--spacing-4xl: var(--space-8);--gap-xs: 4px;--gap-sm: 6px;--gap-md: 8px;--gap-lg: 12px;--gap-xl: 16px;--gap-2xl: 20px;--gap-3xl: 24px;--gap-4xl: 32px;--z-base: 0;--z-content: 1;--z-elevated: 10;--z-card: 10;--z-section: 15;--z-dropdown: 100;--z-tooltip: 200;--z-popover: 300;--z-overlay: 400;--z-modal: 500;--z-dialog: 600;--z-notification: 700;--z-toast: 800;--z-max: 999;--duration-instant: 40ms;--duration-fast: 80ms;--duration-normal: .16s;--duration-moderate: .22s;--duration-slow: .3s;--duration-slower: .38s;--duration-slowest: .46s;--ease-out-smooth: cubic-bezier(.23, 1, .32, 1);--ease-in-out-smooth: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-out-expo: cubic-bezier(.19, 1, .22, 1);--ease-in-out-quad: cubic-bezier(.455, .03, .515, .955);--motion-distance-xs: 2px;--motion-distance-sm: 4px;--motion-distance-md: 6px;--motion-distance-lg: 10px;--motion-distance-xl: 12px;--motion-scale-soft-start: .992;--motion-scale-soft-end: 1;--motion-scale-pop: 1.015;--stagger-delay-fast: 15ms;--stagger-delay-base: 25ms;--stagger-delay-slow: 45ms;--animation-fill-mode: both;--animation-play-state: running;--opacity-subtle: .05;--opacity-muted: .15;--opacity-medium: .4;--opacity-strong: .7;--opacity-solid: .9;--font-size-base: 13px;--text-xs: .625rem;--text-sm: .75rem;--text-base: .875rem;--text-lg: .8125rem;--text-xl: 1.125rem;--text-2xl: 1.0625rem;--text-3xl: 1.75rem;--text-4xl: 2.125rem;--text-5xl: 2.875rem;--text-7xl: 4.375rem;--font-weight-normal: 400;--font-weight-medium: 500;--section-title-font-size: clamp(.92rem, .87rem + .2vw, 1.07rem);--section-title-font-weight: 700;--section-title-letter-spacing: -.02em;--section-title-line-height: 1.3;--section-title-text-shadow: 0 1px 2px rgba(0, 0, 0, .08);--card-title-font-size: clamp(.83rem, .78rem + .15vw, .93rem);--card-title-font-weight: 700;--card-title-letter-spacing: -.01em;--card-title-line-height: 1.4;--card-title-text-shadow: 0 1px 1px rgba(0, 0, 0, .06);--card-subtitle-font-size: clamp(.65rem, .625rem + .1vw, .7rem);--card-subtitle-font-weight: 500;--card-subtitle-letter-spacing: .015em;--card-subtitle-line-height: 1.3;--card-label-font-size: clamp(.5rem, .48rem + .05vw, .5rem);--card-label-font-weight: 700;--card-label-letter-spacing: .065em;--card-label-line-height: 1.25;--card-label-text-transform: uppercase;--card-label-text-shadow: 0 1px 1px rgba(0, 0, 0, .05);--card-value-font-size: clamp(1rem, .95rem + .2vw, 1rem);--card-value-font-size-large: clamp(1.2rem, 1.15rem + .2vw, 1.25rem);--card-value-font-size-xl: clamp(1.25rem, 1.2rem + .2vw, 1.25rem);--card-value-font-weight: 600;--card-value-letter-spacing: -.015em;--card-value-line-height: 1.35;--card-value-text-shadow: 0 2px 4px rgba(0, 0, 0, .1);--card-meta-font-size: clamp(.55rem, .525rem + .1vw, .6rem);--card-meta-font-weight: 500;--card-meta-line-height: 1.3;--card-text-small-font-size: clamp(.355rem, .295rem + .13vw, .455rem);--section-grid-min-width: 200px;--font-size-section-header: var(--section-title-font-size);--card-main-padding: 16px;--card-padding-vertical: 12px;--card-padding-horizontal: 16px;--card-padding: 16px;--card-padding-large: 20px;--section-padding: 12px;--section-container-padding: 12px;--card-min-height: auto;--card-gap: clamp(6px, .6vw, 10px);--card-gap-large: clamp(10px, .8vw, 14px);--card-nested-gap: clamp(3px, .4vw, 6px);--section-header-gap: clamp(3px, .4vw, 6px);--section-header-padding-bottom: clamp(0px, .2vw, 2px);--section-title-margin-bottom: 2px;--card-border-radius: 12px;--card-border-radius-large: 16px;--section-card-gap: 8px;--section-card-border-radius: 10px;--card-element-gap-xs: 2px;--card-element-gap-sm: 3px;--card-element-gap-md: 4px;--card-element-gap-lg: 6px;--card-element-gap-xl: 8px;--border-width-default: 1px;--border-width-accent: 3px;--border-width-accent-sm: 2px;--icon-xs: 10px;--icon-sm: 13px;--icon-md: 16px;--icon-lg: 22px;--icon-xl: 36px;--avatar-sm: 32px;--avatar-md: 36px;--progress-height: 2px;--progress-margin: 4px 0;--tag-padding: 3px 6px;--tag-padding-sm: 2px 4px;--tag-padding-lg: 3px 7px;--grid-gap-xs: var(--gap-sm);--grid-gap-sm: var(--gap-md);--grid-gap-md: var(--gap-lg);--grid-gap-lg: var(--gap-xl);--grid-gap-xl: var(--gap-2xl);--section-grid-gap: var(--gap-md);--section-stack-gap: var(--gap-lg);--section-item-gap: var(--gap-sm);--section-item-padding: var(--gap-lg);--metric-item-padding: 10px 12px;--list-item-padding: 10px 12px;--card-text-primary: var(--foreground);--card-text-secondary: var(--muted-foreground);--card-text-muted: var(--muted-foreground);--card-text-hover: var(--primary);--card-text-label: var(--muted-foreground);--card-meta-color: var(--muted-foreground);--card-background: var(--ai-card-background, rgba(255, 121, 0, .03));--card-background-hover: var(--ai-card-background-hover, rgba(255, 121, 0, .05));--card-transition: all .28s cubic-bezier(.4, 0, .2, 1);--card-transition-fast: all .22s ease;--status-success: #22c55e;--status-success-bg: rgba(34, 197, 94, .15);--status-success-border: rgba(74, 222, 128, .4);--status-warning: #f59e0b;--status-warning-bg: rgba(253, 186, 116, .15);--status-warning-border: rgba(251, 191, 36, .4);--status-error: #ef4444;--status-error-bg: rgba(239, 68, 68, .15);--status-error-border: rgba(248, 113, 113, .4);--status-info: #3b82f6;--status-info-bg: rgba(59, 130, 246, .15);--status-info-border: rgba(147, 197, 253, .4);--status-neutral: #6b7280;--status-neutral-bg: rgba(107, 114, 128, .15);--status-neutral-border: rgba(156, 163, 175, .4);--interactive-hover-bg: rgba(255, 121, 0, .08);--interactive-active-bg: rgba(255, 121, 0, .12);--interactive-focus-ring: 0 0 0 2px rgba(255, 121, 0, .4);--interactive-glow: 0 0 12px rgba(255, 121, 0, .3);--hero-card-border: 1px solid rgba(146, 153, 158, .15);--hero-card-border-hover: rgba(255, 121, 0, .4);--hero-card-background: var(--card);--hero-card-background-hover: var(--card);--hero-card-border-radius: var(--radius-lg);--hero-card-box-shadow: var(--shadow-md);--hero-card-box-shadow-hover: var(--shadow-lg);--hero-card-hover-transform: translateY(-2px);--button-border: 1px solid transparent;--button-border-hover: 1px solid rgba(255, 121, 0, .4);--button-background: var(--primary);--button-background-hover: color-mix(in srgb, var(--primary) 85%, transparent);--button-border-radius: var(--radius-md);--button-box-shadow: var(--shadow-sm);--button-box-shadow-hover: var(--shadow-md);--button-hover-transform: translateY(-1px);--ai-card-border: var(--theme-ai-card-border, none);--ai-card-border-hover: var(--theme-ai-card-border-hover, var(--ai-card-border));--ai-card-background: var( --theme-ai-card-background, var(--card-surface, var(--card-section-bg)) );--ai-card-background-hover: var( --theme-ai-card-background-hover, var(--card-surface-hover, var(--card-section-bg)) );--ai-card-border-radius: var(--radius-lg);--ai-card-box-shadow: var(--theme-ai-card-box-shadow, var(--shadow-md));--ai-card-box-shadow-hover: var(--theme-ai-card-box-shadow-hover, var(--shadow-lg));--ai-card-hover-transform: none;--ai-card-transition-default: border .32s cubic-bezier(.4, 0, .2, 1), background .32s cubic-bezier(.4, 0, .2, 1), box-shadow .32s cubic-bezier(.4, 0, .2, 1);--ai-card-transition: var(--theme-ai-card-transition, var(--ai-card-transition-default));--section-border: var(--theme-section-border, 1px solid rgba(255, 255, 255, .05));--section-border-hover: var(--theme-section-border-hover, 1px solid rgba(255, 121, 0, .15));--section-border-radius: var(--radius-lg);--section-box-shadow-default: var(--shadow-md);--section-box-shadow-hover-default: var(--shadow-lg), var(--shadow-glow-sm);--section-box-shadow: var(--theme-section-box-shadow, var(--section-box-shadow-default));--section-box-shadow-hover: var( --theme-section-box-shadow-hover, var(--section-box-shadow-hover-default) );--section-hover-transform: none;--section-transition: var(--theme-section-transition, none);--section-item-border: var(--theme-section-item-border, 1px solid rgba(255, 255, 255, .05));--section-item-border-hover: var(--theme-section-item-border-hover, 1px solid rgba(255, 121, 0, .08));--section-item-background: var(--theme-section-item-background, var(--card-section-bg));--section-item-background-hover: var( --theme-section-item-background-hover, var(--card-section-bg) );--section-item-border-radius: var(--radius-md);--section-item-box-shadow: var(--theme-section-item-box-shadow, var(--shadow-sm));--section-item-box-shadow-hover-default: var(--shadow-md), var(--shadow-glow-sm);--section-item-box-shadow-hover: var( --theme-section-item-box-shadow-hover, var(--section-item-box-shadow-hover-default) );--section-item-hover-transform: var(--theme-section-item-hover-transform, none);--section-item-transition-default: background .22s cubic-bezier(.4, 0, .2, 1), box-shadow .22s cubic-bezier(.4, 0, .2, 1), border-color .22s cubic-bezier(.4, 0, .2, 1);--section-item-transition: var( --theme-section-item-transition, var(--section-item-transition-default) );--card-border: var(--theme-card-border, 1px solid rgba(146, 153, 158, .15));--card-border-hover: var(--theme-card-border-hover, rgba(255, 121, 0, .4));--card-box-shadow: var(--theme-card-box-shadow, var(--shadow-md));--card-box-shadow-hover: var(--theme-card-box-shadow-hover, var(--shadow-lg));--card-hover-transform: none;--ai-card-entrance-animation: fadeInUpSoft var(--duration-moderate) var(--ease-out-smooth) 10ms 1 normal both;--section-entrance-animation: fadeInSoft var(--duration-moderate) var(--ease-out-smooth) 20ms 1 normal both;--section-item-entrance-animation: fadeInScaleSoft var(--duration-normal) var(--ease-out-smooth) 30ms 1 normal both;display:block;width:100%}:host([data-theme=night]),:host-context([data-theme=night]){color-scheme:dark;--background: #030303;--surface-contrast-color: #ffffff;--foreground: #ffffff;--muted: #242424;--muted-foreground: #aaaaaa;--card: var(--background);--card-surface: var(--background);--card-foreground: #ffffff;--card-surface-hover: var(--background);--card-section-bg: #141414;--card-section-card-bg: #1a1a1a;--theme-ai-card-border: 1px solid rgba(255, 255, 255, .06);--theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-ai-card-background: #141414;--theme-ai-card-background-hover: #1a1a1a;--theme-ai-card-box-shadow: 0 2px 12px -1px rgba(0, 0, 0, .15);--theme-ai-card-box-shadow-hover: 0 6px 16px -2px rgba(0, 0, 0, .22), 0 0 0 1px rgba(255, 121, 0, .1);--theme-card-border: 1px solid rgba(255, 255, 255, .06);--theme-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-card-background: var(--background);--theme-card-background-hover: var(--background);--theme-card-box-shadow: 0 1px 3px rgba(0, 0, 0, .25);--theme-card-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, .3);--section-background: var(--background);--section-background-hover: var(--background);--section-surface: #141414;--section-surface-hover: #1a1a1a;--popover: #111111;--popover-foreground: #ffffff;--primary: #ff7900;--primary-foreground: #ffffff;--secondary: #333333;--secondary-foreground: #ffffff;--accent: #ff7900;--accent-foreground: #000000;--destructive: #d4183d;--destructive-foreground: #ffffff;--border: rgba(200, 200, 200, .3);--input: transparent;--input-background: #222222;--switch-background: #333333;--ring: rgba(255, 121, 0, .6);--chart-1: #ff7900;--chart-2: #ff9933;--chart-3: #cc5f00;--chart-4: #ffe6cc;--chart-5: #ff4500;--hero-card-border: 1px solid rgba(233, 233, 233, .2);--hero-card-border-hover: 1px solid rgba(255, 121, 0, .25);--theme-section-border: 1px solid rgba(255, 255, 255, .1);--theme-section-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);--theme-section-box-shadow-hover: 0 2px 5px rgba(0, 0, 0, .35);--theme-section-item-border: 1px solid rgba(255, 255, 255, .06);--theme-section-item-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-item-background: #1a1a1a;--theme-section-item-background-hover: #1e1e1e;--theme-section-item-box-shadow: 0 1px 2px rgba(0, 0, 0, .25);--theme-section-item-box-shadow-hover: 0 1px 4px rgba(0, 0, 0, .3);--theme-section-item-hover-transform: none}:host([data-theme=day]),:host-context([data-theme=day]){color-scheme:light;--background: #ffffff;--foreground: #1c1c1f;--muted: #f4f4f6;--muted-foreground: #555861;--card: var(--background);--card-surface: var(--background);--card-foreground: #1c1c1f;--card-surface-hover: var(--background);--card-section-bg: #fafafa;--card-section-card-bg: #f5f5f5;--theme-ai-card-border: 1px solid rgba(0, 0, 0, .06);--theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-ai-card-background: #ffffff;--theme-ai-card-background-hover: #fcfcfc;--theme-ai-card-box-shadow: 0 2px 12px -1px rgba(0, 0, 0, .06);--theme-ai-card-box-shadow-hover: 0 6px 16px -2px rgba(0, 0, 0, .1), 0 0 0 1px rgba(255, 121, 0, .08);--theme-card-border: 1px solid rgba(0, 0, 0, .05);--theme-card-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-card-background: var(--background);--theme-card-background-hover: var(--background);--theme-card-box-shadow: 0 1px 2px rgba(15, 15, 20, .03);--theme-card-box-shadow-hover: 0 1px 3px rgba(10, 10, 16, .04);--section-background: var(--background);--section-background-hover: var(--background);--section-surface: #fafafa;--section-surface-hover: #f5f5f5;--popover: #ffffff;--popover-foreground: #1a1a1a;--primary: #ff7900;--primary-foreground: #ffffff;--secondary: #f5f5f5;--secondary-foreground: #1a1a1a;--accent: #ff7900;--accent-foreground: #ffffff;--destructive: #d4183d;--destructive-foreground: #ffffff;--border: rgba(200, 200, 200, .5);--input: transparent;--input-background: #f9f9f9;--switch-background: #e5e5e5;--ring: rgba(255, 121, 0, .4);--chart-1: #ff7900;--chart-2: #ff9933;--chart-3: #cc5f00;--chart-4: #ffe6cc;--chart-5: #ff4500;--color-gray-700: #e0e0e0;--color-gray-600: #d0d0d0;--hero-card-border: 1px solid rgba(146, 153, 158, .25);--hero-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-section-border: 1px solid rgba(0, 0, 0, .05);--theme-section-border-hover: 1px solid rgba(255, 121, 0, .12);--theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, .04);--theme-section-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, .05);--theme-section-item-border: 1px solid rgba(0, 0, 0, .05);--theme-section-item-border-hover: 1px solid rgba(255, 121, 0, .12);--theme-section-item-background: #f7f7f7;--theme-section-item-background-hover: #f4f4f4;--theme-section-item-box-shadow: 0 1px 2px rgba(0, 0, 0, .04);--theme-section-item-box-shadow-hover: 0 1px 3px rgba(0, 0, 0, .05);--theme-section-item-hover-transform: none}div [class$=-icon]:before{vertical-align:middle}.bg-red-500\\/10{background-color:#ef44441a}.bg-yellow-500\\/10{background-color:#ecaf221a}.border-red-500\\/50{border-color:#ef444480}.border-red-500\\/20{border-color:#ef444433}.border-yellow-500\\/50{border-color:#ecaf2280}.transition-smooth{transition:all var(--duration-normal) var(--ease-out-smooth)}.transition-fast{transition:all var(--duration-fast) var(--ease-out-smooth)}.transition-slow{transition:all var(--duration-slow) var(--ease-out-smooth)}.transition-transform{transition:transform var(--duration-normal) var(--ease-out-smooth)}.transition-transform-fast{transition:transform var(--duration-fast) var(--ease-out-smooth)}.transition-opacity{transition:opacity var(--duration-normal) var(--ease-out-smooth)}.transition-opacity-fast{transition:opacity var(--duration-fast) var(--ease-out-smooth)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.hover-lift{transition:transform var(--duration-normal) var(--ease-out-smooth)}.hover-lift:hover{transform:translateZ(0)}.hover-scale{transition:transform var(--duration-normal) var(--ease-out-smooth)}.hover-scale:hover{transform:scale(1.05) translateZ(0)}.hover-glow{transition:box-shadow var(--duration-normal) var(--ease-out-smooth)}.hover-glow:hover{box-shadow:0 0 20px color-mix(in srgb,var(--primary) 40%,transparent)}.active-press:active{transform:scale(.98) translateZ(0)}.focus-ring:focus-visible{outline:2px solid var(--ring);outline-offset:2px}.backdrop-blur-sm{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.backdrop-blur-md{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.backdrop-blur-lg{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}.backdrop-blur-xl{backdrop-filter:blur(32px);-webkit-backdrop-filter:blur(32px)}.backdrop-blur-none{backdrop-filter:none;-webkit-backdrop-filter:none}.glass-panel{background:color-mix(in srgb,var(--background, #0c0c0c) 80%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid color-mix(in srgb,var(--border, rgba(255, 255, 255, .1)) 50%,transparent)}.glass-panel-dark{background:color-mix(in srgb,rgba(16,16,24,.86) 90%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid rgba(255,255,255,.08);box-shadow:0 28px 70px #00000080}.glass-panel-light{background:color-mix(in srgb,rgba(255,255,255,.8) 90%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(0,0,0,.1)}.glass-panel-brand{background:color-mix(in srgb,var(--background, #0c0c0c) 85%,var(--color-brand, #ff7900) 5%);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}.stagger-delay-1{animation-delay:80ms}.stagger-delay-2{animation-delay:.16s}.stagger-delay-3{animation-delay:.24s}.stagger-delay-4{animation-delay:.32s}.stagger-delay-5{animation-delay:.4s}.stagger-delay-6{animation-delay:.48s}.stagger-delay-7{animation-delay:.56s}.stagger-delay-8{animation-delay:.64s}.stagger-delay-9{animation-delay:.72s}.stagger-delay-10{animation-delay:.8s}.transition-delay-1{transition-delay:80ms}.transition-delay-2{transition-delay:.16s}.transition-delay-3{transition-delay:.24s}.transition-delay-4{transition-delay:.32s}.transition-delay-5{transition-delay:.4s}@media (prefers-reduced-motion: reduce){.transition-smooth,.transition-fast,.transition-slow,.transition-transform,.transition-transform-fast,.transition-opacity,.transition-opacity-fast,.transition-colors,.hover-lift,.hover-scale,.hover-glow{transition:none!important}.hover-scale:hover,.active-press:active{transform:none!important}}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,var(--motion-distance-lg),0)}to{opacity:1;transform:translateZ(0)}}@keyframes fadeIn{0%{opacity:0;transform:translateZ(0)}to{opacity:1;transform:translateZ(0)}}@keyframes fadeInSoft{0%{opacity:0;transform:translate3d(0,var(--motion-distance-sm),0) scale(var(--motion-scale-soft-start))}to{opacity:1;transform:translateZ(0) scale(var(--motion-scale-soft-end))}}@keyframes slideUp{0%{transform:translate3d(0,var(--motion-distance-xl),0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes slideDown{0%{transform:translate3d(0,calc(var(--motion-distance-xl) * -1),0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes slideInLeft{0%{transform:translate3d(calc(var(--motion-distance-xl) * -1),0,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes slideInRight{0%{transform:translate3d(var(--motion-distance-xl),0,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes fadeInUpSoft{0%{opacity:0;transform:translate3d(0,var(--motion-distance-md),0) scale(var(--motion-scale-soft-start))}to{opacity:1;transform:translateZ(0) scale(var(--motion-scale-soft-end))}}@keyframes scale{0%{transform:scale(var(--motion-scale-pulse-min)) translateZ(0)}70%{transform:scale(var(--motion-scale-pop)) translateZ(0)}to{transform:scale(var(--motion-scale-soft-end)) translateZ(0)}}@keyframes scaleIn{0%{transform:scale(var(--motion-scale-soft-start)) translateZ(0);opacity:0}to{transform:scale(var(--motion-scale-soft-end)) translateZ(0);opacity:1}}@keyframes fadeInScaleSoft{0%{opacity:0;transform:scale(var(--motion-scale-soft-start)) translateZ(0)}to{opacity:1;transform:scale(var(--motion-scale-soft-end)) translateZ(0)}}@keyframes pulse{0%,to{transform:scale(var(--motion-scale-soft-end)) translateZ(0);opacity:1}50%{transform:scale(var(--motion-scale-pop)) translateZ(0);opacity:.8}}@keyframes hoverLift{0%{transform:translateY(0) translateZ(0)}to{transform:translateY(-2px) translateZ(0)}}@keyframes glowAccent{0%,to{text-shadow:0 1px 2px rgba(0,0,0,.08)}50%{text-shadow:0 2px 6px rgba(255,121,0,.25)}}@keyframes valueEmphasize{0%,to{color:var(--card-text-primary)}50%{color:color-mix(in srgb,var(--card-text-primary) 85%,var(--color-brand) 15%)}}@keyframes glowPulse{0%,to{opacity:.6;filter:blur(25px)}50%{opacity:1;filter:blur(30px)}}@keyframes glowDrift{0%,to{opacity:.7;transform:translateZ(0)}25%{opacity:.8;transform:translate3d(5px,-5px,0)}50%{opacity:.9;transform:translate3d(0,5px,0)}75%{opacity:.8;transform:translate3d(-5px,0,0)}}@keyframes shimmer{0%,to{opacity:.5}50%{opacity:.8}}@keyframes spin{0%{transform:rotate(0) translateZ(0)}to{transform:rotate(360deg) translateZ(0)}}@keyframes spinSlow{0%{transform:rotate(0) translateZ(0)}to{transform:rotate(360deg) translateZ(0)}}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(calc(var(--motion-distance-sm) * -1),0,0)}20%,40%,60%,80%{transform:translate3d(var(--motion-distance-sm),0,0)}}@keyframes bounce{0%,to{transform:translateZ(0);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:translate3d(0,calc(var(--motion-distance-lg) * -1),0);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes sectionEnter{0%{opacity:0;transform:translate3d(0,20px,0) scale(.95)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes sectionStreamingGlow{0%,to{box-shadow:0 0 #ff790000}50%{box-shadow:0 0 12px 2px #ff790026}}@keyframes fieldEnter{0%{opacity:0;transform:translate3d(0,10px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes itemEnter{0%{opacity:0;transform:translate3d(-10px,0,0)}to{opacity:1;transform:translateZ(0)}}@keyframes sparkTravel{0%{top:-1.5px;left:0}25%{top:-1.5px;left:calc(100% - 1.5px)}50%{top:calc(100% - 1.5px);left:calc(100% - 1.5px)}75%{top:calc(100% - 1.5px);left:0}to{top:-1.5px;left:0}}@keyframes sectionMagicAppear{0%{opacity:0;transform:translateY(20px) scale(.95);filter:blur(8px)}60%{opacity:1;transform:translateY(-4px) scale(1.02);filter:blur(0)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}@keyframes shimmerSweep{0%{transform:translate(-100%);opacity:1}to{transform:translate(100%);opacity:0}}@keyframes innerFlash{0%{box-shadow:inset 0 0 30px #ff950066}to{box-shadow:inset 0 0 #ff950000}}@keyframes innerBorderPulse{0%,to{box-shadow:inset 0 0 0 1px #ff79001a}50%{box-shadow:inset 0 0 0 1px #ff79004d}}@keyframes cursorBlink{0%,50%{opacity:1}51%,to{opacity:0}}@keyframes sectionGlowPulse{0%,to{box-shadow:0 0 10px #ff790026}50%{box-shadow:0 0 20px #ff790059}}@keyframes fieldEnterBounce{0%{opacity:0;transform:translateY(12px) scale(.98)}60%{opacity:1;transform:translateY(-2px) scale(1.01)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes stateFade{0%{opacity:0;transform:translate3d(0,8px,0) scale(.98)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes stateSlideOut{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-10px,0)}}@keyframes stateSlideIn{0%{opacity:0;transform:translate3d(0,10px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes errorShake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-4px,0,0)}20%,40%,60%,80%{transform:translate3d(4px,0,0)}}@keyframes errorPulse{0%,to{opacity:1;box-shadow:0 0 #ef444466}50%{opacity:.9;box-shadow:0 0 0 8px #ef444400}}@keyframes shimmerWave{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeletonPulse{0%,to{opacity:.6}50%{opacity:1}}@keyframes fadeInScale{0%{opacity:0;transform:scale(.98) translateZ(0)}to{opacity:1;transform:scale(1) translateZ(0)}}@keyframes pulseGlow{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes float{0%,to{transform:translateY(0) translateZ(0)}50%{transform:translateY(-10px) translateZ(0)}}@keyframes pulseRing{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.3)}}@keyframes textShimmer{0%,to{background-position:-200% 0}50%{background-position:200% 0}}@keyframes waveSlide{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes sectionPulse{0%,to{transform:scale(1)}50%{transform:scale(1.01)}}@keyframes sectionBorderFade{0%{opacity:1;box-shadow:0 0 20px color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent)}to{opacity:0;box-shadow:0 0 0 transparent}}@keyframes newSectionGlow{0%{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent);box-shadow:0 0 25px color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent)}to{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent)}}@keyframes dotPulse{0%,to{transform:translate(-50%,-50%) scale(1);opacity:.6}50%{transform:translate(-50%,-50%) scale(1.5);opacity:.3}}@keyframes ringExpand{0%{transform:translate(-50%,-50%) scale(.8);opacity:.2}50%{transform:translate(-50%,-50%) scale(1);opacity:.1}to{transform:translate(-50%,-50%) scale(1.2);opacity:0}}@keyframes generatingBgPulse{0%,to{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%)}50%{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 12%,transparent) 0%,transparent 70%)}}@keyframes cardGeneratingPulse{0%,to{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent),0 4px 20px #00000026,0 0 0 transparent}50%{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent),0 4px 20px #00000026,0 0 30px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}}@keyframes gradientPulse{0%,to{opacity:.6;transform:translate(-50%,-50%) scale(1)}50%{opacity:.9;transform:translate(-50%,-50%) scale(1.05)}}@keyframes ringPulse{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}@keyframes iconFloat{0%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-6px) rotate(-3deg)}50%{transform:translateY(-10px) rotate(0)}75%{transform:translateY(-6px) rotate(3deg)}}@keyframes particleFloat{0%,to{transform:translateY(0) translate(0) scale(1);opacity:.3}25%{transform:translateY(-30px) translate(20px) scale(1.2);opacity:.7}50%{transform:translateY(-60px) translate(-10px) scale(.8);opacity:1}75%{transform:translateY(-30px) translate(15px) scale(1.1);opacity:.6}}@keyframes spinnerRotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spinnerDash{0%{stroke-dasharray:1,125.6;stroke-dashoffset:0}50%{stroke-dasharray:94.2,125.6;stroke-dashoffset:-31.4}to{stroke-dasharray:94.2,125.6;stroke-dashoffset:-125.6}}@keyframes textShimmerFlow{0%,to{background-position:-200% 0}50%{background-position:200% 0}}@keyframes rippleEffect{0%{transform:scale(0);opacity:.6}to{transform:scale(2.5);opacity:0}}.animate-fade-in{animation:fadeIn var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-up{animation:fadeInUp var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-soft{animation:fadeInSoft var(--duration-slow) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-up-soft{animation:fadeInUpSoft var(--duration-slow) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-scale-soft{animation:fadeInScaleSoft var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-up{animation:slideUp var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-down{animation:slideDown var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-in-left{animation:slideInLeft var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-in-right{animation:slideInRight var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-scale{animation:scale var(--duration-moderate) var(--ease-spring);animation-fill-mode:var(--animation-fill-mode)}.animate-scale-in{animation:scaleIn var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-pulse{animation:pulse var(--duration-slow) var(--ease-in-out-smooth) infinite}.animate-spin{animation:spin 1s linear infinite}.animate-spin-slow{animation:spinSlow 3s linear infinite}.animate-shake{animation:shake var(--duration-slow) var(--ease-in-out-smooth)}.animate-bounce{animation:bounce 1s infinite}.section-streaming{animation:sectionEnter .4s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(0,20px,0) scale(.95);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px;contain:layout style paint;transform-origin:center center}.section-entered{opacity:1;transform:translateZ(0) scale(1);will-change:auto;backface-visibility:visible;perspective:none}.section-streaming-glow{animation:sectionStreamingGlow 1.5s ease-in-out infinite}.section-stagger-0{animation-delay:0ms}.section-stagger-1{animation-delay:80ms}.section-stagger-2{animation-delay:.16s}.section-stagger-3{animation-delay:.24s}.section-stagger-4{animation-delay:.32s}.section-stagger-5{animation-delay:.4s}.section-stagger-6{animation-delay:.48s}.section-stagger-7{animation-delay:.56s}.section-stagger-8{animation-delay:.64s}.section-stagger-9{animation-delay:.72s}.section-stagger-10{animation-delay:.8s}.field-streaming{animation:fieldEnter .3s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(0,10px,0);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px;contain:layout style paint;transform-origin:center center}.field-entered{opacity:1;transform:translateZ(0);will-change:auto;backface-visibility:visible;perspective:none}.item-streaming{animation:itemEnter .35s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(-10px,0,0);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px;contain:layout style paint;transform-origin:center center}.item-entered{opacity:1;transform:translateZ(0);will-change:auto;backface-visibility:visible;perspective:none}.field-stagger-0{animation-delay:0ms}.field-stagger-1{animation-delay:40ms}.field-stagger-2{animation-delay:80ms}.field-stagger-3{animation-delay:.12s}.field-stagger-4{animation-delay:.16s}.field-stagger-5{animation-delay:.2s}.field-stagger-6{animation-delay:.24s}.field-stagger-7{animation-delay:.28s}.field-stagger-8{animation-delay:.32s}.field-stagger-9{animation-delay:.36s}.field-stagger-10{animation-delay:.4s}.field-stagger-11{animation-delay:.44s}.field-stagger-12{animation-delay:.48s}.field-stagger-13{animation-delay:.52s}.field-stagger-14{animation-delay:.56s}.field-stagger-15{animation-delay:.6s}.item-stagger-0{animation-delay:0ms}.item-stagger-1{animation-delay:40ms}.item-stagger-2{animation-delay:80ms}.item-stagger-3{animation-delay:.12s}.item-stagger-4{animation-delay:.16s}.item-stagger-5{animation-delay:.2s}.item-stagger-6{animation-delay:.24s}.item-stagger-7{animation-delay:.28s}.item-stagger-8{animation-delay:.32s}.item-stagger-9{animation-delay:.36s}.item-stagger-10{animation-delay:.4s}.item-stagger-11{animation-delay:.44s}.item-stagger-12{animation-delay:.48s}.item-stagger-13{animation-delay:.52s}.item-stagger-14{animation-delay:.56s}.item-stagger-15{animation-delay:.6s}.state-transition-enter{animation:stateFade .4s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(0,8px,0) scale(.98);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px}.state-transition-exit{animation:stateSlideOut .3s cubic-bezier(.4,0,.2,1) forwards;will-change:transform,opacity;backface-visibility:hidden;perspective:1000px}.state-entered{opacity:1;transform:translateZ(0) scale(1);will-change:auto;backface-visibility:visible;perspective:none}.error-shake{animation:errorShake .5s cubic-bezier(.4,0,.2,1)}.error-pulse{animation:errorPulse 2s ease-in-out infinite}.skeleton-shimmer{background:linear-gradient(90deg,var(--muted, rgba(255, 255, 255, .1)) 0%,var(--muted-foreground, rgba(255, 255, 255, .2)) 20%,var(--muted, rgba(255, 255, 255, .1)) 40%,var(--muted, rgba(255, 255, 255, .1)) 100%);background-size:200% 100%;animation:shimmerWave 1.5s ease-in-out infinite}.skeleton-pulse{animation:skeletonPulse 2s ease-in-out infinite}.animate-delay-1{animation-delay:calc(var(--stagger-delay-base) * 1)}.animate-delay-2{animation-delay:calc(var(--stagger-delay-base) * 2)}.animate-delay-3{animation-delay:calc(var(--stagger-delay-base) * 3)}.animate-delay-4{animation-delay:calc(var(--stagger-delay-base) * 4)}.animate-delay-5{animation-delay:calc(var(--stagger-delay-base) * 5)}.animate-fade-in-scale{animation:fadeInScale .5s cubic-bezier(.4,0,.2,1);animation-fill-mode:var(--animation-fill-mode)}.animate-pulse-glow{animation:pulseGlow 2s ease-in-out infinite}.animate-float{animation:float 3s ease-in-out infinite}.animate-pulse-ring{animation:pulseRing 2s ease-in-out infinite}.animate-text-shimmer{background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:textShimmer 2s ease-in-out infinite}.animate-wave-slide{background:linear-gradient(90deg,transparent 0%,var(--color-brand, #ff7900) 25%,var(--color-brand, #ff7900) 75%,transparent 100%);background-size:200% 100%;animation:waveSlide 2s ease-in-out infinite}.animate-section-pulse{animation:sectionPulse 2s ease-out}.animate-section-border-fade{animation:sectionBorderFade 2s ease-out forwards}.animate-new-section-glow{animation:newSectionGlow .6s ease-out forwards}.animate-dot-pulse{animation:dotPulse 2s ease-in-out infinite}.animate-ring-expand{animation:ringExpand 2s ease-in-out infinite}.animate-generating-pulse{animation:generatingBgPulse 3s ease-in-out infinite,cardGeneratingPulse 2s ease-in-out infinite}.animate-gradient-pulse{animation:gradientPulse 5s ease-in-out infinite}.animate-ring-pulse{animation:ringPulse 3s ease-in-out infinite}.animate-icon-float{animation:iconFloat 4s ease-in-out infinite}.animate-particle-float{animation:particleFloat 4s ease-in-out infinite}.animate-spinner{animation:spinnerRotate 1.5s linear infinite}.btn-ripple{position:relative;overflow:hidden}.btn-ripple:after{content:\"\";position:absolute;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);background:radial-gradient(circle,color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent) 0%,transparent 70%);pointer-events:none;border-radius:inherit;opacity:0}.btn-ripple:active:after{animation:rippleEffect .6s ease-out}.animate-cursor-blink{animation:cursorBlink .8s step-end infinite}.animate-spark-travel{position:relative}.animate-spark-travel:before{content:\"\";position:absolute;width:3px;height:3px;background:var(--color-brand, #ff7900);border-radius:50%;box-shadow:0 0 6px 1px color-mix(in srgb,var(--color-brand, #ff7900) 80%,transparent);animation:sparkTravel 3s linear infinite;pointer-events:none;z-index:10}.section-highlight:after{content:\"\";position:absolute;inset:-4px;border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent);border-radius:14px;pointer-events:none;animation:sectionBorderFade 2s ease-out forwards}.will-animate{will-change:transform,opacity}.will-animate-transform{will-change:transform}.will-animate-opacity{will-change:opacity}.animation-complete{will-change:auto}.gpu-accelerated{transform:translateZ(0);backface-visibility:hidden;perspective:1000px}@media (prefers-reduced-motion: reduce){.animate-fade-in,.animate-fade-in-up,.animate-fade-in-scale,.animate-slide-up,.animate-slide-down,.animate-slide-in-left,.animate-slide-in-right,.animate-scale,.animate-scale-in,.animate-pulse,.animate-pulse-glow,.animate-float,.animate-pulse-ring,.animate-text-shimmer,.animate-wave-slide,.animate-section-pulse,.animate-section-border-fade,.animate-new-section-glow,.animate-dot-pulse,.animate-ring-expand,.animate-generating-pulse,.animate-gradient-pulse,.animate-ring-pulse,.animate-icon-float,.animate-particle-float,.animate-spinner,.animate-cursor-blink,.animate-spark-travel,.animate-spin,.animate-spin-slow,.animate-shake,.animate-bounce,.section-streaming,.section-streaming-glow,.section-highlight,.field-streaming,.item-streaming,.state-transition-enter,.state-transition-exit,.error-shake,.error-pulse,.skeleton-shimmer,.skeleton-pulse,.btn-ripple{animation:none!important;transition:none!important;opacity:1!important;transform:none!important}.animate-spark-travel:before,.section-highlight:after,.btn-ripple:after{animation:none!important;display:none}.animate-text-shimmer{background:none!important;-webkit-text-fill-color:var(--foreground, currentColor)!important}.will-animate,.will-animate-transform,.will-animate-opacity,.section-streaming{will-change:auto!important}}.tilt-container{transform:perspective(1000px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) scale(var(--tilt-scale, 1)) translateZ(0)!important;transition:box-shadow .2s cubic-bezier(.2,0,.2,1);transform-style:preserve-3d;backface-visibility:hidden;position:relative;border-radius:var(--card-border-radius);contain:layout style;isolation:isolate;will-change:transform;transform-origin:center center}.tilt-container:not(:hover){transition:box-shadow .8s cubic-bezier(.22,.61,.36,1);will-change:auto}.tilt-container:hover{will-change:transform;box-shadow:0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, .375));transition:box-shadow .2s cubic-bezier(.2,0,.2,1)}.glow-container{position:relative;filter:drop-shadow(0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, .225)));transition:filter .2s cubic-bezier(.4,0,.2,1);will-change:filter;contain:layout style;isolation:isolate;transform:translateZ(0)}.glow-container:hover{will-change:filter;transition:filter .2s cubic-bezier(.4,0,.2,1)}.glow-container:not(:hover){will-change:auto;transition:filter .5s cubic-bezier(.25,.46,.45,.94)}.card-reflection{position:absolute;inset:0;background:transparent;opacity:var(--reflection-opacity, .08);transition:opacity .2s cubic-bezier(.4,0,.2,1);pointer-events:none;border-radius:inherit;will-change:opacity;backface-visibility:hidden}.tilt-container:not(:hover) .card-reflection{transition:opacity .5s cubic-bezier(.25,.46,.45,.94)}.tilt-wrapper{transform-style:preserve-3d;transition:transform .3s cubic-bezier(.4,0,.2,1);backface-visibility:hidden;contain:layout style}.tilt-content{transform-style:preserve-3d;backface-visibility:hidden}.tilt-glare{position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:transparent;opacity:var(--glare-opacity, 0);transition:opacity var(--glow-duration) var(--ease-out-smooth);will-change:opacity;backface-visibility:hidden}@media (max-width: 768px){.tilt-container{transform:perspective(800px) rotateX(calc(var(--tilt-x, 0deg) * .7)) rotateY(calc(var(--tilt-y, 0deg) * .7)) scale(var(--tilt-scale, 1)) translateZ(0)}.tilt-container:hover{box-shadow:0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, .375))}}.ai-card-surface--fullscreen .tilt-container{transform:perspective(1000px) translateZ(0)!important;box-shadow:none!important;will-change:auto!important}.ai-card-surface--fullscreen .glow-container{filter:none!important;will-change:auto!important}.ai-card-surface--fullscreen .card-reflection,.ai-card-surface--fullscreen .tilt-glare{opacity:0!important;display:none}@media (prefers-reduced-motion: reduce){.tilt-container,.tilt-wrapper{transform:none!important;transition:none!important}.tilt-container:hover{box-shadow:none!important}.glow-container{filter:none!important;transition:none!important}.card-reflection,.tilt-glare{opacity:0!important;transition:none!important}.tilt-container,.glow-container,.card-reflection,.tilt-glare{will-change:auto!important}}@supports (grid-template-rows: masonry){.masonry-container--native{display:grid!important;grid-template-columns:repeat(auto-fill,minmax(var(--section-grid-min-width, 260px),1fr));grid-template-rows:masonry;gap:var(--section-card-gap, 12px);align-tracks:stretch}.masonry-container--native .masonry-item{position:relative!important;left:auto!important;top:auto!important;width:auto!important}}.masonry-container--grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--section-grid-min-width, 260px),1fr));grid-auto-rows:minmax(100px,auto);grid-auto-flow:dense;gap:var(--section-card-gap, 12px)}.masonry-container--grid .masonry-item{position:relative}.masonry-container--grid .masonry-item[data-col-span=\"2\"]{grid-column:span 2}.masonry-container--grid .masonry-item[data-col-span=\"3\"]{grid-column:span 3}.masonry-container--grid .masonry-item[data-col-span=\"4\"]{grid-column:span 4}@media (max-width: 600px){.masonry-container--grid .masonry-item[data-col-span]{grid-column:span 1}}@supports (grid-template-rows: subgrid){.masonry-container--subgrid .masonry-item{display:grid;grid-template-rows:subgrid;grid-row:span 2}.masonry-container--subgrid .masonry-item .ai-section__header{grid-row:1}.masonry-container--subgrid .masonry-item .ai-section__body{grid-row:2}}.masonry-grid-container{position:relative;width:100%;height:auto;min-height:200px;will-change:height;transform:translateZ(0)}.masonry-grid-container .masonry-item{position:absolute;width:auto;height:auto;box-sizing:border-box;transform-origin:top left;will-change:transform,opacity;backface-visibility:hidden}.masonry-item{height:fit-content;min-height:fit-content;width:100%;break-inside:avoid;page-break-inside:avoid;display:flex;flex-direction:column;overflow:visible;box-sizing:border-box;overflow-wrap:break-word;word-wrap:break-word;transition:top .4s cubic-bezier(.4,0,.2,1),left .4s cubic-bezier(.4,0,.2,1),width .4s cubic-bezier(.4,0,.2,1),opacity .35s ease-out;border:var(--section-border)!important;border-radius:var(--section-border-radius)!important;background:var(--section-surface, var(--section-background, var(--card-section-bg)))!important;box-shadow:var(--section-box-shadow)!important;transition:var(--section-transition, none)!important;animation:var(--section-entrance-animation, none);will-change:opacity,transform;padding:var(--section-container-padding)!important;gap:var(--section-card-gap)}.masonry-item:hover{background:var(--section-surface-hover, var(--section-background-hover, var(--section-surface)))!important;border-color:var(--section-border-hover, var(--section-border))!important;box-shadow:var(--section-box-shadow-hover, var(--section-box-shadow))!important}.masonry-item>*{height:auto!important;min-height:fit-content!important;max-height:none!important}.masonry-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:12px;grid-auto-rows:minmax(100px,auto)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:12px}.masonry-item--vertical .ai-section__body{display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;gap:var(--section-card-gap)!important}.masonry-item--horizontal .ai-section__body{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important;align-items:flex-start!important;gap:var(--section-card-gap)!important}.masonry-item--horizontal .ai-section__body>*{flex:1 1 200px!important;min-width:180px!important;max-width:100%!important}.masonry-item--horizontal .contact-card,.masonry-item--horizontal .network-card{flex:1 1 220px!important;min-width:200px!important;max-width:320px!important}.masonry-item--horizontal .analytics-metric,.masonry-item--horizontal .financial-metric{flex:1 1 160px!important;min-width:140px!important;max-width:260px!important}.masonry-item--horizontal .overview-card{flex:1 1 180px!important;min-width:160px!important;max-width:280px!important}.masonry-item--auto .ai-section__body{display:flex!important;flex-direction:column!important;flex-wrap:wrap!important;gap:var(--section-card-gap)!important}@container (min-width: 500px){.masonry-item--auto .ai-section__body{flex-direction:row!important}.masonry-item--auto .ai-section__body>*{flex:1 1 200px!important;min-width:180px!important}}@media (max-width: 480px){.masonry-item--horizontal .ai-section__body{flex-direction:column!important;flex-wrap:nowrap!important}.masonry-item--horizontal .ai-section__body>*{flex:1 1 auto!important;min-width:100%!important;max-width:100%!important}}.masonry-item{container-type:inline-size;container-name:section}.masonry-item--priority-critical:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);border-radius:0 2px 2px 0}.masonry-item--sticky{position:sticky!important;top:0!important;z-index:10!important;background:var(--card-background)!important}.masonry-item--flex-grow{flex-grow:1!important}@media (prefers-reduced-motion: reduce){.masonry-item,.masonry-grid-container .masonry-item{transition:none}}.masonry-container--compact{--section-card-gap: 8px}.masonry-container--compact .masonry-item{padding:calc(var(--section-container-padding) * .75)!important}.masonry-container--comfortable{--section-card-gap: 16px}.masonry-container--comfortable .masonry-item{padding:calc(var(--section-container-padding) * 1.25)!important}.masonry-container--track-aligned{display:grid;grid-template-columns:repeat(var(--masonry-columns, 4),1fr);grid-auto-rows:minmax(50px,auto);gap:var(--section-card-gap, 12px)}.masonry-container--track-aligned .masonry-item{position:relative!important;left:auto!important;top:auto!important;width:auto!important;align-self:start}.masonry-container--debug{background-image:linear-gradient(to right,rgba(255,121,0,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,121,0,.1) 1px,transparent 1px);background-size:calc(100% / var(--masonry-columns, 4)) 50px}.masonry-container--debug .masonry-item{outline:2px dashed rgba(255,121,0,.5)!important;outline-offset:-2px}.masonry-container--debug .masonry-item:after{content:attr(data-col-span) \" col\";position:absolute;top:4px;right:4px;background:#ff7900e6;color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px;z-index:100;pointer-events:none}.masonry-container--debug .masonry-item[data-priority=critical]:before{content:\"\\2605 Critical\";position:absolute;top:4px;left:4px;background:#ef4444;color:#fff;font-size:9px;font-weight:600;padding:2px 4px;border-radius:3px;z-index:100}.masonry-container--debug .masonry-item[data-priority=important]:before{content:\"\\25c6 Important\";position:absolute;top:4px;left:4px;background:#f59e0b;color:#fff;font-size:9px;font-weight:600;padding:2px 4px;border-radius:3px;z-index:100}.masonry-container--debug .masonry-item[data-priority=optional]:before{content:\"\\25cb Optional\";position:absolute;top:4px;left:4px;background:#6b7280;color:#fff;font-size:9px;font-weight:600;padding:2px 4px;border-radius:3px;z-index:100}.masonry-container--stagger-animations .masonry-item{animation:masonry-item-appear .4s cubic-bezier(.4,0,.2,1) backwards}.masonry-container--stagger-animations .masonry-item:nth-child(1){animation-delay:0ms}.masonry-container--stagger-animations .masonry-item:nth-child(2){animation-delay:50ms}.masonry-container--stagger-animations .masonry-item:nth-child(3){animation-delay:.1s}.masonry-container--stagger-animations .masonry-item:nth-child(4){animation-delay:.15s}.masonry-container--stagger-animations .masonry-item:nth-child(5){animation-delay:.2s}.masonry-container--stagger-animations .masonry-item:nth-child(6){animation-delay:.25s}.masonry-container--stagger-animations .masonry-item:nth-child(7){animation-delay:.3s}.masonry-container--stagger-animations .masonry-item:nth-child(8){animation-delay:.35s}.masonry-container--stagger-animations .masonry-item:nth-child(9){animation-delay:.4s}.masonry-container--stagger-animations .masonry-item:nth-child(10){animation-delay:.45s}.masonry-container--stagger-animations .masonry-item:nth-child(11){animation-delay:.5s}.masonry-container--stagger-animations .masonry-item:nth-child(12){animation-delay:.55s}.masonry-container--stagger-animations .masonry-item:nth-child(13){animation-delay:.6s}.masonry-container--stagger-animations .masonry-item:nth-child(14){animation-delay:.65s}.masonry-container--stagger-animations .masonry-item:nth-child(15){animation-delay:.7s}.masonry-container--stagger-animations .masonry-item:nth-child(16){animation-delay:.75s}.masonry-container--stagger-animations .masonry-item:nth-child(17){animation-delay:.8s}.masonry-container--stagger-animations .masonry-item:nth-child(18){animation-delay:.85s}.masonry-container--stagger-animations .masonry-item:nth-child(19){animation-delay:.9s}.masonry-container--stagger-animations .masonry-item:nth-child(20){animation-delay:.95s}@keyframes masonry-item-appear{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.masonry-item--transitioning{will-change:transform,left,top,width;transition:top .35s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1),transform .35s cubic-bezier(.4,0,.2,1),opacity .25s ease-out}.masonry-container--initializing .masonry-item{transition:none!important}@media (prefers-reduced-motion: reduce){.masonry-item,.masonry-item--transitioning{transition:none!important;animation:none!important}}.masonry-container--balanced:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:2px;background:linear-gradient(to right,transparent,rgba(var(--primary-rgb, 59, 130, 246),.3),transparent);opacity:0;transition:opacity .3s ease}.masonry-container--balanced:hover:after{opacity:1}.masonry-container--debug-balance .masonry-item{position:relative}.masonry-container--debug-balance .masonry-item:after{content:attr(data-column);position:absolute;top:-20px;left:50%;transform:translate(-50%);background:#0009;color:#fff;font-size:10px;padding:2px 6px;border-radius:4px;pointer-events:none}.masonry-skeleton{position:relative;background:linear-gradient(90deg,var(--skeleton-base, rgba(200, 200, 200, .2)) 25%,var(--skeleton-highlight, rgba(200, 200, 200, .4)) 50%,var(--skeleton-base, rgba(200, 200, 200, .2)) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s infinite;border-radius:var(--section-border-radius, 8px);overflow:hidden}.masonry-skeleton--single{width:calc((100% - var(--masonry-gap, 12px) * 3) / 4);height:180px}.masonry-skeleton--double{width:calc((100% - var(--masonry-gap, 12px) * 3) / 4 * 2 + var(--masonry-gap, 12px));height:200px}.masonry-skeleton--triple{width:calc((100% - var(--masonry-gap, 12px) * 3) / 4 * 3 + var(--masonry-gap, 12px) * 2);height:220px}.masonry-skeleton--full{width:100%;height:250px}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.masonry-skeleton__header{height:24px;width:60%;margin:16px;background:#0000001a;border-radius:4px}.masonry-skeleton__line{height:16px;margin:8px 16px;background:#00000014;border-radius:4px}.masonry-skeleton__line:nth-child(2){width:90%}.masonry-skeleton__line:nth-child(3){width:75%}.masonry-skeleton__line:nth-child(4){width:60%}.masonry-container--loading{min-height:400px}.masonry-container--loading .masonry-skeleton{position:absolute}.masonry-container--loading .masonry-skeleton:nth-child(1){animation-delay:0ms}.masonry-container--loading .masonry-skeleton:nth-child(2){animation-delay:.1s}.masonry-container--loading .masonry-skeleton:nth-child(3){animation-delay:.2s}.masonry-container--loading .masonry-skeleton:nth-child(4){animation-delay:.3s}.masonry-container--loading .masonry-skeleton:nth-child(5){animation-delay:.4s}.masonry-container--loading .masonry-skeleton:nth-child(6){animation-delay:.5s}.masonry-container--loading .masonry-skeleton:nth-child(7){animation-delay:.6s}.masonry-container--loading .masonry-skeleton:nth-child(8){animation-delay:.7s}.masonry-container--preserve-order .masonry-item{order:var(--item-order, 0)}.masonry-container--preserve-order.masonry-container--debug .masonry-item:before{content:\"#\" attr(data-index);position:absolute;top:4px;right:4px;background:#000000b3;color:#fff;font-size:10px;padding:2px 6px;border-radius:4px;z-index:100}.masonry-item:focus-visible{outline:2px solid var(--focus-color, #3b82f6);outline-offset:2px;z-index:10}.masonry-container--show-reading-order .masonry-item:after{content:attr(data-reading-order);position:absolute;bottom:4px;right:4px;background:var(--reading-order-bg, #6366f1);color:#fff;font-size:12px;font-weight:700;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;z-index:100}.masonry-container--show-reading-order .masonry-item[data-next-id]:before{content:\"\";position:absolute;bottom:16px;right:-6px;width:20px;height:2px;background:var(--reading-order-line, rgba(99, 102, 241, .3));z-index:99}.masonry-skip-link{position:absolute;top:-9999px;left:-9999px;z-index:1000;padding:12px 24px;background:var(--skip-link-bg, #1e40af);color:#fff;text-decoration:none;border-radius:4px}.masonry-skip-link:focus{top:12px;left:12px}.masonry-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.feature-grid{display:grid;gap:var(--feature-grid-gap, 1.5rem);width:100%;grid-template-columns:1fr}@media (min-width: 640px){.feature-grid--2col{grid-template-columns:repeat(2,1fr)}}@media (min-width: 640px){.feature-grid--3col{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.feature-grid--3col{grid-template-columns:repeat(3,1fr)}}@media (min-width: 640px){.feature-grid--4col{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.feature-grid--4col{grid-template-columns:repeat(3,1fr)}}@media (min-width: 1280px){.feature-grid--4col{grid-template-columns:repeat(4,1fr)}}.feature-grid--auto{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr))}.feature-grid--auto-lg{grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}.feature-grid--auto-sm{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr))}.feature-grid--gap-sm{--feature-grid-gap: .75rem;gap:var(--feature-grid-gap)}.feature-grid--gap-md{--feature-grid-gap: 1rem;gap:var(--feature-grid-gap)}.feature-grid--gap-lg{--feature-grid-gap: 2rem;gap:var(--feature-grid-gap)}.feature-grid--gap-xl{--feature-grid-gap: 3rem;gap:var(--feature-grid-gap)}.feature-grid__item{display:flex;flex-direction:column;min-width:0}.feature-grid__item--span-2{grid-column:span 2}@media (max-width: 639px){.feature-grid__item--span-2{grid-column:span 1}}.feature-grid__item--span-full{grid-column:1/-1}.hero-grid{display:grid;gap:1rem;width:100%;grid-template-columns:1fr}@media (min-width: 768px){.hero-grid{grid-template-columns:repeat(2,1fr);gap:1.5rem}}@media (min-width: 1024px){.hero-grid{grid-template-columns:repeat(3,1fr)}}.capabilities-grid{display:grid;gap:1.5rem;width:100%;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}@media (min-width: 1024px){.capabilities-grid{grid-template-columns:repeat(3,1fr)}}.features-grid{display:grid;gap:1.5rem;width:100%;grid-template-columns:1fr}@media (min-width: 640px){.features-grid{grid-template-columns:repeat(2,1fr);gap:2rem}}@media (min-width: 1024px){.features-grid{grid-template-columns:repeat(3,1fr)}}.feature-grid--dense{grid-auto-flow:dense}.feature-grid--center{justify-items:center}.feature-grid--stretch{align-items:stretch}.feature-grid--start{align-items:start}.feature-grid--animated .feature-grid__item{opacity:0;animation:fadeInUp .6s ease-out forwards}.feature-grid--animated .feature-grid__item:nth-child(1){animation-delay:0s}.feature-grid--animated .feature-grid__item:nth-child(2){animation-delay:.08s}.feature-grid--animated .feature-grid__item:nth-child(3){animation-delay:.16s}.feature-grid--animated .feature-grid__item:nth-child(4){animation-delay:.24s}.feature-grid--animated .feature-grid__item:nth-child(5){animation-delay:.32s}.feature-grid--animated .feature-grid__item:nth-child(6){animation-delay:.4s}.feature-grid--animated .feature-grid__item:nth-child(7){animation-delay:.48s}.feature-grid--animated .feature-grid__item:nth-child(8){animation-delay:.56s}.feature-grid--animated .feature-grid__item:nth-child(9){animation-delay:.64s}.feature-grid--animated .feature-grid__item:nth-child(10){animation-delay:.72s}.feature-grid--animated .feature-grid__item:nth-child(11){animation-delay:.8s}.feature-grid--animated .feature-grid__item:nth-child(12){animation-delay:.88s}@media (prefers-reduced-motion: reduce){.feature-grid--animated .feature-grid__item{opacity:1;animation:none}}@media (max-width: 639px){.feature-grid--mobile-1col{grid-template-columns:1fr!important}}@media (min-width: 640px) and (max-width: 1023px){.feature-grid--tablet-2col{grid-template-columns:repeat(2,1fr)!important}}.hero-card{position:relative;transition:all .35s cubic-bezier(.4,0,.2,1)}.hero-card:hover{transform:translateY(-6px);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}@media (prefers-reduced-motion: reduce){.hero-card{transition:none}.hero-card:hover{transform:none}}.hero-card--accent{position:relative;transition:all .35s cubic-bezier(.4,0,.2,1)}.hero-card--accent:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);border-radius:3px 0 0 3px;opacity:0;transition:opacity .35s ease}.hero-card--accent:hover{transform:translateY(-6px);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.hero-card--accent:hover:before{opacity:1}@media (prefers-reduced-motion: reduce){.hero-card--accent{transition:none}.hero-card--accent:hover{transform:none}}.hero-card--glow-line{position:relative;transition:all .35s cubic-bezier(.4,0,.2,1);overflow:hidden}.hero-card--glow-line:before{content:\"\";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent) 50%,transparent 100%);opacity:0;transition:opacity .35s ease}.hero-card--glow-line:after{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);opacity:0;transition:opacity .35s ease}.hero-card--glow-line:hover{transform:translateY(-6px);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.hero-card--glow-line:hover:before,.hero-card--glow-line:hover:after{opacity:1}@media (prefers-reduced-motion: reduce){.hero-card--glow-line{transition:none}.hero-card--glow-line:hover{transform:none}.hero-card--glow-line:before,.hero-card--glow-line:after{transition:none}}.hero-card-icon{transition:transform .35s ease,filter .35s ease}.hero-card:hover .hero-card-icon,.hero-feature-card:hover .hero-card-icon,.feature-card:hover .hero-card-icon,[class*=card]:hover .hero-card-icon{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.hero-card-icon{transition:none}.hero-card:hover .hero-card-icon,.hero-feature-card:hover .hero-card-icon,.feature-card:hover .hero-card-icon,[class*=card]:hover .hero-card-icon{transform:none;filter:none}}.icon-hover{transition:transform .35s ease,filter .35s ease}.icon-hover:hover{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.icon-hover{transition:none}.icon-hover:hover{transform:none;filter:none}}.hero-feature-card{position:relative;border-radius:var(--card-border-radius, 1rem);border:1px solid var(--border, rgba(255, 255, 255, .08));background:var(--card-background, rgba(20, 20, 20, .6));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:1.5rem;transition:all .35s cubic-bezier(.4,0,.2,1)}.hero-feature-card:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--color-brand, #ff7900) 50%,transparent);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.hero-feature-card .hero-feature-card__icon{transition:transform .35s ease,filter .35s ease}.hero-feature-card:hover .hero-feature-card__icon{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.hero-feature-card{transition:none}.hero-feature-card:hover{transform:none}.hero-feature-card .hero-feature-card__icon{transition:none}.hero-feature-card:hover .hero-feature-card__icon{transform:none;filter:none}}.system-capability-card{position:relative;border-radius:var(--card-border-radius, 1rem);border:1px solid var(--border, rgba(255, 255, 255, .08));background:var(--card-background, rgba(20, 20, 20, .6));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:1.25rem;transition:all .35s cubic-bezier(.4,0,.2,1);animation:fadeInUp .6s ease-out backwards}.system-capability-card:nth-child(1){animation-delay:.08s}.system-capability-card:nth-child(2){animation-delay:.16s}.system-capability-card:nth-child(3){animation-delay:.24s}.system-capability-card:nth-child(4){animation-delay:.32s}.system-capability-card:nth-child(5){animation-delay:.4s}.system-capability-card:nth-child(6){animation-delay:.48s}.system-capability-card:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);border-radius:3px 0 0 3px;opacity:0;transition:opacity .35s ease}.system-capability-card:after{content:\"\";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent) 50%,transparent 100%);opacity:0;transition:opacity .35s ease}.system-capability-card:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--color-brand, #ff7900) 50%,transparent);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.system-capability-card:hover:before,.system-capability-card:hover:after{opacity:1}.system-capability-card .system-capability-card__icon{transition:transform .35s ease,filter .35s ease}.system-capability-card:hover .system-capability-card__icon{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.system-capability-card{animation:none;transition:none}.system-capability-card:hover{transform:none}.system-capability-card:before,.system-capability-card:after{transition:none}.system-capability-card .system-capability-card__icon{transition:none}.system-capability-card:hover .system-capability-card__icon{transform:none;filter:none}}.feature-card{position:relative;border-radius:var(--card-border-radius, 1rem);border:1px solid var(--border, rgba(255, 255, 255, .08));background:var(--card-background);padding:1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1)}.feature-card:hover{transform:translateY(-4px);box-shadow:0 10px 30px -10px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent)}.feature-card:hover .feature-card__icon{transform:scale(1.1)}.feature-card .feature-card__icon{transition:transform .3s ease}@media (prefers-reduced-motion: reduce){.feature-card{transition:none}.feature-card:hover{transform:none}.feature-card .feature-card__icon{transition:none}.feature-card:hover .feature-card__icon{transform:none}}.ai-card-surface.streaming-active{position:relative;border:1px solid rgba(255,121,0,.4);box-shadow:0 0 10px #ff790033,0 0 20px #ff79001a}.ai-card-surface.streaming-active:before{content:\"\";position:absolute;width:3px;height:3px;background:#ff9500;border-radius:50%;box-shadow:0 0 6px 1px #ff9500cc;animation:sparkTravel 3s linear infinite;pointer-events:none;z-index:10}.ai-card-surface.streaming-active .field-value,.ai-card-surface.streaming-active .item-title,.ai-card-surface.streaming-active .item-description,.ai-card-surface.streaming-active .section-title,.ai-card-surface.streaming-active .section-description,.ai-card-surface.streaming-active [class*=value],.ai-card-surface.streaming-active [class*=label]{transition:all .2s ease-out}.ai-card-surface.streaming-active [class*=value]:last-child:after,.ai-card-surface.streaming-active .field-value:last-child:after{content:\"\\258b\";display:inline-block;color:var(--color-brand, #ff7900);animation:cursorBlink .8s step-end infinite;margin-left:2px;font-weight:400}.ai-card-surface.streaming-active .masonry-item:not(.masonry-item--animating){animation:none!important}.ai-card-surface.streaming-active .masonry-item:not(.masonry-item--animating):after{animation:none!important;opacity:0!important}.ai-card-surface.streaming-active .masonry-item--animated,.ai-card-surface.streaming-active .masonry-item--animated *,.ai-card-surface.streaming-active .masonry-item--animated:before,.ai-card-surface.streaming-active .masonry-item--animated:after,.ai-card-surface.streaming-active .masonry-item[data-animated=true],.ai-card-surface.streaming-active .masonry-item[data-animated=true] *{animation:none!important;opacity:1!important;transform:none!important;filter:none!important}.ai-card-surface.streaming-active .masonry-item--animated:after,.ai-card-surface.streaming-active .masonry-item[data-animated=true]:after{display:none!important}.ai-card-surface.streaming-active .masonry-item--animating .section-card,.ai-card-surface.streaming-active .masonry-item--animating [class*=section-]>div{border-color:#ff79004d!important;box-shadow:0 0 15px #ff790040;animation:sectionGlowPulse .8s ease-out forwards;animation-iteration-count:1}.ai-card-surface.streaming-active .masonry-item--animating .section-card:hover{border-color:#ff790099!important;box-shadow:0 0 25px #ff790066}.ai-card-surface.streaming-active .masonry-item--animating .section-card{animation:innerFlash .6s ease-out forwards;animation-iteration-count:1}.ai-card-surface.streaming-active .masonry-item--animating .section-card:before{content:\"\";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px #ff790026;pointer-events:none;animation:innerBorderPulse .8s ease-out forwards;animation-iteration-count:1}.ai-card-surface.streaming-active .masonry-item--animated .section-card,.ai-card-surface.streaming-active .masonry-item--animated [class*=section-]>div,.ai-card-surface.streaming-active .masonry-item[data-animated=true] .section-card{animation:none!important;box-shadow:none!important;border-color:#ff790026!important}.ai-card-surface.streaming-active .masonry-item--animated .section-card:before,.ai-card-surface.streaming-active .masonry-item[data-animated=true] .section-card:before{animation:none!important;box-shadow:none!important}.ai-card-surface.streaming-active .masonry-item--animating{animation:sectionMagicAppear .7s cubic-bezier(.34,1.56,.64,1) forwards;animation-iteration-count:1;position:relative;overflow:hidden}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(1){animation-delay:0ms}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(2){animation-delay:80ms}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(3){animation-delay:.16s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(4){animation-delay:.24s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(5){animation-delay:.32s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(6){animation-delay:.4s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(7){animation-delay:.48s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(8){animation-delay:.56s}.ai-card-surface.streaming-active .masonry-item--animating:after{content:\"\";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,149,0,.15) 50%,transparent 70%);animation:shimmerSweep .8s ease-out forwards;animation-iteration-count:1;pointer-events:none;border-radius:inherit}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item){opacity:0;transform:translateY(12px);animation:fieldEnterBounce .45s ease forwards;animation-iteration-count:1;will-change:opacity,transform}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(1){animation-delay:0s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(2){animation-delay:.05s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(3){animation-delay:.1s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(4){animation-delay:.15s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(5){animation-delay:.2s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(n+6){animation-delay:.24s}.ai-card-surface.streaming-active .masonry-item--animated :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item){animation:none!important;opacity:1!important;transform:none!important}.streaming-border-glow{position:relative;border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent),0 0 20px color-mix(in srgb,var(--color-brand, #ff7900) 10%,transparent)}.streaming-border-glow:before{content:\"\";position:absolute;width:3px;height:3px;background:var(--color-brand, #ff7900);border-radius:50%;box-shadow:0 0 6px 1px color-mix(in srgb,var(--color-brand, #ff7900) 80%,transparent);animation:sparkTravel 3s linear infinite;pointer-events:none;z-index:10}.typing-cursor:after{content:\"\\258b\";display:inline-block;color:var(--color-brand, #ff7900);animation:cursorBlink .8s step-end infinite;margin-left:2px;font-weight:400}.section-highlight{animation:sectionPulse 2s ease-out;position:relative}.section-highlight:after{content:\"\";position:absolute;inset:-4px;border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent);border-radius:var(--card-border-radius, 14px);pointer-events:none;animation:sectionBorderFade 2s ease-out forwards}.new-section-glow{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);box-shadow:0 0 15px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent);animation:newSectionGlow .6s ease-out forwards}.shimmer-text{background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:textShimmer 2s ease-in-out infinite}.wave-progress{position:absolute;bottom:0;left:0;right:0;height:4px;background:linear-gradient(90deg,transparent 0%,var(--color-brand, #ff7900) 25%,var(--color-brand, #ff7900) 75%,transparent 100%);background-size:200% 100%;animation:waveSlide 2s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.ai-card-surface.streaming-active,.ai-card-surface.streaming-active:before,.ai-card-surface.streaming-active:after,.ai-card-surface.streaming-active *,.streaming-border-glow,.streaming-border-glow:before,.typing-cursor:after,.section-highlight,.section-highlight:after,.new-section-glow,.shimmer-text,.wave-progress{animation:none!important;transition:none!important}.ai-card-surface.streaming-active [class*=value]:last-child:after,.ai-card-surface.streaming-active .field-value:last-child:after,.typing-cursor:after{content:none!important}.shimmer-text{background:none!important;-webkit-text-fill-color:currentColor!important}}:host{display:block;padding:8px;background:transparent!important;background-color:transparent!important}@media (max-width: 480px){:host{padding:4px}}.ai-card-surface{position:relative;display:flex;flex-direction:column;height:100%;overflow:visible;isolation:isolate;border:var(--ai-card-border, 1px solid rgba(255, 121, 0, .12))!important;border-width:1px!important;border-style:solid!important;border-radius:var(--ai-card-border-radius)!important;background:var(--section-item-background)!important;box-shadow:var(--ai-card-box-shadow, none)!important;transition:var(--ai-card-transition, none)!important;animation:var(--ai-card-entrance-animation, none);will-change:opacity,transform;background:var(--ai-card-background)!important;border:var(--theme-ai-card-border)!important;box-shadow:var(--theme-ai-card-box-shadow)!important;padding:var(--card-main-padding)!important;padding-bottom:var(--card-main-padding)!important;border-radius:var(--card-border-radius)!important;gap:var(--section-card-gap)!important;transition:border-color .2s ease,background .2s ease,box-shadow .2s ease!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.ai-card-surface *{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.ai-card-surface h1{transition:opacity .2s ease}.ai-card-surface:hover{border-color:var(--ai-card-border-hover, rgba(255, 121, 0, .2))!important;background:var(--section-item-background-hover, var(--section-item-background))!important;box-shadow:var(--ai-card-box-shadow-hover, var(--ai-card-box-shadow, none))!important;background:var(--ai-card-background-hover)!important;border:var(--theme-ai-card-border-hover)!important;box-shadow:var(--theme-ai-card-box-shadow-hover)!important}.ai-card-surface--fullscreen{border:none!important;box-shadow:none!important;background:var(--ai-card-background)!important;max-height:none!important;max-width:none!important;width:100%!important;overflow:visible!important;padding:var(--card-main-padding)!important}.ai-card-surface--fullscreen:hover{background:var(--ai-card-background)!important;border:none!important;box-shadow:none!important}.ai-card-surface--fullscreen .tilt-container{transform:none!important;box-shadow:none!important;width:100%!important;max-width:none!important}.ai-card-surface--fullscreen .glow-container{filter:none!important}.ai-card-surface--fullscreen .card-reflection{display:none!important}.ai-card-surface--fullscreen .ai-card-header{padding:0!important;margin:0!important;border:none!important;background:transparent!important;box-shadow:none!important}.ai-card-surface--fullscreen .ai-card-title{font-size:14px!important}.ai-card-fullscreen-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;background:#ff790014;border:1px solid rgba(255,121,0,.2);color:var(--foreground);cursor:pointer;transition:all .2s ease;flex-shrink:0;position:absolute;top:var(--card-main-padding);right:var(--card-main-padding);z-index:100}.ai-card-fullscreen-btn:hover{transform:translateY(-2px);background:#ff790026;border-color:#ff790066;box-shadow:0 4px 12px #ff790033}.ai-card-fullscreen-btn:active{transform:translateY(0)}.ai-card-fullscreen-btn__icon{color:currentColor}.ai-card-header{position:relative;z-index:10;padding:0!important;padding-block:0!important;padding-block-start:0!important;padding-block-end:0!important;padding-inline:0!important;padding-inline-start:0!important;padding-inline-end:0!important;margin:0!important;display:flex;flex-direction:column;gap:4px;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-block-start:none!important;border-block-end:none!important;border-inline:none!important;border-inline-start:none!important;border-inline-end:none!important;background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;box-shadow:none!important;border-radius:0!important;outline:none!important;outline-offset:0!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important}.ai-card-header:before{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-header:after{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-title-stack{display:flex;flex-direction:column;gap:2px}.ai-card-eyebrow{font-size:var(--font-card-eyebrow);letter-spacing:.08em;text-transform:none;color:#1c1c1fd9;font-weight:600;opacity:.9}.ai-card-title{font-size:18px;font-weight:700;color:var(--foreground);letter-spacing:-.01em;line-height:1.2;text-transform:none;border:0!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-top:0!important;border-right:0!important;border-bottom:0!important;border-left:0!important;border-top:none!important;border-right:none!important;border-bottom:none!important;border-left:none!important;border-block:none!important;border-inline:none!important;border-image:none!important;border-radius:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;outline-offset:0!important;padding:0!important;padding-block:0!important;padding-inline:0!important;margin:0!important;margin-block:0!important;margin-inline:0!important;box-shadow:none!important;text-decoration:none!important;text-decoration-line:none!important;text-decoration-style:none!important;text-decoration-color:transparent!important;text-underline-offset:0!important;text-decoration-thickness:0!important}.ai-card-title:before,.ai-card-title:after{display:none!important;border:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-top:none!important;border-right:none!important;border-bottom:none!important;border-left:none!important;border-block:none!important;border-inline:none!important;border-image:none!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;margin:0!important;content:none!important}.ai-card-type-pill{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border-radius:999px;border:1px solid rgba(255,121,0,.32);background:#ff79002e;text-transform:none;letter-spacing:.05em;font-size:var(--font-card-meta);font-weight:600;color:#423d37d9}.ai-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px;text-transform:none;font-size:var(--font-card-meta);letter-spacing:.05em;color:#1c1c1fd9}.ai-card-meta__chip{display:inline-flex;align-items:stretch;gap:4px;padding:2px 6px;border-radius:999px;border:1px solid rgba(55,55,60,.65);background:#28282dcc}.ai-card-meta__chip-dot{width:3px;height:3px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 1px #ff79001f}.ai-card-meta__chip-dot--primary{background:var(--accent)}.ai-card-meta__chip-dot--secondary{background:#ff7900a6}.ai-card-meta__chip-dot--tertiary{background:#ff790059}.ai-card-meta__chip-content{display:flex;flex-direction:column;gap:0px;line-height:1}.ai-card-meta__chip-label{font-size:.48rem;letter-spacing:.05em;text-transform:none;color:#1c1c1fd9;font-weight:600}.ai-card-meta__chip-value{font-size:var(--font-card-meta-value);font-weight:600;color:var(--foreground);letter-spacing:.01em}.ai-card-body{position:relative;z-index:10;flex:1;padding:0!important;padding-block:0!important;padding-block-start:0!important;padding-block-end:0!important;padding-inline:0!important;padding-inline-start:0!important;padding-inline-end:0!important;margin:0!important;display:flex;flex-direction:column;gap:12px;min-height:0;overflow:visible;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-block-start:none!important;border-block-end:none!important;border-inline:none!important;border-inline-start:none!important;border-inline-end:none!important;background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;box-shadow:none!important;border-radius:0!important;outline:none!important;outline-offset:0!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important}.ai-card-body:before{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-body:after{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-action{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border-radius:8px;font-weight:600;font-size:var(--font-card-action, .875rem);letter-spacing:.01em;border:1px solid transparent;text-transform:none;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1)}.ai-card-action--primary{background:var(--primary, #ff7900);color:var(--primary-foreground, #ffffff);border-color:#ff7900cc;box-shadow:0 2px 8px #ff790040,0 1px 2px #0000001a}.ai-card-action--primary:hover{transform:translateY(-1px);box-shadow:0 4px 16px #ff790059,0 2px 4px #0000001a;background:#ff7900f2;border-color:var(--primary, #ff7900)}.ai-card-action--secondary{background:#28282de6;color:var(--foreground, #ffffff);border-color:#37373c99;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f}.ai-card-action--secondary:hover{transform:translateY(-1px);border-color:#ff790066;box-shadow:0 4px 12px #00000026,0 2px 4px #0000001a;background:#322e2af2}.ai-card-action__shine{position:absolute;inset:0;background:linear-gradient(135deg,#fff3,#fff0,#ffffff1a);opacity:0;transition:opacity .3s cubic-bezier(.4,0,.2,1);pointer-events:none;border-radius:inherit}.ai-card-action:hover .ai-card-action__shine{opacity:1}.ai-card-action--primary .ai-card-action__shine{background:linear-gradient(135deg,#ffffff4d,#fff0,#ffffff26)}.ai-card-action--secondary .ai-card-action__shine{background:linear-gradient(135deg,#ffffff26,#fff0,#ffffff14)}.ai-card-action__content{position:relative;z-index:10;display:inline-flex;align-items:center;gap:6px}.ai-card-action__icon{color:currentColor;opacity:.9;transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1)}.ai-card-action__label{font-weight:600;letter-spacing:.01em;transition:transform .3s cubic-bezier(.4,0,.2,1)}.ai-card-action:hover .ai-card-action__icon{transform:translate(2px);opacity:1}.ai-card-action:hover .ai-card-action__label{transform:translate(1px)}.ai-card-footnote{margin-top:auto;margin-bottom:0!important;padding:0!important;border:none!important;border-top:none!important;text-align:center;font-size:.65rem!important;letter-spacing:.08em;text-transform:none;color:#1c1c1fb3;line-height:1.2}@media (prefers-reduced-motion: reduce){.ai-card-surface{transition:none!important;transform:none!important;box-shadow:var(--card-box-shadow)!important}.ai-card-surface:before{opacity:0!important}.ai-card-surface:hover{transform:none!important}}.card-container-wrapper,.glow-container,.tilt-container,.w-full{width:100%}.h-full{height:100%}.flex-1{flex:1 1 0%}.min-h-0{min-height:0}.max-w-none{max-width:none}.card-empty-state{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;height:100%;padding:4rem 2rem;border-radius:1.5rem;overflow:hidden;border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);background:color-mix(in srgb,var(--background, #0c0c0c) 98%,transparent);transition:all .3s ease;flex:1;box-sizing:border-box}.ai-card-surface--empty-state{display:flex;flex-direction:column;min-height:100%;height:100%}.ai-card-surface--empty-state .card-empty-state{flex:1 1 auto;min-height:0;height:100%;display:flex}.card-empty-state:hover{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent);background:color-mix(in srgb,var(--background, #0c0c0c) 99%,transparent)}.empty-state-background{position:absolute;inset:0;overflow:hidden;pointer-events:none}.empty-state-gradient{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:150%;height:150%;background:radial-gradient(circle,color-mix(in srgb,var(--color-brand, #ff7900) 6%,transparent) 0%,color-mix(in srgb,var(--color-brand, #ff7900) 3%,transparent) 50%,transparent 80%);animation:gradient-pulse 5s ease-in-out infinite;opacity:.8}@keyframes gradient-pulse{0%,to{opacity:.6;transform:translate(-50%,-50%) scale(1)}50%{opacity:.9;transform:translate(-50%,-50%) scale(1.05)}}.empty-state-particles{position:absolute;inset:0}.empty-state-particles .particle{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--color-brand, #ff7900);box-shadow:0 0 8px var(--color-brand, #ff7900);transition:transform .8s cubic-bezier(.23,1,.32,1),opacity .5s ease;will-change:transform,opacity;top:50%;left:50%;margin-left:-2px;margin-top:-2px;pointer-events:none;opacity:.7}.empty-state-particles .particle:nth-child(odd){width:5px;height:5px;background:var(--color-brand, #ff7900);box-shadow:0 0 10px var(--color-brand, #ff7900);opacity:.8}.empty-state-particles .particle:nth-child(2n){width:3px;height:3px;background:var(--color-brand, #ff7900);box-shadow:0 0 6px var(--color-brand, #ff7900);opacity:.6}.empty-state-content{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:1rem;max-width:420px;width:100%;transition:transform .2s cubic-bezier(.25,.46,.45,.94);will-change:transform}.empty-state-icon-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:88px;height:88px}.empty-state-icon-ring{position:absolute;inset:-8px;border:1.5px solid color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent);border-radius:50%;animation:ring-pulse 3s ease-in-out infinite}.empty-state-icon-pulse{position:absolute;inset:-16px;border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent);border-radius:50%;animation:ring-pulse 3s ease-in-out infinite .75s}@keyframes ring-pulse{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}.empty-state-icon{position:relative;z-index:1;color:var(--color-brand, #ff7900);animation:icon-float 4s ease-in-out infinite;filter:drop-shadow(0 2px 8px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent));opacity:.95}@keyframes icon-float{0%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-6px) rotate(-3deg)}50%{transform:translateY(-10px) rotate(0)}75%{transform:translateY(-6px) rotate(3deg)}}.empty-state-text{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;width:100%}.empty-state-title{font-size:1.75rem;font-weight:700;color:var(--foreground, #ffffff);margin:0;letter-spacing:-.03em;line-height:1.2;text-align:center;animation:fade-in-up .6s ease-out .2s both}.empty-state-message-container{min-height:2.5rem;display:flex;align-items:center;justify-content:center;width:100%}.empty-state-message{font-size:1rem;color:var(--color-brand, #ff7900);margin:0;line-height:1.6;font-weight:500;font-style:italic;text-align:center;animation:fade-in-up .6s ease-out .4s both;letter-spacing:.01em}.card-empty-state-legacy{min-height:200px;display:flex;align-items:center;justify-content:center;padding:3rem;background:linear-gradient(135deg,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,color-mix(in srgb,var(--background, #0c0c0c) 98%,transparent) 50%,transparent 100%);border-radius:1.5rem;border:1px dashed color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}.empty-state-box{text-align:center;max-width:320px}.empty-state-icon-legacy{display:flex;justify-content:center;margin-bottom:1.5rem;color:var(--color-brand, #ff7900);opacity:.7}.empty-state-message-legacy{font-size:.95rem;color:var(--muted-foreground, #a1a1aa);line-height:1.6;margin:0}.ai-card-surface.has-loading-overlay{display:flex;align-items:center;justify-content:center;min-height:500px;position:relative;overflow:hidden;background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%);animation:generating-bg-pulse 3s ease-in-out infinite,card-generating-pulse 2s ease-in-out infinite}@keyframes card-generating-pulse{0%,to{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent),0 4px 20px #00000026,0 0 0 transparent}50%{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent),0 4px 20px #00000026,0 0 30px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}}@keyframes generating-bg-pulse{0%,to{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%)}50%{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 12%,transparent) 0%,transparent 70%)}}.generating-content{position:relative;z-index:2;text-align:center}.generating-shimmer{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent) 50%,transparent 100%);animation:shimmer-sweep 2.5s ease-in-out infinite;pointer-events:none;z-index:1}@keyframes shimmer-sweep{0%{left:-100%}to{left:100%}}.generating-text{font-size:1.125rem;font-weight:600;color:var(--foreground, #ffffff);margin:0;background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:text-shimmer-flow 2.5s ease-in-out infinite;position:relative;z-index:2;letter-spacing:.02em}@keyframes text-shimmer-flow{0%,to{background-position:-200% 0}50%{background-position:200% 0}}.loading-particles{position:absolute;inset:0;overflow:hidden;pointer-events:none}.particle{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--color-brand, #ff7900);box-shadow:0 0 6px var(--color-brand, #ff7900);animation:particle-float 4s ease-in-out infinite}.particle:nth-child(1){top:10%;left:20%;animation-delay:0s}.particle:nth-child(2){top:30%;left:80%;animation-delay:.5s}.particle:nth-child(3){top:70%;left:30%;animation-delay:1s}.particle:nth-child(4){top:80%;left:70%;animation-delay:1.5s}.particle:nth-child(5){top:20%;left:50%;animation-delay:.3s}.particle:nth-child(6){top:60%;left:15%;animation-delay:.9s}.particle:nth-child(7){top:50%;left:90%;animation-delay:1.8s}.particle:nth-child(8){top:15%;left:60%;animation-delay:2.1s}@keyframes particle-float{0%,to{transform:translateY(0) translate(0) scale(1);opacity:.3}25%{transform:translateY(-30px) translate(20px) scale(1.2);opacity:.7}50%{transform:translateY(-60px) translate(-10px) scale(.8);opacity:1}75%{transform:translateY(-30px) translate(15px) scale(1.1);opacity:.6}}.loading-content{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:1.5rem}.loading-spinner{width:64px;height:64px;position:relative}.spinner-svg{width:100%;height:100%;animation:spinner-rotate 1.5s linear infinite;transform-origin:center}.spinner-circle{stroke-dasharray:125.6;stroke-dashoffset:31.4;stroke:var(--color-brand, #ff7900);animation:spinner-dash 1.5s ease-in-out infinite}@keyframes spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spinner-dash{0%{stroke-dasharray:1,125.6;stroke-dashoffset:0}50%{stroke-dasharray:94.2,125.6;stroke-dashoffset:-31.4}to{stroke-dasharray:94.2,125.6;stroke-dashoffset:-125.6}}.loading-text{text-align:center}.loading-title{font-size:1.25rem;font-weight:600;color:var(--foreground, #ffffff);margin-bottom:.5rem;background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:text-shimmer 2s ease-in-out infinite}.loading-subtitle{font-size:.875rem;color:var(--muted-foreground, #a1a1aa);margin:0}@keyframes text-shimmer{0%,to{background-position:-200% 0}50%{background-position:200% 0}}.loading-wave{position:absolute;bottom:0;left:0;right:0;height:4px;background:linear-gradient(90deg,transparent 0%,var(--color-brand, #ff7900) 25%,var(--color-brand, #ff7900) 75%,transparent 100%);background-size:200% 100%;animation:wave-slide 2s ease-in-out infinite}@keyframes wave-slide{0%{background-position:-200% 0}to{background-position:200% 0}}.ai-section{--section-accent: var(--accent, #ff7900);--section-border-hover: 1px solid var(--card-border-hover, rgba(255, 121, 0, .2));--section-background: var( --section-surface, var(--section-background, var(--card-section-bg, #fafafa)) );--section-background-hover: var( --section-surface-hover, var(--section-background-hover, var(--card-section-bg, #fafafa)) );--section-backdrop-filter: blur(12px);--section-spacing-bottom: clamp(4px, .8vw, 12px);--section-glow-background: radial-gradient( circle at top right, rgba(255, 121, 0, .35) 0%, transparent 65% );--section-glow-opacity-hover: .12;--section-title-underline-length: clamp(32px, 3vw, 48px);--section-title-underline-hover-length: clamp(40px, 4vw, 64px);--section-title-underline-height: 3px;--section-title-underline-offset: -10px;--section-title-hover-color: rgba(255, 180, 100, 1);height:100%!important;margin-bottom:var(--section-spacing-bottom)!important;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.ai-section *{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.ai-section:not(.masonry-item .ai-section){position:relative;display:flex;flex-direction:column;gap:var(--section-card-gap);padding:var(--section-padding);border-radius:var(--section-item-border-radius);background:var(--section-background);border:var(--section-border);box-shadow:var(--section-box-shadow)}.masonry-item .ai-section{display:flex!important;flex-direction:column!important;gap:var(--section-card-gap)!important}.ai-section--main{--section-background: var(--section-bg-main, var(--section-surface, var(--background)));--section-background-hover: var( --section-bg-main-hover, var(--section-surface-hover, var(--background)) )}.ai-section--contrast{--section-background: var(--section-bg-contrast, var(--card-section-bg));--section-background-hover: var(--section-bg-contrast-hover, var(--card-section-card-bg))}.ai-section__header{display:flex;flex-direction:row;gap:calc(var(--card-gap) * .75);width:100%;box-sizing:border-box;align-items:center!important;padding:0 0 calc(var(--card-gap) * .75) 0!important;border-bottom:none!important;background:transparent!important;margin:0!important;flex-wrap:wrap!important;gap:calc(var(--card-gap) * .75)!important}.ai-section__title{font-size:var(--section-title-font-size, 1.1rem);font-weight:var(--section-title-font-weight, 700);letter-spacing:var(--section-title-letter-spacing, -.02em);line-height:var(--section-title-line-height, 1.3);color:var(--card-text-primary, #1c1c1f);margin:0;font-size:var(--section-title-font-size, 1.1rem)!important;font-weight:var(--section-title-font-weight, 700)!important;letter-spacing:var(--section-title-letter-spacing, -.02em)!important;line-height:var(--section-title-line-height, 1.3)!important;color:var(--card-text-primary, #1c1c1f)!important;opacity:1!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;position:relative!important;transition:color .22s cubic-bezier(.4,0,.2,1)!important;padding:0!important;margin:0 0 var(--section-title-margin-bottom) 0!important;font-family:inherit!important;border:none!important}.ai-section__title:before{content:\"\"!important;position:absolute!important;left:0!important;bottom:var(--section-title-underline-offset, -10px)!important;width:var(--section-title-underline-length)!important;height:var(--section-title-underline-height)!important;background:var(--section-accent, var(--accent, #ff7900))!important;border-radius:2px!important;transition:width .22s ease,opacity .22s ease!important;transform-origin:left!important;opacity:.6!important}.ai-section__title:hover{color:var(--card-text-primary, #1c1c1f)!important}.ai-section__title:hover:before{width:var(--section-title-underline-hover-length)!important;opacity:1!important}.ai-section__icon{display:none!important;width:var(--icon-size-section)!important;height:var(--icon-size-section)!important}.ai-section__details{display:flex!important;flex-direction:column!important;gap:calc(var(--card-gap) * .75)!important}.ai-section__description{font-size:var(--section-description-font-size, .8rem);font-weight:400;color:var(--card-text-secondary, rgba(28, 28, 31, .6));line-height:1.4;margin:0;color:#1c1c1fb3!important;letter-spacing:.01em!important;line-height:1.2!important;font-weight:400!important;overflow:hidden!important;text-overflow:ellipsis!important;display:-webkit-box!important;-webkit-line-clamp:2!important;-webkit-box-orient:vertical!important;margin-top:calc(var(--card-gap) * .5)!important;transition:color .2s ease!important;font-family:inherit!important}.ai-section:hover .ai-section__description{color:#1c1c1fcc!important}.ai-section__badge{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;font-size:.55rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;color:#ff7900;background:#ff79001a;border-radius:4px;white-space:nowrap;display:none!important;padding:var(--tag-padding-y-sm) var(--tag-padding-x)!important;border-radius:var(--radius-sm)!important}.ai-section--contact-card .ai-section__badge,.ai-section--solutions .ai-section__badge,.ai-section--event .ai-section__badge,.ai-section--chart .ai-section__badge,.ai-section--financials .ai-section__badge{display:none!important;align-items:center!important;padding:calc(var(--tag-padding-y-sm) * .75) calc(var(--tag-padding-x) * .875)!important;background:linear-gradient(135deg,#ff790026,#ff79001f)!important;color:#ff7900e6!important;border:none!important;box-shadow:none!important;border-radius:var(--section-card-border-radius)!important;font-size:var(--card-meta-font-size, .6rem)!important;font-weight:var(--card-meta-font-weight, 500)!important;transition:opacity .2s ease,background .2s ease!important;line-height:1.2!important}.ai-section:hover .ai-section__badge{opacity:1!important;background:#ff790033!important}.ai-section__body{display:flex;flex-direction:column;gap:var(--section-gap-internal);width:100%;box-sizing:border-box;padding:0!important;margin:0!important}.ai-section .section-empty{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;padding:calc(var(--card-padding) * 1.5)!important;text-align:center!important;color:var(--muted-foreground)!important;min-height:auto!important;border-radius:var(--radius-md)!important;background:var(--section-item-background, var(--card-section-bg))!important;border:1px dashed var(--border)!important;transition:opacity .2s ease,background .2s ease!important}.ai-section .section-empty lucide-icon{margin-bottom:var(--card-gap)!important;opacity:.5!important;color:var(--accent)!important;transition:all .2s ease!important}.ai-section .section-empty p{font-size:var(--font-section-description, .85rem)!important;margin:0!important;font-weight:500!important;font-family:inherit!important}.ai-section .section-empty:hover{background:var(--section-item-background-hover, var(--card-section-card-bg))!important;border-color:var(--accent)!important}.ai-section .section-empty:hover lucide-icon{opacity:.7!important}.ai-section--info{--section-accent: var(--section-accent-info, #ff7900)}.ai-section--analytics{--section-accent: var(--section-accent-analytics, #ff7900)}.ai-section--financials{--section-accent: var(--section-accent-financials, #ff7900)}.ai-section--map{--section-accent: var(--section-accent-map, #ff7900)}.ai-section--network-card{--section-accent: var(--section-accent-network, #ff7900)}.ai-section--contact-card{--section-accent: var(--section-accent-contact, #ff7900)}.ai-section--product{--section-accent: var(--section-accent-product, #ff7900)}.ai-section--solutions{--section-accent: var(--section-accent-solutions, #ff7900)}.ai-section--overview{--section-accent: var(--section-accent-overview, #ff7900)}.ai-section--list,.ai-section--info-list{--section-accent: var(--section-accent-list, #ff7900)}.ai-section--event{--section-accent: var(--section-accent-event, #ff7900)}.ai-section--chart{--section-accent: var(--section-accent-chart, var(--accent, #ff7900))}.ai-section--text-reference{--section-accent: var(--section-accent-reference, var(--accent, #ff7900))}.ai-section--quotation{--section-accent: var(--section-accent-quotation, var(--accent, #ff7900))}.ai-card-surface--fullscreen .ai-section{--section-padding: var(--section-padding);--section-spacing-bottom: calc(var(--card-gap) * 1.25);--section-gap: var(--section-card-gap);--section-gap-internal: var(--card-gap);--section-title-underline-length: 32px;--section-title-underline-hover-length: 40px;--section-title-underline-height: 2px;--section-title-underline-offset: -8px;--section-box-shadow: none !important;--section-box-shadow-hover: none !important}.ai-card-surface--fullscreen .masonry-item,.ai-card-surface--fullscreen .masonry-item:hover{box-shadow:none!important}.ai-card-surface--fullscreen .ai-section__header{padding:0 0 calc(var(--card-gap) * .75) 0!important;gap:calc(var(--card-gap) * .75)!important}.ai-card-surface--fullscreen .ai-section__title{font-size:var(--card-title-font-size, .95rem)!important}.ai-card-surface--fullscreen .ai-section__body{gap:var(--card-gap)!important}.ai-card-surface--fullscreen .ai-section__description{font-size:var(--card-meta-font-size, .6rem)!important;margin-top:4px!important}:root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@keyframes unified-stream-in{0%{opacity:0;transform:translateY(var(--motion-distance-sm))}to{opacity:1;transform:translateY(0)}}.section-card,.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.section-card:hover,.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible,.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card,.unified-card{transition:none}}.section-card.section-item-streaming,.section-card.item-streaming,.section-card.field-streaming,.unified-card.section-item-streaming,.unified-card.item-streaming,.unified-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.section-card.section-item-entered,.section-card.item-entered,.section-card.field-entered,.unified-card.section-item-entered,.unified-card.item-entered,.unified-card.field-entered{animation:none}.section-card.section-item-stagger-0,.section-card.item-stagger-0,.section-card.field-stagger-0,.unified-card.section-item-stagger-0,.unified-card.item-stagger-0,.unified-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.section-card.section-item-stagger-1,.section-card.item-stagger-1,.section-card.field-stagger-1,.unified-card.section-item-stagger-1,.unified-card.item-stagger-1,.unified-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.section-card.section-item-stagger-2,.section-card.item-stagger-2,.section-card.field-stagger-2,.unified-card.section-item-stagger-2,.unified-card.item-stagger-2,.unified-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.section-card.section-item-stagger-3,.section-card.item-stagger-3,.section-card.field-stagger-3,.unified-card.section-item-stagger-3,.unified-card.item-stagger-3,.unified-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.section-card.section-item-stagger-4,.section-card.item-stagger-4,.section-card.field-stagger-4,.unified-card.section-item-stagger-4,.unified-card.item-stagger-4,.unified-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.section-card.section-item-stagger-5,.section-card.item-stagger-5,.section-card.field-stagger-5,.unified-card.section-item-stagger-5,.unified-card.item-stagger-5,.unified-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.section-card.section-item-stagger-6,.section-card.item-stagger-6,.section-card.field-stagger-6,.unified-card.section-item-stagger-6,.unified-card.item-stagger-6,.unified-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.section-card.section-item-stagger-7,.section-card.item-stagger-7,.section-card.field-stagger-7,.unified-card.section-item-stagger-7,.unified-card.item-stagger-7,.unified-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.section-card.section-item-stagger-8,.section-card.item-stagger-8,.section-card.field-stagger-8,.unified-card.section-item-stagger-8,.unified-card.item-stagger-8,.unified-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.section-card.section-item-stagger-9,.section-card.item-stagger-9,.section-card.field-stagger-9,.unified-card.section-item-stagger-9,.unified-card.item-stagger-9,.unified-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.section-card.section-item-stagger-10,.section-card.item-stagger-10,.section-card.field-stagger-10,.unified-card.section-item-stagger-10,.unified-card.item-stagger-10,.unified-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.section-card.section-item-stagger-11,.section-card.item-stagger-11,.section-card.field-stagger-11,.unified-card.section-item-stagger-11,.unified-card.item-stagger-11,.unified-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.section-card.section-item-stagger-12,.section-card.item-stagger-12,.section-card.field-stagger-12,.unified-card.section-item-stagger-12,.unified-card.item-stagger-12,.unified-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.section-card.section-item-stagger-13,.section-card.item-stagger-13,.section-card.field-stagger-13,.unified-card.section-item-stagger-13,.unified-card.item-stagger-13,.unified-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.section-card.section-item-stagger-14,.section-card.item-stagger-14,.section-card.field-stagger-14,.unified-card.section-item-stagger-14,.unified-card.item-stagger-14,.unified-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.section-card.section-item-stagger-15,.section-card.item-stagger-15,.section-card.field-stagger-15,.unified-card.section-item-stagger-15,.unified-card.item-stagger-15,.unified-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.analytics-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.analytics-metrics{grid-template-columns:1fr;gap:var(--gap-sm)}}.analytics-metric{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.analytics-metric:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.analytics-metric:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.analytics-metric{transition:none}}.analytics-metric.section-item-streaming,.analytics-metric.item-streaming,.analytics-metric.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.analytics-metric.section-item-entered,.analytics-metric.item-entered,.analytics-metric.field-entered{animation:none}.analytics-metric.section-item-stagger-0,.analytics-metric.item-stagger-0,.analytics-metric.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-1,.analytics-metric.item-stagger-1,.analytics-metric.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-2,.analytics-metric.item-stagger-2,.analytics-metric.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-3,.analytics-metric.item-stagger-3,.analytics-metric.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-4,.analytics-metric.item-stagger-4,.analytics-metric.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-5,.analytics-metric.item-stagger-5,.analytics-metric.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-6,.analytics-metric.item-stagger-6,.analytics-metric.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-7,.analytics-metric.item-stagger-7,.analytics-metric.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-8,.analytics-metric.item-stagger-8,.analytics-metric.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-9,.analytics-metric.item-stagger-9,.analytics-metric.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-10,.analytics-metric.item-stagger-10,.analytics-metric.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-11,.analytics-metric.item-stagger-11,.analytics-metric.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-12,.analytics-metric.item-stagger-12,.analytics-metric.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-13,.analytics-metric.item-stagger-13,.analytics-metric.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-14,.analytics-metric.item-stagger-14,.analytics-metric.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-15,.analytics-metric.item-stagger-15,.analytics-metric.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.analytics-metric__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height)}.analytics-metric__value{font-size:var(--card-value-font-size);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap}.analytics-metric__change{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--card-meta-font-size);font-weight:600}.analytics-metric__change lucide-icon,.analytics-metric__change svg{width:var(--icon-xs);height:var(--icon-xs)}.analytics-metric__change.trend--up{color:#4ade80}.analytics-metric__change.trend--down{color:#f87171}.analytics-metric__change.trend--stable{color:#facc15}.analytics-metric__progress{width:100%;height:3px;background:var(--muted);border-radius:var(--radius-full);overflow:hidden;margin-top:var(--space-2)}.analytics-metric__progress-bar{height:100%;background:var(--accent);border-radius:inherit;transition:width var(--duration-slow) var(--ease-out-smooth)}.analytics-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.analytics-empty lucide-icon,.analytics-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.analytics-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.financials-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.financials-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.financial-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.financial-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.financial-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.financial-card{transition:none}}.financial-card.section-item-streaming,.financial-card.item-streaming,.financial-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.financial-card.section-item-entered,.financial-card.item-entered,.financial-card.field-entered{animation:none}.financial-card.section-item-stagger-0,.financial-card.item-stagger-0,.financial-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.financial-card.section-item-stagger-1,.financial-card.item-stagger-1,.financial-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.financial-card.section-item-stagger-2,.financial-card.item-stagger-2,.financial-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.financial-card.section-item-stagger-3,.financial-card.item-stagger-3,.financial-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.financial-card.section-item-stagger-4,.financial-card.item-stagger-4,.financial-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.financial-card.section-item-stagger-5,.financial-card.item-stagger-5,.financial-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.financial-card.section-item-stagger-6,.financial-card.item-stagger-6,.financial-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.financial-card.section-item-stagger-7,.financial-card.item-stagger-7,.financial-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.financial-card.section-item-stagger-8,.financial-card.item-stagger-8,.financial-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.financial-card.section-item-stagger-9,.financial-card.item-stagger-9,.financial-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.financial-card.section-item-stagger-10,.financial-card.item-stagger-10,.financial-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.financial-card.section-item-stagger-11,.financial-card.item-stagger-11,.financial-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.financial-card.section-item-stagger-12,.financial-card.item-stagger-12,.financial-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.financial-card.section-item-stagger-13,.financial-card.item-stagger-13,.financial-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.financial-card.section-item-stagger-14,.financial-card.item-stagger-14,.financial-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.financial-card.section-item-stagger-15,.financial-card.item-stagger-15,.financial-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.financial-card__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height)}.financial-card__value{font-size:var(--card-value-font-size-large);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);display:flex;align-items:baseline;gap:var(--space-2)}.financial-card__change{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--card-meta-font-size);font-weight:600}.financial-card__change lucide-icon,.financial-card__change svg{width:var(--icon-xs);height:var(--icon-xs)}.financial-card__change.trend--up{color:#4ade80}.financial-card__change.trend--down{color:#f87171}.financial-card__change.trend--stable{color:#facc15}.financial-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-md);height:var(--icon-md);color:var(--accent);flex-shrink:0}.financial-card__icon lucide-icon,.financial-card__icon svg{width:calc(var(--icon-md) * .6);height:calc(var(--icon-md) * .6)}.financials-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.financials-empty lucide-icon,.financials-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.financials-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.overview-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.overview-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3)}.overview-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.overview-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.overview-card{transition:none}}.overview-card.section-item-streaming,.overview-card.item-streaming,.overview-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.overview-card.section-item-entered,.overview-card.item-entered,.overview-card.field-entered{animation:none}.overview-card.section-item-stagger-0,.overview-card.item-stagger-0,.overview-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.overview-card.section-item-stagger-1,.overview-card.item-stagger-1,.overview-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.overview-card.section-item-stagger-2,.overview-card.item-stagger-2,.overview-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.overview-card.section-item-stagger-3,.overview-card.item-stagger-3,.overview-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.overview-card.section-item-stagger-4,.overview-card.item-stagger-4,.overview-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.overview-card.section-item-stagger-5,.overview-card.item-stagger-5,.overview-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.overview-card.section-item-stagger-6,.overview-card.item-stagger-6,.overview-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.overview-card.section-item-stagger-7,.overview-card.item-stagger-7,.overview-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.overview-card.section-item-stagger-8,.overview-card.item-stagger-8,.overview-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.overview-card.section-item-stagger-9,.overview-card.item-stagger-9,.overview-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.overview-card.section-item-stagger-10,.overview-card.item-stagger-10,.overview-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.overview-card.section-item-stagger-11,.overview-card.item-stagger-11,.overview-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.overview-card.section-item-stagger-12,.overview-card.item-stagger-12,.overview-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.overview-card.section-item-stagger-13,.overview-card.item-stagger-13,.overview-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.overview-card.section-item-stagger-14,.overview-card.item-stagger-14,.overview-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.overview-card.section-item-stagger-15,.overview-card.item-stagger-15,.overview-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.overview-card__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height);margin-bottom:0}.overview-card__value{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;text-align:right}.overview-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.overview-empty lucide-icon,.overview-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.overview-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.info-matrix{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.info-row{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);gap:var(--space-4)}.info-row:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.info-row:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.info-row{transition:none}}.info-row.section-item-streaming,.info-row.item-streaming,.info-row.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.info-row.section-item-entered,.info-row.item-entered,.info-row.field-entered{animation:none}.info-row.section-item-stagger-0,.info-row.item-stagger-0,.info-row.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.info-row.section-item-stagger-1,.info-row.item-stagger-1,.info-row.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.info-row.section-item-stagger-2,.info-row.item-stagger-2,.info-row.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.info-row.section-item-stagger-3,.info-row.item-stagger-3,.info-row.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.info-row.section-item-stagger-4,.info-row.item-stagger-4,.info-row.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.info-row.section-item-stagger-5,.info-row.item-stagger-5,.info-row.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.info-row.section-item-stagger-6,.info-row.item-stagger-6,.info-row.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.info-row.section-item-stagger-7,.info-row.item-stagger-7,.info-row.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.info-row.section-item-stagger-8,.info-row.item-stagger-8,.info-row.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.info-row.section-item-stagger-9,.info-row.item-stagger-9,.info-row.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.info-row.section-item-stagger-10,.info-row.item-stagger-10,.info-row.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.info-row.section-item-stagger-11,.info-row.item-stagger-11,.info-row.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.info-row.section-item-stagger-12,.info-row.item-stagger-12,.info-row.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.info-row.section-item-stagger-13,.info-row.item-stagger-13,.info-row.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.info-row.section-item-stagger-14,.info-row.item-stagger-14,.info-row.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.info-row.section-item-stagger-15,.info-row.item-stagger-15,.info-row.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.info-row__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height);margin-bottom:0;min-width:80px}.info-row__value{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);text-align:right;flex:1;color:var(--foreground)}.info-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.info-empty lucide-icon,.info-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.info-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.news-feed{display:flex;flex-direction:column;gap:var(--gap-sm);width:100%}.news-item{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.news-item:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.news-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.news-item{transition:none}}.news-item.section-item-streaming,.news-item.item-streaming,.news-item.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.news-item.section-item-entered,.news-item.item-entered,.news-item.field-entered{animation:none}.news-item.section-item-stagger-0,.news-item.item-stagger-0,.news-item.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.news-item.section-item-stagger-1,.news-item.item-stagger-1,.news-item.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.news-item.section-item-stagger-2,.news-item.item-stagger-2,.news-item.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.news-item.section-item-stagger-3,.news-item.item-stagger-3,.news-item.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.news-item.section-item-stagger-4,.news-item.item-stagger-4,.news-item.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.news-item.section-item-stagger-5,.news-item.item-stagger-5,.news-item.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.news-item.section-item-stagger-6,.news-item.item-stagger-6,.news-item.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.news-item.section-item-stagger-7,.news-item.item-stagger-7,.news-item.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.news-item.section-item-stagger-8,.news-item.item-stagger-8,.news-item.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.news-item.section-item-stagger-9,.news-item.item-stagger-9,.news-item.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.news-item.section-item-stagger-10,.news-item.item-stagger-10,.news-item.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.news-item.section-item-stagger-11,.news-item.item-stagger-11,.news-item.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.news-item.section-item-stagger-12,.news-item.item-stagger-12,.news-item.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.news-item.section-item-stagger-13,.news-item.item-stagger-13,.news-item.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.news-item.section-item-stagger-14,.news-item.item-stagger-14,.news-item.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.news-item.section-item-stagger-15,.news-item.item-stagger-15,.news-item.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.news-item__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between;margin-bottom:var(--space-1)}.news-item__tag{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.news-item__date{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height)}.news-item__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.news-item__summary{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0}.news-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.news-empty lucide-icon,.news-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.news-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.contact-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.contact-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:flex-start;gap:var(--space-3)}.contact-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.contact-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.contact-card{transition:none}}.contact-card.section-item-streaming,.contact-card.item-streaming,.contact-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.contact-card.section-item-entered,.contact-card.item-entered,.contact-card.field-entered{animation:none}.contact-card.section-item-stagger-0,.contact-card.item-stagger-0,.contact-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.contact-card.section-item-stagger-1,.contact-card.item-stagger-1,.contact-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.contact-card.section-item-stagger-2,.contact-card.item-stagger-2,.contact-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.contact-card.section-item-stagger-3,.contact-card.item-stagger-3,.contact-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.contact-card.section-item-stagger-4,.contact-card.item-stagger-4,.contact-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.contact-card.section-item-stagger-5,.contact-card.item-stagger-5,.contact-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.contact-card.section-item-stagger-6,.contact-card.item-stagger-6,.contact-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.contact-card.section-item-stagger-7,.contact-card.item-stagger-7,.contact-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.contact-card.section-item-stagger-8,.contact-card.item-stagger-8,.contact-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.contact-card.section-item-stagger-9,.contact-card.item-stagger-9,.contact-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.contact-card.section-item-stagger-10,.contact-card.item-stagger-10,.contact-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.contact-card.section-item-stagger-11,.contact-card.item-stagger-11,.contact-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.contact-card.section-item-stagger-12,.contact-card.item-stagger-12,.contact-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.contact-card.section-item-stagger-13,.contact-card.item-stagger-13,.contact-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.contact-card.section-item-stagger-14,.contact-card.item-stagger-14,.contact-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.contact-card.section-item-stagger-15,.contact-card.item-stagger-15,.contact-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.contact-card__avatar{width:36px;height:36px;border-radius:var(--radius-full);background:#ff790026;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}.contact-card__avatar img{width:100%;height:100%;object-fit:cover}.contact-card__avatar__initials{font-size:12.6px;font-weight:600;color:var(--accent)}.contact-card__initials{font-size:.75rem;font-weight:600;color:var(--accent)}.contact-card__info{display:flex;flex-direction:column;gap:var(--space-1);width:100%;flex:1;min-width:0}.contact-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.contact-card__role{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.contact-card__email,.contact-card__phone{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1);text-decoration:none}.contact-card__email lucide-icon,.contact-card__email svg,.contact-card__phone lucide-icon,.contact-card__phone svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.6}.contact-card__email:hover,.contact-card__phone:hover{color:var(--accent)}.contact-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.contact-empty lucide-icon,.contact-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.contact-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.event-grid{display:flex;flex-direction:column;gap:var(--gap-sm);width:100%}.event-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:flex-start;gap:var(--space-3)}.event-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.event-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.event-card{transition:none}}.event-card.section-item-streaming,.event-card.item-streaming,.event-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.event-card.section-item-entered,.event-card.item-entered,.event-card.field-entered{animation:none}.event-card.section-item-stagger-0,.event-card.item-stagger-0,.event-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.event-card.section-item-stagger-1,.event-card.item-stagger-1,.event-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.event-card.section-item-stagger-2,.event-card.item-stagger-2,.event-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.event-card.section-item-stagger-3,.event-card.item-stagger-3,.event-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.event-card.section-item-stagger-4,.event-card.item-stagger-4,.event-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.event-card.section-item-stagger-5,.event-card.item-stagger-5,.event-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.event-card.section-item-stagger-6,.event-card.item-stagger-6,.event-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.event-card.section-item-stagger-7,.event-card.item-stagger-7,.event-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.event-card.section-item-stagger-8,.event-card.item-stagger-8,.event-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.event-card.section-item-stagger-9,.event-card.item-stagger-9,.event-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.event-card.section-item-stagger-10,.event-card.item-stagger-10,.event-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.event-card.section-item-stagger-11,.event-card.item-stagger-11,.event-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.event-card.section-item-stagger-12,.event-card.item-stagger-12,.event-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.event-card.section-item-stagger-13,.event-card.item-stagger-13,.event-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.event-card.section-item-stagger-14,.event-card.item-stagger-14,.event-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.event-card.section-item-stagger-15,.event-card.item-stagger-15,.event-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.event-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-xl);height:var(--icon-xl);color:var(--accent);flex-shrink:0;background:#ff79001a;border-radius:var(--radius-sm)}.event-card__icon lucide-icon,.event-card__icon svg{width:calc(var(--icon-xl) * .6);height:calc(var(--icon-xl) * .6)}.event-card__content{display:flex;flex-direction:column;gap:var(--space-1);width:100%;flex:1;min-width:0}.event-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.event-card__datetime{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;flex-direction:row;align-items:center;gap:var(--space-3);width:100%;flex-wrap:wrap}.event-card__datetime lucide-icon,.event-card__datetime svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.5}.event-card__date,.event-card__time,.event-card__location{display:inline-flex;align-items:center;gap:var(--space-1)}.event-card__status{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.event-card__status.status--completed,.event-card__status.status--success{color:var(--status-success);background:var(--status-success-bg)}.event-card__status.status--active,.event-card__status.status--in-progress{color:var(--accent);background:#ff79001a}.event-card__status.status--pending,.event-card__status.status--warning{color:var(--status-warning);background:var(--status-warning-bg)}.event-card__status.status--blocked,.event-card__status.status--cancelled,.event-card__status.status--error{color:var(--status-error);background:var(--status-error-bg)}.event-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.event-empty lucide-icon,.event-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.event-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.quotation-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.quotation-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.quotation-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.quotation-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.quotation-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.quotation-card{transition:none}}.quotation-card.section-item-streaming,.quotation-card.item-streaming,.quotation-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.quotation-card.section-item-entered,.quotation-card.item-entered,.quotation-card.field-entered{animation:none}.quotation-card.section-item-stagger-0,.quotation-card.item-stagger-0,.quotation-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-1,.quotation-card.item-stagger-1,.quotation-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-2,.quotation-card.item-stagger-2,.quotation-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-3,.quotation-card.item-stagger-3,.quotation-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-4,.quotation-card.item-stagger-4,.quotation-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-5,.quotation-card.item-stagger-5,.quotation-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-6,.quotation-card.item-stagger-6,.quotation-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-7,.quotation-card.item-stagger-7,.quotation-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-8,.quotation-card.item-stagger-8,.quotation-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-9,.quotation-card.item-stagger-9,.quotation-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-10,.quotation-card.item-stagger-10,.quotation-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-11,.quotation-card.item-stagger-11,.quotation-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-12,.quotation-card.item-stagger-12,.quotation-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-13,.quotation-card.item-stagger-13,.quotation-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-14,.quotation-card.item-stagger-14,.quotation-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-15,.quotation-card.item-stagger-15,.quotation-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.quotation-card__icon{display:none}.quotation-card__text{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);font-style:italic;line-height:1.6;padding-left:var(--space-3);border-left:2px solid var(--accent);color:var(--foreground)}.quotation-card__author{display:flex;flex-direction:column;gap:var(--space-0);width:100%;margin-top:var(--space-3)}.quotation-card__author-name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;color:var(--accent)}.quotation-card__author-role{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height)}.quotation-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.quotation-empty lucide-icon,.quotation-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.quotation-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.reference-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.reference-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.reference-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.reference-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.reference-card{transition:none}}.reference-card.section-item-streaming,.reference-card.item-streaming,.reference-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.reference-card.section-item-entered,.reference-card.item-entered,.reference-card.field-entered{animation:none}.reference-card.section-item-stagger-0,.reference-card.item-stagger-0,.reference-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.reference-card.section-item-stagger-1,.reference-card.item-stagger-1,.reference-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.reference-card.section-item-stagger-2,.reference-card.item-stagger-2,.reference-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.reference-card.section-item-stagger-3,.reference-card.item-stagger-3,.reference-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.reference-card.section-item-stagger-4,.reference-card.item-stagger-4,.reference-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.reference-card.section-item-stagger-5,.reference-card.item-stagger-5,.reference-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.reference-card.section-item-stagger-6,.reference-card.item-stagger-6,.reference-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.reference-card.section-item-stagger-7,.reference-card.item-stagger-7,.reference-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.reference-card.section-item-stagger-8,.reference-card.item-stagger-8,.reference-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.reference-card.section-item-stagger-9,.reference-card.item-stagger-9,.reference-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.reference-card.section-item-stagger-10,.reference-card.item-stagger-10,.reference-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.reference-card.section-item-stagger-11,.reference-card.item-stagger-11,.reference-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.reference-card.section-item-stagger-12,.reference-card.item-stagger-12,.reference-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.reference-card.section-item-stagger-13,.reference-card.item-stagger-13,.reference-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.reference-card.section-item-stagger-14,.reference-card.item-stagger-14,.reference-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.reference-card.section-item-stagger-15,.reference-card.item-stagger-15,.reference-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.reference-card__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between}.reference-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;flex:1}.reference-card__category{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.reference-card__meta{display:flex;flex-direction:row;align-items:center;gap:var(--space-4);width:100%;flex-wrap:wrap;margin-top:var(--space-1)}.reference-card__source,.reference-card__date{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1)}.reference-card__source lucide-icon,.reference-card__source svg,.reference-card__date lucide-icon,.reference-card__date svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.5}.reference-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.reference-empty lucide-icon,.reference-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.reference-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.network-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.network-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.network-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.network-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.network-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.network-card{transition:none}}.network-card.section-item-streaming,.network-card.item-streaming,.network-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.network-card.section-item-entered,.network-card.item-entered,.network-card.field-entered{animation:none}.network-card.section-item-stagger-0,.network-card.item-stagger-0,.network-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.network-card.section-item-stagger-1,.network-card.item-stagger-1,.network-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.network-card.section-item-stagger-2,.network-card.item-stagger-2,.network-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.network-card.section-item-stagger-3,.network-card.item-stagger-3,.network-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.network-card.section-item-stagger-4,.network-card.item-stagger-4,.network-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.network-card.section-item-stagger-5,.network-card.item-stagger-5,.network-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.network-card.section-item-stagger-6,.network-card.item-stagger-6,.network-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.network-card.section-item-stagger-7,.network-card.item-stagger-7,.network-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.network-card.section-item-stagger-8,.network-card.item-stagger-8,.network-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.network-card.section-item-stagger-9,.network-card.item-stagger-9,.network-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.network-card.section-item-stagger-10,.network-card.item-stagger-10,.network-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.network-card.section-item-stagger-11,.network-card.item-stagger-11,.network-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.network-card.section-item-stagger-12,.network-card.item-stagger-12,.network-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.network-card.section-item-stagger-13,.network-card.item-stagger-13,.network-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.network-card.section-item-stagger-14,.network-card.item-stagger-14,.network-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.network-card.section-item-stagger-15,.network-card.item-stagger-15,.network-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.network-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-lg);height:var(--icon-lg);color:var(--accent);flex-shrink:0;margin-bottom:var(--space-1)}.network-card__icon lucide-icon,.network-card__icon svg{width:calc(var(--icon-lg) * .6);height:calc(var(--icon-lg) * .6)}.network-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.network-card__type{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap;margin-bottom:var(--space-1)}.network-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.network-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.network-empty lucide-icon,.network-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.network-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.product-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.product-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.product-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.product-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.product-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.product-card{transition:none}}.product-card.section-item-streaming,.product-card.item-streaming,.product-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.product-card.section-item-entered,.product-card.item-entered,.product-card.field-entered{animation:none}.product-card.section-item-stagger-0,.product-card.item-stagger-0,.product-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.product-card.section-item-stagger-1,.product-card.item-stagger-1,.product-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.product-card.section-item-stagger-2,.product-card.item-stagger-2,.product-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.product-card.section-item-stagger-3,.product-card.item-stagger-3,.product-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.product-card.section-item-stagger-4,.product-card.item-stagger-4,.product-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.product-card.section-item-stagger-5,.product-card.item-stagger-5,.product-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.product-card.section-item-stagger-6,.product-card.item-stagger-6,.product-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.product-card.section-item-stagger-7,.product-card.item-stagger-7,.product-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.product-card.section-item-stagger-8,.product-card.item-stagger-8,.product-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.product-card.section-item-stagger-9,.product-card.item-stagger-9,.product-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.product-card.section-item-stagger-10,.product-card.item-stagger-10,.product-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.product-card.section-item-stagger-11,.product-card.item-stagger-11,.product-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.product-card.section-item-stagger-12,.product-card.item-stagger-12,.product-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.product-card.section-item-stagger-13,.product-card.item-stagger-13,.product-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.product-card.section-item-stagger-14,.product-card.item-stagger-14,.product-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.product-card.section-item-stagger-15,.product-card.item-stagger-15,.product-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.product-card__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between;margin-bottom:var(--space-1)}.product-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;flex:1}.product-card__category{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.product-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0 0 var(--space-3) 0}.product-card__features{display:flex;flex-direction:column;gap:var(--space-1);width:100%}.product-card__feature{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;align-items:center;gap:var(--space-2)}.product-card__feature lucide-icon,.product-card__feature svg{width:var(--icon-xs);height:var(--icon-xs);color:var(--status-success)}.product-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.product-empty lucide-icon,.product-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.product-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.solutions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.solutions-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.solution-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.solution-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.solution-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.solution-card{transition:none}}.solution-card.section-item-streaming,.solution-card.item-streaming,.solution-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.solution-card.section-item-entered,.solution-card.item-entered,.solution-card.field-entered{animation:none}.solution-card.section-item-stagger-0,.solution-card.item-stagger-0,.solution-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.solution-card.section-item-stagger-1,.solution-card.item-stagger-1,.solution-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.solution-card.section-item-stagger-2,.solution-card.item-stagger-2,.solution-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.solution-card.section-item-stagger-3,.solution-card.item-stagger-3,.solution-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.solution-card.section-item-stagger-4,.solution-card.item-stagger-4,.solution-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.solution-card.section-item-stagger-5,.solution-card.item-stagger-5,.solution-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.solution-card.section-item-stagger-6,.solution-card.item-stagger-6,.solution-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.solution-card.section-item-stagger-7,.solution-card.item-stagger-7,.solution-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.solution-card.section-item-stagger-8,.solution-card.item-stagger-8,.solution-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.solution-card.section-item-stagger-9,.solution-card.item-stagger-9,.solution-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.solution-card.section-item-stagger-10,.solution-card.item-stagger-10,.solution-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.solution-card.section-item-stagger-11,.solution-card.item-stagger-11,.solution-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.solution-card.section-item-stagger-12,.solution-card.item-stagger-12,.solution-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.solution-card.section-item-stagger-13,.solution-card.item-stagger-13,.solution-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.solution-card.section-item-stagger-14,.solution-card.item-stagger-14,.solution-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.solution-card.section-item-stagger-15,.solution-card.item-stagger-15,.solution-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.solution-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-xl);height:var(--icon-xl);color:var(--accent);flex-shrink:0;margin-bottom:var(--space-2)}.solution-card__icon lucide-icon,.solution-card__icon svg{width:calc(var(--icon-xl) * .6);height:calc(var(--icon-xl) * .6)}.solution-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.solution-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.solution-card__benefits{display:flex;flex-direction:column;gap:var(--space-1);width:100%;margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--border)}.solution-card__benefit{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;align-items:center;gap:var(--space-2)}.solution-card__benefit lucide-icon,.solution-card__benefit svg{width:var(--icon-xs);height:var(--icon-xs);color:var(--accent)}.solutions-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.solutions-empty lucide-icon,.solutions-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.solutions-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.timeline-grid{display:flex;flex-direction:column;gap:0;width:100%;position:relative;padding-left:var(--space-5)}.timeline-grid:before{content:\"\";position:absolute;left:var(--space-1);top:var(--space-3);bottom:var(--space-3);width:1px;background:var(--accent);opacity:.3}.timeline-item{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);position:relative}.timeline-item:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.timeline-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.timeline-item{transition:none}}.timeline-item.section-item-streaming,.timeline-item.item-streaming,.timeline-item.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.timeline-item.section-item-entered,.timeline-item.item-entered,.timeline-item.field-entered{animation:none}.timeline-item.section-item-stagger-0,.timeline-item.item-stagger-0,.timeline-item.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-1,.timeline-item.item-stagger-1,.timeline-item.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-2,.timeline-item.item-stagger-2,.timeline-item.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-3,.timeline-item.item-stagger-3,.timeline-item.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-4,.timeline-item.item-stagger-4,.timeline-item.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-5,.timeline-item.item-stagger-5,.timeline-item.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-6,.timeline-item.item-stagger-6,.timeline-item.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-7,.timeline-item.item-stagger-7,.timeline-item.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-8,.timeline-item.item-stagger-8,.timeline-item.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-9,.timeline-item.item-stagger-9,.timeline-item.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-10,.timeline-item.item-stagger-10,.timeline-item.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-11,.timeline-item.item-stagger-11,.timeline-item.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-12,.timeline-item.item-stagger-12,.timeline-item.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-13,.timeline-item.item-stagger-13,.timeline-item.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-14,.timeline-item.item-stagger-14,.timeline-item.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-15,.timeline-item.item-stagger-15,.timeline-item.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.timeline-item:before{content:\"\";position:absolute;left:calc(-1 * var(--space-5) + var(--space-1) - 3px);top:var(--space-3);width:7px;height:7px;background:var(--accent);border-radius:var(--radius-full);z-index:1}.timeline-item__date{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap;margin-bottom:var(--space-1)}.timeline-item__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.timeline-item__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.timeline-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.timeline-empty lucide-icon,.timeline-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.timeline-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.brand-colors-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.brand-colors-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.brand-color-tile{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:0;overflow:hidden}.brand-color-tile:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.brand-color-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.brand-color-tile{transition:none}}.brand-color-tile.section-item-streaming,.brand-color-tile.item-streaming,.brand-color-tile.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.brand-color-tile.section-item-entered,.brand-color-tile.item-entered,.brand-color-tile.field-entered{animation:none}.brand-color-tile.section-item-stagger-0,.brand-color-tile.item-stagger-0,.brand-color-tile.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-1,.brand-color-tile.item-stagger-1,.brand-color-tile.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-2,.brand-color-tile.item-stagger-2,.brand-color-tile.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-3,.brand-color-tile.item-stagger-3,.brand-color-tile.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-4,.brand-color-tile.item-stagger-4,.brand-color-tile.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-5,.brand-color-tile.item-stagger-5,.brand-color-tile.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-6,.brand-color-tile.item-stagger-6,.brand-color-tile.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-7,.brand-color-tile.item-stagger-7,.brand-color-tile.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-8,.brand-color-tile.item-stagger-8,.brand-color-tile.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-9,.brand-color-tile.item-stagger-9,.brand-color-tile.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-10,.brand-color-tile.item-stagger-10,.brand-color-tile.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-11,.brand-color-tile.item-stagger-11,.brand-color-tile.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-12,.brand-color-tile.item-stagger-12,.brand-color-tile.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-13,.brand-color-tile.item-stagger-13,.brand-color-tile.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-14,.brand-color-tile.item-stagger-14,.brand-color-tile.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-15,.brand-color-tile.item-stagger-15,.brand-color-tile.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.brand-color-tile__swatch{width:100%;height:48px}.brand-color-tile__info{padding:var(--space-2)}.brand-color-tile__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;font-size:var(--card-subtitle-font-size);margin:0 0 var(--space-0) 0}.brand-color-tile__code{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);font-family:SF Mono,Monaco,Consolas,monospace}.brand-colors-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.brand-colors-empty lucide-icon,.brand-colors-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.brand-colors-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.social-feed{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.social-feed{grid-template-columns:1fr;gap:var(--gap-sm)}}.social-post{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.social-post:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.social-post:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.social-post{transition:none}}.social-post.section-item-streaming,.social-post.item-streaming,.social-post.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.social-post.section-item-entered,.social-post.item-entered,.social-post.field-entered{animation:none}.social-post.section-item-stagger-0,.social-post.item-stagger-0,.social-post.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.social-post.section-item-stagger-1,.social-post.item-stagger-1,.social-post.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.social-post.section-item-stagger-2,.social-post.item-stagger-2,.social-post.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.social-post.section-item-stagger-3,.social-post.item-stagger-3,.social-post.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.social-post.section-item-stagger-4,.social-post.item-stagger-4,.social-post.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.social-post.section-item-stagger-5,.social-post.item-stagger-5,.social-post.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.social-post.section-item-stagger-6,.social-post.item-stagger-6,.social-post.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.social-post.section-item-stagger-7,.social-post.item-stagger-7,.social-post.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.social-post.section-item-stagger-8,.social-post.item-stagger-8,.social-post.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.social-post.section-item-stagger-9,.social-post.item-stagger-9,.social-post.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.social-post.section-item-stagger-10,.social-post.item-stagger-10,.social-post.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.social-post.section-item-stagger-11,.social-post.item-stagger-11,.social-post.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.social-post.section-item-stagger-12,.social-post.item-stagger-12,.social-post.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.social-post.section-item-stagger-13,.social-post.item-stagger-13,.social-post.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.social-post.section-item-stagger-14,.social-post.item-stagger-14,.social-post.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.social-post.section-item-stagger-15,.social-post.item-stagger-15,.social-post.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.social-post__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;margin-bottom:var(--space-2)}.social-post__platform{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap;text-transform:capitalize}.social-post__handle{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.social-post__followers{font-size:var(--card-value-font-size);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);margin-bottom:var(--space-1)}.social-post__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height)}.social-post__content{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:var(--space-2) 0 0 0}.social-media-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.social-media-empty lucide-icon,.social-media-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.social-media-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.gallery-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.gallery-item{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:0;overflow:hidden;aspect-ratio:4/3}.gallery-item:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.gallery-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.gallery-item{transition:none}}.gallery-item.section-item-streaming,.gallery-item.item-streaming,.gallery-item.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.gallery-item.section-item-entered,.gallery-item.item-entered,.gallery-item.field-entered{animation:none}.gallery-item.section-item-stagger-0,.gallery-item.item-stagger-0,.gallery-item.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-1,.gallery-item.item-stagger-1,.gallery-item.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-2,.gallery-item.item-stagger-2,.gallery-item.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-3,.gallery-item.item-stagger-3,.gallery-item.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-4,.gallery-item.item-stagger-4,.gallery-item.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-5,.gallery-item.item-stagger-5,.gallery-item.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-6,.gallery-item.item-stagger-6,.gallery-item.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-7,.gallery-item.item-stagger-7,.gallery-item.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-8,.gallery-item.item-stagger-8,.gallery-item.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-9,.gallery-item.item-stagger-9,.gallery-item.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-10,.gallery-item.item-stagger-10,.gallery-item.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-11,.gallery-item.item-stagger-11,.gallery-item.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-12,.gallery-item.item-stagger-12,.gallery-item.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-13,.gallery-item.item-stagger-13,.gallery-item.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-14,.gallery-item.item-stagger-14,.gallery-item.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-15,.gallery-item.item-stagger-15,.gallery-item.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.gallery-item__image{width:100%;height:100%;object-fit:cover}.gallery-item__caption{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);position:absolute;bottom:0;left:0;right:0;padding:var(--space-2);background:linear-gradient(transparent,#000000b3);color:#fff}.gallery-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.gallery-empty lucide-icon,.gallery-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.gallery-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.video-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.video-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.video-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:0;overflow:hidden}.video-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.video-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.video-card{transition:none}}.video-card.section-item-streaming,.video-card.item-streaming,.video-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.video-card.section-item-entered,.video-card.item-entered,.video-card.field-entered{animation:none}.video-card.section-item-stagger-0,.video-card.item-stagger-0,.video-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.video-card.section-item-stagger-1,.video-card.item-stagger-1,.video-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.video-card.section-item-stagger-2,.video-card.item-stagger-2,.video-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.video-card.section-item-stagger-3,.video-card.item-stagger-3,.video-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.video-card.section-item-stagger-4,.video-card.item-stagger-4,.video-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.video-card.section-item-stagger-5,.video-card.item-stagger-5,.video-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.video-card.section-item-stagger-6,.video-card.item-stagger-6,.video-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.video-card.section-item-stagger-7,.video-card.item-stagger-7,.video-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.video-card.section-item-stagger-8,.video-card.item-stagger-8,.video-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.video-card.section-item-stagger-9,.video-card.item-stagger-9,.video-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.video-card.section-item-stagger-10,.video-card.item-stagger-10,.video-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.video-card.section-item-stagger-11,.video-card.item-stagger-11,.video-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.video-card.section-item-stagger-12,.video-card.item-stagger-12,.video-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.video-card.section-item-stagger-13,.video-card.item-stagger-13,.video-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.video-card.section-item-stagger-14,.video-card.item-stagger-14,.video-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.video-card.section-item-stagger-15,.video-card.item-stagger-15,.video-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.video-card__thumbnail{width:100%;height:90px;background:#ff79001a;display:flex;align-items:center;justify-content:center;position:relative}.video-card__thumbnail img{width:100%;height:100%;object-fit:cover}.video-card__thumbnail:after{content:\"\\25b6\";position:absolute;width:28px;height:28px;background:#0009;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;font-size:.7rem;color:#fff;padding-left:2px}.video-card__info{padding:var(--space-2) var(--space-3)}.video-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.video-card__meta{display:flex;flex-direction:row;align-items:center;gap:var(--space-3);width:100%}.video-card__duration,.video-card__views{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1)}.video-card__duration lucide-icon,.video-card__duration svg,.video-card__views lucide-icon,.video-card__views svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.5}.video-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.video-empty lucide-icon,.video-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.video-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.chart-container{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);min-height:180px}.chart-container:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.chart-container:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.chart-container{transition:none}}.chart-container canvas{max-width:100%;height:auto!important}.chart-header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between;margin-bottom:var(--space-3)}.chart-title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.chart-legend{display:flex;flex-direction:row;align-items:center;gap:var(--space-4);width:100%}.chart-legend__item{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1)}.chart-legend__color{width:8px;height:8px;border-radius:var(--radius-xs)}.chart-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.chart-empty lucide-icon,.chart-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.chart-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.list-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.list-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3)}.list-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.list-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.list-card{transition:none}}.list-card.section-item-streaming,.list-card.item-streaming,.list-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.list-card.section-item-entered,.list-card.item-entered,.list-card.field-entered{animation:none}.list-card.section-item-stagger-0,.list-card.item-stagger-0,.list-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.list-card.section-item-stagger-1,.list-card.item-stagger-1,.list-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.list-card.section-item-stagger-2,.list-card.item-stagger-2,.list-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.list-card.section-item-stagger-3,.list-card.item-stagger-3,.list-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.list-card.section-item-stagger-4,.list-card.item-stagger-4,.list-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.list-card.section-item-stagger-5,.list-card.item-stagger-5,.list-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.list-card.section-item-stagger-6,.list-card.item-stagger-6,.list-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.list-card.section-item-stagger-7,.list-card.item-stagger-7,.list-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.list-card.section-item-stagger-8,.list-card.item-stagger-8,.list-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.list-card.section-item-stagger-9,.list-card.item-stagger-9,.list-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.list-card.section-item-stagger-10,.list-card.item-stagger-10,.list-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.list-card.section-item-stagger-11,.list-card.item-stagger-11,.list-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.list-card.section-item-stagger-12,.list-card.item-stagger-12,.list-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.list-card.section-item-stagger-13,.list-card.item-stagger-13,.list-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.list-card.section-item-stagger-14,.list-card.item-stagger-14,.list-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.list-card.section-item-stagger-15,.list-card.item-stagger-15,.list-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.list-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-lg);height:var(--icon-lg);color:var(--accent);flex-shrink:0}.list-card__icon lucide-icon,.list-card__icon svg{width:calc(var(--icon-lg) * .6);height:calc(var(--icon-lg) * .6)}.list-card__content{display:flex;flex-direction:column;gap:var(--space-0);width:100%;flex:1;min-width:0}.list-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.list-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.list-card__badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.list-card__badge.status--completed,.list-card__badge.status--success{color:var(--status-success);background:var(--status-success-bg)}.list-card__badge.status--active,.list-card__badge.status--in-progress{color:var(--accent);background:#ff79001a}.list-card__badge.status--pending,.list-card__badge.status--warning{color:var(--status-warning);background:var(--status-warning-bg)}.list-card__badge.status--blocked,.list-card__badge.status--cancelled,.list-card__badge.status--error{color:var(--status-error);background:var(--status-error-bg)}.list-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.list-empty lucide-icon,.list-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.list-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.map-container{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:var(--space-5);min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);text-align:center}.map-container:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.map-container:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.map-container{transition:none}}.map-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.map-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.map-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.map-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.map-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.map-card{transition:none}}.map-card.section-item-streaming,.map-card.item-streaming,.map-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.map-card.section-item-entered,.map-card.item-entered,.map-card.field-entered{animation:none}.map-card.section-item-stagger-0,.map-card.item-stagger-0,.map-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.map-card.section-item-stagger-1,.map-card.item-stagger-1,.map-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.map-card.section-item-stagger-2,.map-card.item-stagger-2,.map-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.map-card.section-item-stagger-3,.map-card.item-stagger-3,.map-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.map-card.section-item-stagger-4,.map-card.item-stagger-4,.map-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.map-card.section-item-stagger-5,.map-card.item-stagger-5,.map-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.map-card.section-item-stagger-6,.map-card.item-stagger-6,.map-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.map-card.section-item-stagger-7,.map-card.item-stagger-7,.map-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.map-card.section-item-stagger-8,.map-card.item-stagger-8,.map-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.map-card.section-item-stagger-9,.map-card.item-stagger-9,.map-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.map-card.section-item-stagger-10,.map-card.item-stagger-10,.map-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.map-card.section-item-stagger-11,.map-card.item-stagger-11,.map-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.map-card.section-item-stagger-12,.map-card.item-stagger-12,.map-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.map-card.section-item-stagger-13,.map-card.item-stagger-13,.map-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.map-card.section-item-stagger-14,.map-card.item-stagger-14,.map-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.map-card.section-item-stagger-15,.map-card.item-stagger-15,.map-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.map-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-lg);height:var(--icon-lg);color:var(--accent);flex-shrink:0;margin-bottom:var(--space-2)}.map-card__icon lucide-icon,.map-card__icon svg{width:calc(var(--icon-lg) * .6);height:calc(var(--icon-lg) * .6)}.map-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.map-card__address{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0 0 var(--space-1) 0}.map-card__coordinates{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);font-family:SF Mono,Monaco,Consolas,monospace}.map-location{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.map-placeholder{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height)}.map-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.map-empty lucide-icon,.map-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.map-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.faq-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.faq-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.faq-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.faq-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.faq-card{transition:none}}.faq-card.section-item-streaming,.faq-card.item-streaming,.faq-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.faq-card.section-item-entered,.faq-card.item-entered,.faq-card.field-entered{animation:none}.faq-card.section-item-stagger-0,.faq-card.item-stagger-0,.faq-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.faq-card.section-item-stagger-1,.faq-card.item-stagger-1,.faq-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.faq-card.section-item-stagger-2,.faq-card.item-stagger-2,.faq-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.faq-card.section-item-stagger-3,.faq-card.item-stagger-3,.faq-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.faq-card.section-item-stagger-4,.faq-card.item-stagger-4,.faq-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.faq-card.section-item-stagger-5,.faq-card.item-stagger-5,.faq-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.faq-card.section-item-stagger-6,.faq-card.item-stagger-6,.faq-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.faq-card.section-item-stagger-7,.faq-card.item-stagger-7,.faq-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.faq-card.section-item-stagger-8,.faq-card.item-stagger-8,.faq-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.faq-card.section-item-stagger-9,.faq-card.item-stagger-9,.faq-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.faq-card.section-item-stagger-10,.faq-card.item-stagger-10,.faq-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.faq-card.section-item-stagger-11,.faq-card.item-stagger-11,.faq-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.faq-card.section-item-stagger-12,.faq-card.item-stagger-12,.faq-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.faq-card.section-item-stagger-13,.faq-card.item-stagger-13,.faq-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.faq-card.section-item-stagger-14,.faq-card.item-stagger-14,.faq-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.faq-card.section-item-stagger-15,.faq-card.item-stagger-15,.faq-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.faq-card__question{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-2) 0}.faq-card__answer{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0;padding-left:var(--space-3);border-left:2px solid var(--accent);opacity:.9}.faq-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.faq-empty lucide-icon,.faq-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.faq-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.pricing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.pricing-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.pricing-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);text-align:center}.pricing-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.pricing-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.pricing-card{transition:none}}.pricing-card.section-item-streaming,.pricing-card.item-streaming,.pricing-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.pricing-card.section-item-entered,.pricing-card.item-entered,.pricing-card.field-entered{animation:none}.pricing-card.section-item-stagger-0,.pricing-card.item-stagger-0,.pricing-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-1,.pricing-card.item-stagger-1,.pricing-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-2,.pricing-card.item-stagger-2,.pricing-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-3,.pricing-card.item-stagger-3,.pricing-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-4,.pricing-card.item-stagger-4,.pricing-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-5,.pricing-card.item-stagger-5,.pricing-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-6,.pricing-card.item-stagger-6,.pricing-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-7,.pricing-card.item-stagger-7,.pricing-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-8,.pricing-card.item-stagger-8,.pricing-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-9,.pricing-card.item-stagger-9,.pricing-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-10,.pricing-card.item-stagger-10,.pricing-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-11,.pricing-card.item-stagger-11,.pricing-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-12,.pricing-card.item-stagger-12,.pricing-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-13,.pricing-card.item-stagger-13,.pricing-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-14,.pricing-card.item-stagger-14,.pricing-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-15,.pricing-card.item-stagger-15,.pricing-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.pricing-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-3) 0}.pricing-card__price{font-size:var(--card-value-font-size-large);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);color:var(--accent);margin-bottom:var(--space-1)}.pricing-card__period{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);margin-bottom:var(--space-4)}.pricing-card__features{display:flex;flex-direction:column;gap:var(--space-2);width:100%;text-align:left;padding-top:var(--space-4);border-top:1px solid var(--border)}.pricing-card__feature{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;align-items:center;gap:var(--space-2)}.pricing-card__feature lucide-icon,.pricing-card__feature svg{width:var(--icon-xs);height:var(--icon-xs);color:var(--status-success)}.pricing-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.pricing-empty lucide-icon,.pricing-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.pricing-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.fallback-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.fallback-empty lucide-icon,.fallback-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.fallback-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.fallback-message{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.ai-section__body{width:100%;box-sizing:border-box}app-card-actions{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:.75rem!important;margin-top:12px!important;margin-left:4px!important;margin-right:4px!important;padding-bottom:16px!important}.osi-action-button{margin:0!important;-webkit-appearance:none!important;appearance:none!important;display:inline-flex!important;align-items:center!important;gap:.5rem!important;padding:.625rem 1.25rem!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:.875rem!important;font-weight:600!important;line-height:1.25rem!important;text-decoration:none!important;white-space:nowrap!important;cursor:pointer!important;border-radius:10px!important;transition:all .2s ease!important;box-sizing:border-box!important}.osi-action-button--primary{background-color:#ff7900!important;color:#fff!important;border:none!important;box-shadow:0 2px 8px #ff790040!important}.osi-action-button--primary *{color:#fff!important}.osi-action-button--primary:hover{background-color:#e66d00!important;color:#fff!important;box-shadow:0 4px 16px #ff790066!important;transform:translateY(-1px)!important}.osi-action-button--primary:active{background-color:#cc6000!important;color:#fff!important;transform:scale(.98) translateY(0)!important;box-shadow:0 2px 4px #ff790033!important}.osi-action-button--primary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button--secondary{background-color:transparent!important;color:#fff!important;border:2px solid #ff7900!important}.osi-action-button--secondary *{color:#fff!important}.osi-action-button--secondary:hover{background-color:#ff79001a!important;color:#fff!important;box-shadow:0 2px 8px #ff790033!important}.osi-action-button--secondary:active{background-color:#ff790026!important;color:#fff!important;transform:scale(.98)!important}.osi-action-button--secondary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button__label{color:#fff!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.osi-action-button__icon{width:18px!important;height:18px!important;object-fit:contain!important;flex-shrink:0!important}.osi-action-button__emoji{font-size:16px!important;line-height:1!important;flex-shrink:0!important}.osi-action-button lucide-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.osi-action-button lucide-icon svg{width:16px!important;height:16px!important;stroke:currentColor!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.card-signature{display:block!important;width:100%!important;box-sizing:border-box!important;margin:0!important;padding:12px 16px!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:11px!important;font-weight:400!important;line-height:1.4!important;letter-spacing:.02em!important;text-align:center!important;color:#646464b3!important;background:transparent!important;border:none!important;text-decoration:none!important}:host([data-theme=night]) .card-signature,:host-context([data-theme=night]) .card-signature{color:#c8c8c899!important}@media (prefers-reduced-motion: reduce){:host{--duration-instant: 1ms;--duration-fast: 1ms;--duration-normal: 1ms;--duration-moderate: 1ms;--duration-slow: 1ms;--duration-slower: 1ms;--duration-slowest: 1ms;--stagger-delay-base: 0ms;--stagger-delay-fast: 0ms;--stagger-delay-slow: 0ms;--ai-card-entrance-animation: none;--section-entrance-animation: none;--section-item-entrance-animation: none}}@media (prefers-contrast: high){:host{--foreground: #ffffff;--background: #000000;--muted-foreground: #ffffff;--muted: #000000;--border: #ffffff;--card: #000000;--card-foreground: #ffffff;--ai-card-border: 2px solid #ffffff;--section-border: 2px solid #ffffff;--button-border: 2px solid #ffffff;--card-background: #000000;--card-background-hover: #1a1a1a;--section-item-background: #000000;--section-item-background-hover: #1a1a1a}}@media (forced-colors: active){:host{--foreground: ButtonText;--background: Canvas;--border: ButtonBorder;--card: Canvas;--card-foreground: ButtonText}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: LucideIconsModule }, { kind: "component", type: CardHeaderComponent, selector: "app-card-header", inputs: ["cardTitle", "showExport"], outputs: ["export"] }, { kind: "component", type: CardSectionListComponent, selector: "app-card-section-list", inputs: ["sections", "containerWidth", "isStreaming"], outputs: ["sectionEvent", "layoutChange"] }, { kind: "component", type: CardActionsComponent, selector: "app-card-actions", inputs: ["actions"], outputs: ["actionClick"] }], animations: [
|
|
29199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: AICardRendererComponent, isStandalone: true, selector: "app-ai-card-renderer", inputs: { loadingMessages: "loadingMessages", loadingTitle: "loadingTitle", cardConfig: "cardConfig", updateSource: "updateSource", isFullscreen: "isFullscreen", tiltEnabled: "tiltEnabled", streamingStage: "streamingStage", streamingProgress: "streamingProgress", streamingProgressLabel: "streamingProgressLabel", isStreaming: "isStreaming", showLoadingByDefault: "showLoadingByDefault", containerWidth: "containerWidth", changeType: "changeType", llmFallbackEndpoint: "llmFallbackEndpoint", llmFallbackPrompt: "llmFallbackPrompt" }, outputs: { fieldInteraction: "fieldInteraction", cardInteraction: "cardInteraction", fullscreenToggle: "fullscreenToggle", agentAction: "agentAction", questionAction: "questionAction", export: "export" }, viewQueries: [{ propertyName: "cardContainer", first: true, predicate: ["cardContainer"], descendants: true }, { propertyName: "tiltContainerRef", first: true, predicate: ["tiltContainer"], descendants: true }, { propertyName: "emptyStateContainer", first: true, predicate: ["emptyStateContainer"], descendants: true }], ngImport: i0, template: "<div\n *ngIf=\"cardConfig\"\n #cardContainer\n class=\"w-full h-full card-container-wrapper\"\n [class.max-w-none]=\"isFullscreen\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n [style.min-height]=\"'0'\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave()\"\n (mousemove)=\"onMouseMove($event)\"\n>\n <div\n class=\"glow-container w-full flex-1 min-h-0\"\n [ngClass]=\"{ 'max-w-none': isFullscreen }\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n >\n <div\n class=\"tilt-container w-full flex-1 min-h-0\"\n [ngClass]=\"{ 'max-w-none': isFullscreen }\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n #tiltContainer\n [ngStyle]=\"tiltStyle\"\n >\n <article\n class=\"ai-card-surface flex-1 min-h-0\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n [ngClass]=\"{\n 'ai-card-surface--fullscreen': isFullscreen,\n 'ai-card-surface--empty-state': !processedSections.length,\n 'streaming-active': isStreamingActive,\n }\"\n [attr.aria-label]=\"(cardConfig && cardConfig.cardTitle) || 'Card'\"\n [attr.aria-live]=\"effectiveStreamingStage === 'streaming' ? 'polite' : 'off'\"\n [attr.aria-busy]=\"effectiveStreamingStage === 'streaming' || effectiveStreamingStage === 'thinking'\"\n role=\"article\"\n >\n <!-- Card Header -->\n <app-card-header\n *ngIf=\"processedSections.length\"\n [cardTitle]=\"cardConfig.cardTitle\"\n [showExport]=\"true\"\n (export)=\"onExport()\"\n >\n </app-card-header>\n\n <!-- Card Section List -->\n <app-card-section-list\n *ngIf=\"processedSections.length; else emptyState\"\n [sections]=\"processedSections\"\n [containerWidth]=\"effectiveContainerWidth\"\n [isStreaming]=\"isStreamingActive\"\n (sectionEvent)=\"onSectionEvent($event)\"\n (layoutChange)=\"onLayoutChange($event)\"\n >\n </app-card-section-list>\n\n <ng-template #emptyState>\n <div\n class=\"card-empty-state\"\n #emptyStateContainer\n (mousemove)=\"onEmptyStateMouseMove($event)\"\n (mouseleave)=\"onEmptyStateMouseLeave()\"\n >\n <div class=\"empty-state-background\">\n <div class=\"empty-state-gradient\" [style.transform]=\"gradientTransform\"></div>\n <div class=\"empty-state-particles\">\n <div\n *ngFor=\"let particle of particles; let i = index; trackBy: trackByParticle\"\n class=\"particle\"\n [class]=\"'particle-' + (i + 1)\"\n [style.transform]=\"particle.transform\"\n [style.opacity]=\"particle.opacity\"\n ></div>\n </div>\n </div>\n <div class=\"empty-state-content\" [style.transform]=\"contentTransform\">\n <div class=\"empty-state-text\">\n <h3 class=\"empty-state-title\">{{ loadingTitle }}</h3>\n <div class=\"empty-state-message-container\">\n <p class=\"empty-state-message\" [@messageAnimation]=\"currentMessageIndex\">\n {{ currentMessage }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n <!-- Card Actions -->\n <app-card-actions\n *ngIf=\"processedSections.length && cardConfig.actions?.length\"\n [actions]=\"cardConfig.actions || []\"\n (actionClick)=\"onActionClick($event)\"\n >\n </app-card-actions>\n\n <!-- Signature at bottom of card -->\n <div *ngIf=\"processedSections.length\" class=\"card-signature\">Powered by Orange Sales Intelligence</div>\n </article>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{all:initial;display:block;position:relative;box-sizing:border-box;padding:8px;background:transparent!important;background-color:transparent!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif;font-size:var(--font-size-base, 14px);line-height:1.5;color:var(--foreground, #1c1c1f);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:\"kern\" 1;-webkit-tap-highlight-color:transparent;contain:layout style}:host([hidden]){display:none!important}:host([disabled]){pointer-events:none;opacity:.6}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border-width:0;border-style:solid;border-color:currentColor}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;line-height:inherit;margin:0}p,span,div{margin:0;padding:0}a{color:inherit;text-decoration:inherit;cursor:pointer}a:focus-visible{outline:2px solid var(--color-brand, #ff7900);outline-offset:2px;border-radius:2px}ul,ol{list-style:none;margin:0;padding:0}li{margin:0;padding:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0;background:transparent;border:none}button,[type=button],[type=reset],[type=submit]{cursor:pointer;-webkit-appearance:button;background-color:transparent;background-image:none}button:focus-visible,[type=button]:focus-visible,[type=reset]:focus-visible,[type=submit]:focus-visible{outline:2px solid var(--color-brand, #ff7900);outline-offset:2px}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}img,video{max-width:100%;height:auto}svg{fill:currentColor}lucide-icon,lucide-angular{display:inline-flex!important;align-items:center!important;justify-content:center!important;vertical-align:middle!important;flex-shrink:0}lucide-icon svg,lucide-angular svg{display:block!important;width:inherit!important;height:inherit!important;stroke:currentColor!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}table{text-indent:0;border-color:inherit;border-collapse:collapse}summary{display:list-item;cursor:pointer}[role=button]{cursor:pointer}:focus-visible{outline:2px solid var(--color-brand, #ff7900);outline-offset:2px}:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media (prefers-contrast: high){*{border-color:currentColor!important}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--muted, #f0f0f1);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--muted-foreground, #92999e);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--foreground, #1c1c1f)}*{scrollbar-width:thin;scrollbar-color:var(--muted-foreground, #92999e) var(--muted, #f0f0f1)}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}}:host{color-scheme:light dark;--color-white: #ffffff;--color-black: #000000;--color-brand: #ff7900;--color-brand-dark: #cc5f00;--color-brand-light: #ff9933;--color-gray-50: #ffffff;--color-gray-100: #fcfcfc;--color-gray-150: #f7f7f7;--color-gray-200: #f0f0f1;--color-gray-300: #e9e9e9;--color-gray-400: #92999e;--color-gray-500: #5a5f62;--color-gray-600: #343541;--color-gray-700: #2a2a2a;--color-gray-800: #232323;--color-gray-850: #171717;--color-gray-900: #000000;--background: #ffffff;--surface-contrast-color: #000000;--theme-ai-card-border: 1px solid rgba(255, 255, 255, .06);--theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, .25);--theme-ai-card-background: var(--background);--theme-ai-card-background-hover: var(--background);--theme-ai-card-box-shadow: 0 2px 12px -1px rgba(0, 0, 0, .12);--theme-ai-card-box-shadow-hover: 0 8px 20px -3px rgba(0, 0, 0, .18), 0 0 0 1px rgba(255, 121, 0, .12);--theme-ai-card-transition: all .28s cubic-bezier(.4, 0, .2, 1);--theme-card-border: 1px solid rgba(0, 0, 0, .06);--theme-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-card-background: var(--background);--theme-card-background-hover: var(--background);--theme-card-box-shadow: 0 1px 2px rgba(15, 15, 20, .03);--theme-card-box-shadow-hover: 0 1px 3px rgba(10, 10, 16, .05);--theme-section-border: 1px solid rgba(0, 0, 0, .06);--theme-section-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, .04);--theme-section-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, .05);--theme-section-transition: border-color .22s cubic-bezier(.4, 0, .2, 1), box-shadow .22s cubic-bezier(.4, 0, .2, 1);--section-background: var(--background);--section-background-hover: var(--background);--section-surface: var(--background);--section-surface-hover: var(--background);--theme-section-item-border: 1px solid rgba(0, 0, 0, .06);--theme-section-item-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-item-background: var(--background);--theme-section-item-background-hover: var(--background);--theme-section-item-box-shadow: var(--shadow-md, 0 1px 2px rgba(0, 0, 0, .04));--theme-section-item-box-shadow-hover: var(--shadow-lg, 0 1px 3px rgba(0, 0, 0, .05));--theme-section-item-hover-transform: none;--theme-section-item-transition: border-color .2s cubic-bezier(.4, 0, .2, 1), background .2s cubic-bezier(.4, 0, .2, 1), box-shadow .2s cubic-bezier(.4, 0, .2, 1);--shadow-sm: 0 1px 1px rgba(0, 0, 0, .03);--shadow-md: 0 1px 2px rgba(0, 0, 0, .04);--shadow-lg: 0 1px 3px rgba(0, 0, 0, .05);--shadow-xl: 0 2px 4px rgba(0, 0, 0, .06);--shadow-glow-sm: 0 0 3px rgba(255, 121, 0, .05);--shadow-glow-md: 0 0 5px rgba(255, 121, 0, .08);--shadow-glow-lg: 0 0 8px rgba(255, 121, 0, .1);--shadow-inset-sm: inset 0 1px 2px rgba(0, 0, 0, .04);--shadow-inset-md: inset 0 2px 4px rgba(0, 0, 0, .05);--shadow-hover: var(--shadow-lg), var(--shadow-glow-sm);--radius-base: .625rem;--radius-xs: .25rem;--radius-sm: .375rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-2xl: 1.5rem;--radius-full: 9999px;--spacing-base: .25rem;--space-1: clamp(2px, .4vw, 6px);--space-2: clamp(4px, .6vw, 8px);--space-3: clamp(6px, .8vw, 12px);--space-4: clamp(8px, 1vw, 14px);--space-5: clamp(10px, 1.2vw, 18px);--space-6: clamp(12px, 1.4vw, 20px);--space-7: clamp(14px, 1.6vw, 22px);--space-8: clamp(16px, 1.8vw, 24px);--space-9: clamp(18px, 2vw, 28px);--space-10: clamp(20px, 2.2vw, 32px);--space-11: clamp(22px, 2.4vw, 36px);--space-12: clamp(24px, 2.6vw, 40px);--spacing-xs: var(--space-1);--spacing-sm: var(--space-2);--spacing-md: var(--space-3);--spacing-lg: var(--space-4);--spacing-xl: var(--space-5);--spacing-2xl: var(--space-6);--spacing-3xl: var(--space-7);--spacing-4xl: var(--space-8);--gap-xs: 4px;--gap-sm: 6px;--gap-md: 8px;--gap-lg: 12px;--gap-xl: 16px;--gap-2xl: 20px;--gap-3xl: 24px;--gap-4xl: 32px;--z-base: 0;--z-content: 1;--z-elevated: 10;--z-card: 10;--z-section: 15;--z-dropdown: 100;--z-tooltip: 200;--z-popover: 300;--z-overlay: 400;--z-modal: 500;--z-dialog: 600;--z-notification: 700;--z-toast: 800;--z-max: 999;--duration-instant: 40ms;--duration-fast: 80ms;--duration-normal: .16s;--duration-moderate: .22s;--duration-slow: .3s;--duration-slower: .38s;--duration-slowest: .46s;--ease-out-smooth: cubic-bezier(.23, 1, .32, 1);--ease-in-out-smooth: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-out-expo: cubic-bezier(.19, 1, .22, 1);--ease-in-out-quad: cubic-bezier(.455, .03, .515, .955);--motion-distance-xs: 2px;--motion-distance-sm: 4px;--motion-distance-md: 6px;--motion-distance-lg: 10px;--motion-distance-xl: 12px;--motion-scale-soft-start: .992;--motion-scale-soft-end: 1;--motion-scale-pop: 1.015;--stagger-delay-fast: 15ms;--stagger-delay-base: 25ms;--stagger-delay-slow: 45ms;--animation-fill-mode: both;--animation-play-state: running;--opacity-subtle: .05;--opacity-muted: .15;--opacity-medium: .4;--opacity-strong: .7;--opacity-solid: .9;--font-size-base: 13px;--text-xs: .625rem;--text-sm: .75rem;--text-base: .875rem;--text-lg: .8125rem;--text-xl: 1.125rem;--text-2xl: 1.0625rem;--text-3xl: 1.75rem;--text-4xl: 2.125rem;--text-5xl: 2.875rem;--text-7xl: 4.375rem;--font-weight-normal: 400;--font-weight-medium: 500;--section-title-font-size: clamp(.92rem, .87rem + .2vw, 1.07rem);--section-title-font-weight: 700;--section-title-letter-spacing: -.02em;--section-title-line-height: 1.3;--section-title-text-shadow: 0 1px 2px rgba(0, 0, 0, .08);--card-title-font-size: clamp(.83rem, .78rem + .15vw, .93rem);--card-title-font-weight: 700;--card-title-letter-spacing: -.01em;--card-title-line-height: 1.4;--card-title-text-shadow: 0 1px 1px rgba(0, 0, 0, .06);--card-subtitle-font-size: clamp(.65rem, .625rem + .1vw, .7rem);--card-subtitle-font-weight: 500;--card-subtitle-letter-spacing: .015em;--card-subtitle-line-height: 1.3;--card-label-font-size: clamp(.5rem, .48rem + .05vw, .5rem);--card-label-font-weight: 700;--card-label-letter-spacing: .065em;--card-label-line-height: 1.25;--card-label-text-transform: uppercase;--card-label-text-shadow: 0 1px 1px rgba(0, 0, 0, .05);--card-value-font-size: clamp(1rem, .95rem + .2vw, 1rem);--card-value-font-size-large: clamp(1.2rem, 1.15rem + .2vw, 1.25rem);--card-value-font-size-xl: clamp(1.25rem, 1.2rem + .2vw, 1.25rem);--card-value-font-weight: 600;--card-value-letter-spacing: -.015em;--card-value-line-height: 1.35;--card-value-text-shadow: 0 2px 4px rgba(0, 0, 0, .1);--card-meta-font-size: clamp(.55rem, .525rem + .1vw, .6rem);--card-meta-font-weight: 500;--card-meta-line-height: 1.3;--card-text-small-font-size: clamp(.355rem, .295rem + .13vw, .455rem);--section-grid-min-width: 200px;--font-size-section-header: var(--section-title-font-size);--card-main-padding: 16px;--card-padding-vertical: 12px;--card-padding-horizontal: 16px;--card-padding: 16px;--card-padding-large: 20px;--section-padding: 12px;--section-container-padding: 12px;--card-min-height: auto;--card-gap: clamp(6px, .6vw, 10px);--card-gap-large: clamp(10px, .8vw, 14px);--card-nested-gap: clamp(3px, .4vw, 6px);--section-header-gap: clamp(3px, .4vw, 6px);--section-header-padding-bottom: clamp(0px, .2vw, 2px);--section-title-margin-bottom: 2px;--card-border-radius: 12px;--card-border-radius-large: 16px;--section-card-gap: 8px;--section-card-border-radius: 10px;--card-element-gap-xs: 2px;--card-element-gap-sm: 3px;--card-element-gap-md: 4px;--card-element-gap-lg: 6px;--card-element-gap-xl: 8px;--border-width-default: 1px;--border-width-accent: 3px;--border-width-accent-sm: 2px;--icon-xs: 10px;--icon-sm: 13px;--icon-md: 16px;--icon-lg: 22px;--icon-xl: 36px;--avatar-sm: 32px;--avatar-md: 36px;--progress-height: 2px;--progress-margin: 4px 0;--tag-padding: 3px 6px;--tag-padding-sm: 2px 4px;--tag-padding-lg: 3px 7px;--grid-gap-xs: var(--gap-sm);--grid-gap-sm: var(--gap-md);--grid-gap-md: var(--gap-lg);--grid-gap-lg: var(--gap-xl);--grid-gap-xl: var(--gap-2xl);--section-grid-gap: var(--gap-md);--section-stack-gap: var(--gap-lg);--section-item-gap: var(--gap-sm);--section-item-padding: var(--gap-lg);--metric-item-padding: 10px 12px;--list-item-padding: 10px 12px;--card-text-primary: var(--foreground);--card-text-secondary: var(--muted-foreground);--card-text-muted: var(--muted-foreground);--card-text-hover: var(--primary);--card-text-label: var(--muted-foreground);--card-meta-color: var(--muted-foreground);--card-background: var(--ai-card-background, rgba(255, 121, 0, .03));--card-background-hover: var(--ai-card-background-hover, rgba(255, 121, 0, .05));--card-transition: all .28s cubic-bezier(.4, 0, .2, 1);--card-transition-fast: all .22s ease;--status-success: #22c55e;--status-success-bg: rgba(34, 197, 94, .15);--status-success-border: rgba(74, 222, 128, .4);--status-warning: #f59e0b;--status-warning-bg: rgba(253, 186, 116, .15);--status-warning-border: rgba(251, 191, 36, .4);--status-error: #ef4444;--status-error-bg: rgba(239, 68, 68, .15);--status-error-border: rgba(248, 113, 113, .4);--status-info: #3b82f6;--status-info-bg: rgba(59, 130, 246, .15);--status-info-border: rgba(147, 197, 253, .4);--status-neutral: #6b7280;--status-neutral-bg: rgba(107, 114, 128, .15);--status-neutral-border: rgba(156, 163, 175, .4);--interactive-hover-bg: rgba(255, 121, 0, .08);--interactive-active-bg: rgba(255, 121, 0, .12);--interactive-focus-ring: 0 0 0 2px rgba(255, 121, 0, .4);--interactive-glow: 0 0 12px rgba(255, 121, 0, .3);--hero-card-border: 1px solid rgba(146, 153, 158, .15);--hero-card-border-hover: rgba(255, 121, 0, .4);--hero-card-background: var(--card);--hero-card-background-hover: var(--card);--hero-card-border-radius: var(--radius-lg);--hero-card-box-shadow: var(--shadow-md);--hero-card-box-shadow-hover: var(--shadow-lg);--hero-card-hover-transform: translateY(-2px);--button-border: 1px solid transparent;--button-border-hover: 1px solid rgba(255, 121, 0, .4);--button-background: var(--primary);--button-background-hover: color-mix(in srgb, var(--primary) 85%, transparent);--button-border-radius: var(--radius-md);--button-box-shadow: var(--shadow-sm);--button-box-shadow-hover: var(--shadow-md);--button-hover-transform: translateY(-1px);--ai-card-border: var(--theme-ai-card-border, none);--ai-card-border-hover: var(--theme-ai-card-border-hover, var(--ai-card-border));--ai-card-background: var( --theme-ai-card-background, var(--card-surface, var(--card-section-bg)) );--ai-card-background-hover: var( --theme-ai-card-background-hover, var(--card-surface-hover, var(--card-section-bg)) );--ai-card-border-radius: var(--radius-lg);--ai-card-box-shadow: var(--theme-ai-card-box-shadow, var(--shadow-md));--ai-card-box-shadow-hover: var(--theme-ai-card-box-shadow-hover, var(--shadow-lg));--ai-card-hover-transform: none;--ai-card-transition-default: border .32s cubic-bezier(.4, 0, .2, 1), background .32s cubic-bezier(.4, 0, .2, 1), box-shadow .32s cubic-bezier(.4, 0, .2, 1);--ai-card-transition: var(--theme-ai-card-transition, var(--ai-card-transition-default));--section-border: var(--theme-section-border, 1px solid rgba(255, 255, 255, .05));--section-border-hover: var(--theme-section-border-hover, 1px solid rgba(255, 121, 0, .15));--section-border-radius: var(--radius-lg);--section-box-shadow-default: var(--shadow-md);--section-box-shadow-hover-default: var(--shadow-lg), var(--shadow-glow-sm);--section-box-shadow: var(--theme-section-box-shadow, var(--section-box-shadow-default));--section-box-shadow-hover: var( --theme-section-box-shadow-hover, var(--section-box-shadow-hover-default) );--section-hover-transform: none;--section-transition: var(--theme-section-transition, none);--section-item-border: var(--theme-section-item-border, 1px solid rgba(255, 255, 255, .05));--section-item-border-hover: var(--theme-section-item-border-hover, 1px solid rgba(255, 121, 0, .08));--section-item-background: var(--theme-section-item-background, var(--card-section-bg));--section-item-background-hover: var( --theme-section-item-background-hover, var(--card-section-bg) );--section-item-border-radius: var(--radius-md);--section-item-box-shadow: var(--theme-section-item-box-shadow, var(--shadow-sm));--section-item-box-shadow-hover-default: var(--shadow-md), var(--shadow-glow-sm);--section-item-box-shadow-hover: var( --theme-section-item-box-shadow-hover, var(--section-item-box-shadow-hover-default) );--section-item-hover-transform: var(--theme-section-item-hover-transform, none);--section-item-transition-default: background .22s cubic-bezier(.4, 0, .2, 1), box-shadow .22s cubic-bezier(.4, 0, .2, 1), border-color .22s cubic-bezier(.4, 0, .2, 1);--section-item-transition: var( --theme-section-item-transition, var(--section-item-transition-default) );--card-border: var(--theme-card-border, 1px solid rgba(146, 153, 158, .15));--card-border-hover: var(--theme-card-border-hover, rgba(255, 121, 0, .4));--card-box-shadow: var(--theme-card-box-shadow, var(--shadow-md));--card-box-shadow-hover: var(--theme-card-box-shadow-hover, var(--shadow-lg));--card-hover-transform: none;--ai-card-entrance-animation: fadeInUpSoft var(--duration-moderate) var(--ease-out-smooth) 10ms 1 normal both;--section-entrance-animation: fadeInSoft var(--duration-moderate) var(--ease-out-smooth) 20ms 1 normal both;--section-item-entrance-animation: fadeInScaleSoft var(--duration-normal) var(--ease-out-smooth) 30ms 1 normal both;display:block;width:100%}:host([data-theme=night]),:host-context([data-theme=night]){color-scheme:dark;--background: #030303;--surface-contrast-color: #ffffff;--foreground: #ffffff;--muted: #242424;--muted-foreground: #aaaaaa;--card: var(--background);--card-surface: var(--background);--card-foreground: #ffffff;--card-surface-hover: var(--background);--card-section-bg: #141414;--card-section-card-bg: #1a1a1a;--theme-ai-card-border: 1px solid rgba(255, 255, 255, .06);--theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-ai-card-background: #141414;--theme-ai-card-background-hover: #1a1a1a;--theme-ai-card-box-shadow: 0 2px 12px -1px rgba(0, 0, 0, .15);--theme-ai-card-box-shadow-hover: 0 6px 16px -2px rgba(0, 0, 0, .22), 0 0 0 1px rgba(255, 121, 0, .1);--theme-card-border: 1px solid rgba(255, 255, 255, .06);--theme-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-card-background: var(--background);--theme-card-background-hover: var(--background);--theme-card-box-shadow: 0 1px 3px rgba(0, 0, 0, .25);--theme-card-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, .3);--section-background: var(--background);--section-background-hover: var(--background);--section-surface: #141414;--section-surface-hover: #1a1a1a;--popover: #111111;--popover-foreground: #ffffff;--primary: #ff7900;--primary-foreground: #ffffff;--secondary: #333333;--secondary-foreground: #ffffff;--accent: #ff7900;--accent-foreground: #000000;--destructive: #d4183d;--destructive-foreground: #ffffff;--border: rgba(200, 200, 200, .3);--input: transparent;--input-background: #222222;--switch-background: #333333;--ring: rgba(255, 121, 0, .6);--chart-1: #ff7900;--chart-2: #ff9933;--chart-3: #cc5f00;--chart-4: #ffe6cc;--chart-5: #ff4500;--hero-card-border: 1px solid rgba(233, 233, 233, .2);--hero-card-border-hover: 1px solid rgba(255, 121, 0, .25);--theme-section-border: 1px solid rgba(255, 255, 255, .1);--theme-section-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);--theme-section-box-shadow-hover: 0 2px 5px rgba(0, 0, 0, .35);--theme-section-item-border: 1px solid rgba(255, 255, 255, .06);--theme-section-item-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-section-item-background: #1a1a1a;--theme-section-item-background-hover: #1e1e1e;--theme-section-item-box-shadow: 0 1px 2px rgba(0, 0, 0, .25);--theme-section-item-box-shadow-hover: 0 1px 4px rgba(0, 0, 0, .3);--theme-section-item-hover-transform: none}:host([data-theme=day]),:host-context([data-theme=day]){color-scheme:light;--background: #ffffff;--foreground: #1c1c1f;--muted: #f4f4f6;--muted-foreground: #555861;--card: var(--background);--card-surface: var(--background);--card-foreground: #1c1c1f;--card-surface-hover: var(--background);--card-section-bg: #fafafa;--card-section-card-bg: #f5f5f5;--theme-ai-card-border: 1px solid rgba(0, 0, 0, .06);--theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-ai-card-background: #ffffff;--theme-ai-card-background-hover: #fcfcfc;--theme-ai-card-box-shadow: 0 2px 12px -1px rgba(0, 0, 0, .06);--theme-ai-card-box-shadow-hover: 0 6px 16px -2px rgba(0, 0, 0, .1), 0 0 0 1px rgba(255, 121, 0, .08);--theme-card-border: 1px solid rgba(0, 0, 0, .05);--theme-card-border-hover: 1px solid rgba(255, 121, 0, .15);--theme-card-background: var(--background);--theme-card-background-hover: var(--background);--theme-card-box-shadow: 0 1px 2px rgba(15, 15, 20, .03);--theme-card-box-shadow-hover: 0 1px 3px rgba(10, 10, 16, .04);--section-background: var(--background);--section-background-hover: var(--background);--section-surface: #fafafa;--section-surface-hover: #f5f5f5;--popover: #ffffff;--popover-foreground: #1a1a1a;--primary: #ff7900;--primary-foreground: #ffffff;--secondary: #f5f5f5;--secondary-foreground: #1a1a1a;--accent: #ff7900;--accent-foreground: #ffffff;--destructive: #d4183d;--destructive-foreground: #ffffff;--border: rgba(200, 200, 200, .5);--input: transparent;--input-background: #f9f9f9;--switch-background: #e5e5e5;--ring: rgba(255, 121, 0, .4);--chart-1: #ff7900;--chart-2: #ff9933;--chart-3: #cc5f00;--chart-4: #ffe6cc;--chart-5: #ff4500;--color-gray-700: #e0e0e0;--color-gray-600: #d0d0d0;--hero-card-border: 1px solid rgba(146, 153, 158, .25);--hero-card-border-hover: 1px solid rgba(255, 121, 0, .2);--theme-section-border: 1px solid rgba(0, 0, 0, .05);--theme-section-border-hover: 1px solid rgba(255, 121, 0, .12);--theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, .04);--theme-section-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, .05);--theme-section-item-border: 1px solid rgba(0, 0, 0, .05);--theme-section-item-border-hover: 1px solid rgba(255, 121, 0, .12);--theme-section-item-background: #f7f7f7;--theme-section-item-background-hover: #f4f4f4;--theme-section-item-box-shadow: 0 1px 2px rgba(0, 0, 0, .04);--theme-section-item-box-shadow-hover: 0 1px 3px rgba(0, 0, 0, .05);--theme-section-item-hover-transform: none}div [class$=-icon]:before{vertical-align:middle}.bg-red-500\\/10{background-color:#ef44441a}.bg-yellow-500\\/10{background-color:#ecaf221a}.border-red-500\\/50{border-color:#ef444480}.border-red-500\\/20{border-color:#ef444433}.border-yellow-500\\/50{border-color:#ecaf2280}.transition-smooth{transition:all var(--duration-normal) var(--ease-out-smooth)}.transition-fast{transition:all var(--duration-fast) var(--ease-out-smooth)}.transition-slow{transition:all var(--duration-slow) var(--ease-out-smooth)}.transition-transform{transition:transform var(--duration-normal) var(--ease-out-smooth)}.transition-transform-fast{transition:transform var(--duration-fast) var(--ease-out-smooth)}.transition-opacity{transition:opacity var(--duration-normal) var(--ease-out-smooth)}.transition-opacity-fast{transition:opacity var(--duration-fast) var(--ease-out-smooth)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.hover-lift{transition:transform var(--duration-normal) var(--ease-out-smooth)}.hover-lift:hover{transform:translateZ(0)}.hover-scale{transition:transform var(--duration-normal) var(--ease-out-smooth)}.hover-scale:hover{transform:scale(1.05) translateZ(0)}.hover-glow{transition:box-shadow var(--duration-normal) var(--ease-out-smooth)}.hover-glow:hover{box-shadow:0 0 20px color-mix(in srgb,var(--primary) 40%,transparent)}.active-press:active{transform:scale(.98) translateZ(0)}.focus-ring:focus-visible{outline:2px solid var(--ring);outline-offset:2px}.backdrop-blur-sm{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.backdrop-blur-md{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.backdrop-blur-lg{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}.backdrop-blur-xl{backdrop-filter:blur(32px);-webkit-backdrop-filter:blur(32px)}.backdrop-blur-none{backdrop-filter:none;-webkit-backdrop-filter:none}.glass-panel{background:color-mix(in srgb,var(--background, #0c0c0c) 80%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid color-mix(in srgb,var(--border, rgba(255, 255, 255, .1)) 50%,transparent)}.glass-panel-dark{background:color-mix(in srgb,rgba(16,16,24,.86) 90%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid rgba(255,255,255,.08);box-shadow:0 28px 70px #00000080}.glass-panel-light{background:color-mix(in srgb,rgba(255,255,255,.8) 90%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(0,0,0,.1)}.glass-panel-brand{background:color-mix(in srgb,var(--background, #0c0c0c) 85%,var(--color-brand, #ff7900) 5%);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}.stagger-delay-1{animation-delay:80ms}.stagger-delay-2{animation-delay:.16s}.stagger-delay-3{animation-delay:.24s}.stagger-delay-4{animation-delay:.32s}.stagger-delay-5{animation-delay:.4s}.stagger-delay-6{animation-delay:.48s}.stagger-delay-7{animation-delay:.56s}.stagger-delay-8{animation-delay:.64s}.stagger-delay-9{animation-delay:.72s}.stagger-delay-10{animation-delay:.8s}.transition-delay-1{transition-delay:80ms}.transition-delay-2{transition-delay:.16s}.transition-delay-3{transition-delay:.24s}.transition-delay-4{transition-delay:.32s}.transition-delay-5{transition-delay:.4s}@media (prefers-reduced-motion: reduce){.transition-smooth,.transition-fast,.transition-slow,.transition-transform,.transition-transform-fast,.transition-opacity,.transition-opacity-fast,.transition-colors,.hover-lift,.hover-scale,.hover-glow{transition:none!important}.hover-scale:hover,.active-press:active{transform:none!important}}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,var(--motion-distance-lg),0)}to{opacity:1;transform:translateZ(0)}}@keyframes fadeIn{0%{opacity:0;transform:translateZ(0)}to{opacity:1;transform:translateZ(0)}}@keyframes fadeInSoft{0%{opacity:0;transform:translate3d(0,var(--motion-distance-sm),0) scale(var(--motion-scale-soft-start))}to{opacity:1;transform:translateZ(0) scale(var(--motion-scale-soft-end))}}@keyframes slideUp{0%{transform:translate3d(0,var(--motion-distance-xl),0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes slideDown{0%{transform:translate3d(0,calc(var(--motion-distance-xl) * -1),0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes slideInLeft{0%{transform:translate3d(calc(var(--motion-distance-xl) * -1),0,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes slideInRight{0%{transform:translate3d(var(--motion-distance-xl),0,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes fadeInUpSoft{0%{opacity:0;transform:translate3d(0,var(--motion-distance-md),0) scale(var(--motion-scale-soft-start))}to{opacity:1;transform:translateZ(0) scale(var(--motion-scale-soft-end))}}@keyframes scale{0%{transform:scale(var(--motion-scale-pulse-min)) translateZ(0)}70%{transform:scale(var(--motion-scale-pop)) translateZ(0)}to{transform:scale(var(--motion-scale-soft-end)) translateZ(0)}}@keyframes scaleIn{0%{transform:scale(var(--motion-scale-soft-start)) translateZ(0);opacity:0}to{transform:scale(var(--motion-scale-soft-end)) translateZ(0);opacity:1}}@keyframes fadeInScaleSoft{0%{opacity:0;transform:scale(var(--motion-scale-soft-start)) translateZ(0)}to{opacity:1;transform:scale(var(--motion-scale-soft-end)) translateZ(0)}}@keyframes pulse{0%,to{transform:scale(var(--motion-scale-soft-end)) translateZ(0);opacity:1}50%{transform:scale(var(--motion-scale-pop)) translateZ(0);opacity:.8}}@keyframes hoverLift{0%{transform:translateY(0) translateZ(0)}to{transform:translateY(-2px) translateZ(0)}}@keyframes glowAccent{0%,to{text-shadow:0 1px 2px rgba(0,0,0,.08)}50%{text-shadow:0 2px 6px rgba(255,121,0,.25)}}@keyframes valueEmphasize{0%,to{color:var(--card-text-primary)}50%{color:color-mix(in srgb,var(--card-text-primary) 85%,var(--color-brand) 15%)}}@keyframes glowPulse{0%,to{opacity:.6;filter:blur(25px)}50%{opacity:1;filter:blur(30px)}}@keyframes glowDrift{0%,to{opacity:.7;transform:translateZ(0)}25%{opacity:.8;transform:translate3d(5px,-5px,0)}50%{opacity:.9;transform:translate3d(0,5px,0)}75%{opacity:.8;transform:translate3d(-5px,0,0)}}@keyframes shimmer{0%,to{opacity:.5}50%{opacity:.8}}@keyframes spin{0%{transform:rotate(0) translateZ(0)}to{transform:rotate(360deg) translateZ(0)}}@keyframes spinSlow{0%{transform:rotate(0) translateZ(0)}to{transform:rotate(360deg) translateZ(0)}}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(calc(var(--motion-distance-sm) * -1),0,0)}20%,40%,60%,80%{transform:translate3d(var(--motion-distance-sm),0,0)}}@keyframes bounce{0%,to{transform:translateZ(0);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:translate3d(0,calc(var(--motion-distance-lg) * -1),0);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes sectionEnter{0%{opacity:0;transform:translate3d(0,20px,0) scale(.95)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes sectionStreamingGlow{0%,to{box-shadow:0 0 #ff790000}50%{box-shadow:0 0 12px 2px #ff790026}}@keyframes fieldEnter{0%{opacity:0;transform:translate3d(0,10px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes itemEnter{0%{opacity:0;transform:translate3d(-10px,0,0)}to{opacity:1;transform:translateZ(0)}}@keyframes sparkTravel{0%{top:-1.5px;left:0}25%{top:-1.5px;left:calc(100% - 1.5px)}50%{top:calc(100% - 1.5px);left:calc(100% - 1.5px)}75%{top:calc(100% - 1.5px);left:0}to{top:-1.5px;left:0}}@keyframes sectionMagicAppear{0%{opacity:0;transform:translateY(20px) scale(.95);filter:blur(8px)}60%{opacity:1;transform:translateY(-4px) scale(1.02);filter:blur(0)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}@keyframes shimmerSweep{0%{transform:translate(-100%);opacity:1}to{transform:translate(100%);opacity:0}}@keyframes innerFlash{0%{box-shadow:inset 0 0 30px #ff950066}to{box-shadow:inset 0 0 #ff950000}}@keyframes innerBorderPulse{0%,to{box-shadow:inset 0 0 0 1px #ff79001a}50%{box-shadow:inset 0 0 0 1px #ff79004d}}@keyframes cursorBlink{0%,50%{opacity:1}51%,to{opacity:0}}@keyframes sectionGlowPulse{0%,to{box-shadow:0 0 10px #ff790026}50%{box-shadow:0 0 20px #ff790059}}@keyframes fieldEnterBounce{0%{opacity:0;transform:translateY(12px) scale(.98)}60%{opacity:1;transform:translateY(-2px) scale(1.01)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes stateFade{0%{opacity:0;transform:translate3d(0,8px,0) scale(.98)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes stateSlideOut{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-10px,0)}}@keyframes stateSlideIn{0%{opacity:0;transform:translate3d(0,10px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes errorShake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-4px,0,0)}20%,40%,60%,80%{transform:translate3d(4px,0,0)}}@keyframes errorPulse{0%,to{opacity:1;box-shadow:0 0 #ef444466}50%{opacity:.9;box-shadow:0 0 0 8px #ef444400}}@keyframes shimmerWave{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeletonPulse{0%,to{opacity:.6}50%{opacity:1}}@keyframes fadeInScale{0%{opacity:0;transform:scale(.98) translateZ(0)}to{opacity:1;transform:scale(1) translateZ(0)}}@keyframes pulseGlow{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes float{0%,to{transform:translateY(0) translateZ(0)}50%{transform:translateY(-10px) translateZ(0)}}@keyframes pulseRing{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.3)}}@keyframes textShimmer{0%,to{background-position:-200% 0}50%{background-position:200% 0}}@keyframes waveSlide{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes sectionPulse{0%,to{transform:scale(1)}50%{transform:scale(1.01)}}@keyframes sectionBorderFade{0%{opacity:1;box-shadow:0 0 20px color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent)}to{opacity:0;box-shadow:0 0 0 transparent}}@keyframes newSectionGlow{0%{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent);box-shadow:0 0 25px color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent)}to{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent)}}@keyframes dotPulse{0%,to{transform:translate(-50%,-50%) scale(1);opacity:.6}50%{transform:translate(-50%,-50%) scale(1.5);opacity:.3}}@keyframes ringExpand{0%{transform:translate(-50%,-50%) scale(.8);opacity:.2}50%{transform:translate(-50%,-50%) scale(1);opacity:.1}to{transform:translate(-50%,-50%) scale(1.2);opacity:0}}@keyframes generatingBgPulse{0%,to{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%)}50%{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 12%,transparent) 0%,transparent 70%)}}@keyframes cardGeneratingPulse{0%,to{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent),0 4px 20px #00000026,0 0 0 transparent}50%{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent),0 4px 20px #00000026,0 0 30px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}}@keyframes gradientPulse{0%,to{opacity:.6;transform:translate(-50%,-50%) scale(1)}50%{opacity:.9;transform:translate(-50%,-50%) scale(1.05)}}@keyframes ringPulse{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}@keyframes iconFloat{0%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-6px) rotate(-3deg)}50%{transform:translateY(-10px) rotate(0)}75%{transform:translateY(-6px) rotate(3deg)}}@keyframes particleFloat{0%,to{transform:translateY(0) translate(0) scale(1);opacity:.3}25%{transform:translateY(-30px) translate(20px) scale(1.2);opacity:.7}50%{transform:translateY(-60px) translate(-10px) scale(.8);opacity:1}75%{transform:translateY(-30px) translate(15px) scale(1.1);opacity:.6}}@keyframes spinnerRotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spinnerDash{0%{stroke-dasharray:1,125.6;stroke-dashoffset:0}50%{stroke-dasharray:94.2,125.6;stroke-dashoffset:-31.4}to{stroke-dasharray:94.2,125.6;stroke-dashoffset:-125.6}}@keyframes textShimmerFlow{0%,to{background-position:-200% 0}50%{background-position:200% 0}}@keyframes rippleEffect{0%{transform:scale(0);opacity:.6}to{transform:scale(2.5);opacity:0}}.animate-fade-in{animation:fadeIn var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-up{animation:fadeInUp var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-soft{animation:fadeInSoft var(--duration-slow) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-up-soft{animation:fadeInUpSoft var(--duration-slow) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-fade-in-scale-soft{animation:fadeInScaleSoft var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-up{animation:slideUp var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-down{animation:slideDown var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-in-left{animation:slideInLeft var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-slide-in-right{animation:slideInRight var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-scale{animation:scale var(--duration-moderate) var(--ease-spring);animation-fill-mode:var(--animation-fill-mode)}.animate-scale-in{animation:scaleIn var(--duration-moderate) var(--ease-out-smooth);animation-fill-mode:var(--animation-fill-mode)}.animate-pulse{animation:pulse var(--duration-slow) var(--ease-in-out-smooth) infinite}.animate-spin{animation:spin 1s linear infinite}.animate-spin-slow{animation:spinSlow 3s linear infinite}.animate-shake{animation:shake var(--duration-slow) var(--ease-in-out-smooth)}.animate-bounce{animation:bounce 1s infinite}.section-streaming{animation:sectionEnter .4s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(0,20px,0) scale(.95);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px;contain:layout style paint;transform-origin:center center}.section-entered{opacity:1;transform:translateZ(0) scale(1);will-change:auto;backface-visibility:visible;perspective:none}.section-streaming-glow{animation:sectionStreamingGlow 1.5s ease-in-out infinite}.section-stagger-0{animation-delay:0ms}.section-stagger-1{animation-delay:80ms}.section-stagger-2{animation-delay:.16s}.section-stagger-3{animation-delay:.24s}.section-stagger-4{animation-delay:.32s}.section-stagger-5{animation-delay:.4s}.section-stagger-6{animation-delay:.48s}.section-stagger-7{animation-delay:.56s}.section-stagger-8{animation-delay:.64s}.section-stagger-9{animation-delay:.72s}.section-stagger-10{animation-delay:.8s}.field-streaming{animation:fieldEnter .3s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(0,10px,0);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px;contain:layout style paint;transform-origin:center center}.field-entered{opacity:1;transform:translateZ(0);will-change:auto;backface-visibility:visible;perspective:none}.item-streaming{animation:itemEnter .35s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(-10px,0,0);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px;contain:layout style paint;transform-origin:center center}.item-entered{opacity:1;transform:translateZ(0);will-change:auto;backface-visibility:visible;perspective:none}.field-stagger-0{animation-delay:0ms}.field-stagger-1{animation-delay:40ms}.field-stagger-2{animation-delay:80ms}.field-stagger-3{animation-delay:.12s}.field-stagger-4{animation-delay:.16s}.field-stagger-5{animation-delay:.2s}.field-stagger-6{animation-delay:.24s}.field-stagger-7{animation-delay:.28s}.field-stagger-8{animation-delay:.32s}.field-stagger-9{animation-delay:.36s}.field-stagger-10{animation-delay:.4s}.field-stagger-11{animation-delay:.44s}.field-stagger-12{animation-delay:.48s}.field-stagger-13{animation-delay:.52s}.field-stagger-14{animation-delay:.56s}.field-stagger-15{animation-delay:.6s}.item-stagger-0{animation-delay:0ms}.item-stagger-1{animation-delay:40ms}.item-stagger-2{animation-delay:80ms}.item-stagger-3{animation-delay:.12s}.item-stagger-4{animation-delay:.16s}.item-stagger-5{animation-delay:.2s}.item-stagger-6{animation-delay:.24s}.item-stagger-7{animation-delay:.28s}.item-stagger-8{animation-delay:.32s}.item-stagger-9{animation-delay:.36s}.item-stagger-10{animation-delay:.4s}.item-stagger-11{animation-delay:.44s}.item-stagger-12{animation-delay:.48s}.item-stagger-13{animation-delay:.52s}.item-stagger-14{animation-delay:.56s}.item-stagger-15{animation-delay:.6s}.state-transition-enter{animation:stateFade .4s cubic-bezier(.4,0,.2,1) forwards;opacity:0;transform:translate3d(0,8px,0) scale(.98);will-change:transform,opacity;backface-visibility:hidden;perspective:1000px}.state-transition-exit{animation:stateSlideOut .3s cubic-bezier(.4,0,.2,1) forwards;will-change:transform,opacity;backface-visibility:hidden;perspective:1000px}.state-entered{opacity:1;transform:translateZ(0) scale(1);will-change:auto;backface-visibility:visible;perspective:none}.error-shake{animation:errorShake .5s cubic-bezier(.4,0,.2,1)}.error-pulse{animation:errorPulse 2s ease-in-out infinite}.skeleton-shimmer{background:linear-gradient(90deg,var(--muted, rgba(255, 255, 255, .1)) 0%,var(--muted-foreground, rgba(255, 255, 255, .2)) 20%,var(--muted, rgba(255, 255, 255, .1)) 40%,var(--muted, rgba(255, 255, 255, .1)) 100%);background-size:200% 100%;animation:shimmerWave 1.5s ease-in-out infinite}.skeleton-pulse{animation:skeletonPulse 2s ease-in-out infinite}.animate-delay-1{animation-delay:calc(var(--stagger-delay-base) * 1)}.animate-delay-2{animation-delay:calc(var(--stagger-delay-base) * 2)}.animate-delay-3{animation-delay:calc(var(--stagger-delay-base) * 3)}.animate-delay-4{animation-delay:calc(var(--stagger-delay-base) * 4)}.animate-delay-5{animation-delay:calc(var(--stagger-delay-base) * 5)}.animate-fade-in-scale{animation:fadeInScale .5s cubic-bezier(.4,0,.2,1);animation-fill-mode:var(--animation-fill-mode)}.animate-pulse-glow{animation:pulseGlow 2s ease-in-out infinite}.animate-float{animation:float 3s ease-in-out infinite}.animate-pulse-ring{animation:pulseRing 2s ease-in-out infinite}.animate-text-shimmer{background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:textShimmer 2s ease-in-out infinite}.animate-wave-slide{background:linear-gradient(90deg,transparent 0%,var(--color-brand, #ff7900) 25%,var(--color-brand, #ff7900) 75%,transparent 100%);background-size:200% 100%;animation:waveSlide 2s ease-in-out infinite}.animate-section-pulse{animation:sectionPulse 2s ease-out}.animate-section-border-fade{animation:sectionBorderFade 2s ease-out forwards}.animate-new-section-glow{animation:newSectionGlow .6s ease-out forwards}.animate-dot-pulse{animation:dotPulse 2s ease-in-out infinite}.animate-ring-expand{animation:ringExpand 2s ease-in-out infinite}.animate-generating-pulse{animation:generatingBgPulse 3s ease-in-out infinite,cardGeneratingPulse 2s ease-in-out infinite}.animate-gradient-pulse{animation:gradientPulse 5s ease-in-out infinite}.animate-ring-pulse{animation:ringPulse 3s ease-in-out infinite}.animate-icon-float{animation:iconFloat 4s ease-in-out infinite}.animate-particle-float{animation:particleFloat 4s ease-in-out infinite}.animate-spinner{animation:spinnerRotate 1.5s linear infinite}.btn-ripple{position:relative;overflow:hidden}.btn-ripple:after{content:\"\";position:absolute;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);background:radial-gradient(circle,color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent) 0%,transparent 70%);pointer-events:none;border-radius:inherit;opacity:0}.btn-ripple:active:after{animation:rippleEffect .6s ease-out}.animate-cursor-blink{animation:cursorBlink .8s step-end infinite}.animate-spark-travel{position:relative}.animate-spark-travel:before{content:\"\";position:absolute;width:3px;height:3px;background:var(--color-brand, #ff7900);border-radius:50%;box-shadow:0 0 6px 1px color-mix(in srgb,var(--color-brand, #ff7900) 80%,transparent);animation:sparkTravel 3s linear infinite;pointer-events:none;z-index:10}.section-highlight:after{content:\"\";position:absolute;inset:-4px;border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent);border-radius:14px;pointer-events:none;animation:sectionBorderFade 2s ease-out forwards}.will-animate{will-change:transform,opacity}.will-animate-transform{will-change:transform}.will-animate-opacity{will-change:opacity}.animation-complete{will-change:auto}.gpu-accelerated{transform:translateZ(0);backface-visibility:hidden;perspective:1000px}@media (prefers-reduced-motion: reduce){.animate-fade-in,.animate-fade-in-up,.animate-fade-in-scale,.animate-slide-up,.animate-slide-down,.animate-slide-in-left,.animate-slide-in-right,.animate-scale,.animate-scale-in,.animate-pulse,.animate-pulse-glow,.animate-float,.animate-pulse-ring,.animate-text-shimmer,.animate-wave-slide,.animate-section-pulse,.animate-section-border-fade,.animate-new-section-glow,.animate-dot-pulse,.animate-ring-expand,.animate-generating-pulse,.animate-gradient-pulse,.animate-ring-pulse,.animate-icon-float,.animate-particle-float,.animate-spinner,.animate-cursor-blink,.animate-spark-travel,.animate-spin,.animate-spin-slow,.animate-shake,.animate-bounce,.section-streaming,.section-streaming-glow,.section-highlight,.field-streaming,.item-streaming,.state-transition-enter,.state-transition-exit,.error-shake,.error-pulse,.skeleton-shimmer,.skeleton-pulse,.btn-ripple{animation:none!important;transition:none!important;opacity:1!important;transform:none!important}.animate-spark-travel:before,.section-highlight:after,.btn-ripple:after{animation:none!important;display:none}.animate-text-shimmer{background:none!important;-webkit-text-fill-color:var(--foreground, currentColor)!important}.will-animate,.will-animate-transform,.will-animate-opacity,.section-streaming{will-change:auto!important}}.tilt-container{transform:perspective(1000px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) scale(var(--tilt-scale, 1)) translateZ(0)!important;transition:box-shadow .2s cubic-bezier(.2,0,.2,1);transform-style:preserve-3d;backface-visibility:hidden;position:relative;border-radius:var(--card-border-radius);contain:layout style;isolation:isolate;will-change:transform;transform-origin:center center}.tilt-container:not(:hover){transition:box-shadow .8s cubic-bezier(.22,.61,.36,1);will-change:auto}.tilt-container:hover{will-change:transform;box-shadow:0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, .375));transition:box-shadow .2s cubic-bezier(.2,0,.2,1)}.glow-container{position:relative;filter:drop-shadow(0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, .225)));transition:filter .2s cubic-bezier(.4,0,.2,1);will-change:filter;contain:layout style;isolation:isolate;transform:translateZ(0)}.glow-container:hover{will-change:filter;transition:filter .2s cubic-bezier(.4,0,.2,1)}.glow-container:not(:hover){will-change:auto;transition:filter .5s cubic-bezier(.25,.46,.45,.94)}.card-reflection{position:absolute;inset:0;background:transparent;opacity:var(--reflection-opacity, .08);transition:opacity .2s cubic-bezier(.4,0,.2,1);pointer-events:none;border-radius:inherit;will-change:opacity;backface-visibility:hidden}.tilt-container:not(:hover) .card-reflection{transition:opacity .5s cubic-bezier(.25,.46,.45,.94)}.tilt-wrapper{transform-style:preserve-3d;transition:transform .3s cubic-bezier(.4,0,.2,1);backface-visibility:hidden;contain:layout style}.tilt-content{transform-style:preserve-3d;backface-visibility:hidden}.tilt-glare{position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:transparent;opacity:var(--glare-opacity, 0);transition:opacity var(--glow-duration) var(--ease-out-smooth);will-change:opacity;backface-visibility:hidden}@media (max-width: 768px){.tilt-container{transform:perspective(800px) rotateX(calc(var(--tilt-x, 0deg) * .7)) rotateY(calc(var(--tilt-y, 0deg) * .7)) scale(var(--tilt-scale, 1)) translateZ(0)}.tilt-container:hover{box-shadow:0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, .375))}}.ai-card-surface--fullscreen .tilt-container{transform:perspective(1000px) translateZ(0)!important;box-shadow:none!important;will-change:auto!important}.ai-card-surface--fullscreen .glow-container{filter:none!important;will-change:auto!important}.ai-card-surface--fullscreen .card-reflection,.ai-card-surface--fullscreen .tilt-glare{opacity:0!important;display:none}@media (prefers-reduced-motion: reduce){.tilt-container,.tilt-wrapper{transform:none!important;transition:none!important}.tilt-container:hover{box-shadow:none!important}.glow-container{filter:none!important;transition:none!important}.card-reflection,.tilt-glare{opacity:0!important;transition:none!important}.tilt-container,.glow-container,.card-reflection,.tilt-glare{will-change:auto!important}}@supports (grid-template-rows: masonry){.masonry-container--native{display:grid!important;grid-template-columns:repeat(auto-fill,minmax(var(--section-grid-min-width, 260px),1fr));grid-template-rows:masonry;gap:var(--section-card-gap, 12px);align-tracks:stretch}.masonry-container--native .masonry-item{position:relative!important;left:auto!important;top:auto!important;width:auto!important}}.masonry-container--grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--section-grid-min-width, 260px),1fr));grid-auto-rows:minmax(100px,auto);grid-auto-flow:dense;gap:var(--section-card-gap, 12px)}.masonry-container--grid .masonry-item{position:relative}.masonry-container--grid .masonry-item[data-col-span=\"2\"]{grid-column:span 2}.masonry-container--grid .masonry-item[data-col-span=\"3\"]{grid-column:span 3}.masonry-container--grid .masonry-item[data-col-span=\"4\"]{grid-column:span 4}@media (max-width: 600px){.masonry-container--grid .masonry-item[data-col-span]{grid-column:span 1}}@supports (grid-template-rows: subgrid){.masonry-container--subgrid .masonry-item{display:grid;grid-template-rows:subgrid;grid-row:span 2}.masonry-container--subgrid .masonry-item .ai-section__header{grid-row:1}.masonry-container--subgrid .masonry-item .ai-section__body{grid-row:2}}.masonry-grid-container{position:relative;width:100%;height:auto;min-height:200px;will-change:height;transform:translateZ(0)}.masonry-grid-container .masonry-item{position:absolute;width:auto;height:auto;box-sizing:border-box;transform-origin:top left;will-change:transform,opacity;backface-visibility:hidden}.masonry-item{height:fit-content;min-height:fit-content;width:100%;break-inside:avoid;page-break-inside:avoid;display:flex;flex-direction:column;overflow:visible;box-sizing:border-box;overflow-wrap:break-word;word-wrap:break-word;transition:top .4s cubic-bezier(.4,0,.2,1),left .4s cubic-bezier(.4,0,.2,1),width .4s cubic-bezier(.4,0,.2,1),opacity .35s ease-out;border:var(--section-border)!important;border-radius:var(--section-border-radius)!important;background:var(--section-surface, var(--section-background, var(--card-section-bg)))!important;box-shadow:var(--section-box-shadow)!important;transition:var(--section-transition, none)!important;animation:var(--section-entrance-animation, none);will-change:opacity,transform;padding:var(--section-container-padding)!important;gap:var(--section-card-gap)}.masonry-item:hover{background:var(--section-surface-hover, var(--section-background-hover, var(--section-surface)))!important;border-color:var(--section-border-hover, var(--section-border))!important;box-shadow:var(--section-box-shadow-hover, var(--section-box-shadow))!important}.masonry-item>*{height:auto!important;min-height:fit-content!important;max-height:none!important}.masonry-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:12px;grid-auto-rows:minmax(100px,auto)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:12px}.masonry-item--vertical .ai-section__body{display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;gap:var(--section-card-gap)!important}.masonry-item--horizontal .ai-section__body{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important;align-items:flex-start!important;gap:var(--section-card-gap)!important}.masonry-item--horizontal .ai-section__body>*{flex:1 1 200px!important;min-width:180px!important;max-width:100%!important}.masonry-item--horizontal .contact-card,.masonry-item--horizontal .network-card{flex:1 1 220px!important;min-width:200px!important;max-width:320px!important}.masonry-item--horizontal .analytics-metric,.masonry-item--horizontal .financial-metric{flex:1 1 160px!important;min-width:140px!important;max-width:260px!important}.masonry-item--horizontal .overview-card{flex:1 1 180px!important;min-width:160px!important;max-width:280px!important}.masonry-item--auto .ai-section__body{display:flex!important;flex-direction:column!important;flex-wrap:wrap!important;gap:var(--section-card-gap)!important}@container (min-width: 500px){.masonry-item--auto .ai-section__body{flex-direction:row!important}.masonry-item--auto .ai-section__body>*{flex:1 1 200px!important;min-width:180px!important}}@media (max-width: 480px){.masonry-item--horizontal .ai-section__body{flex-direction:column!important;flex-wrap:nowrap!important}.masonry-item--horizontal .ai-section__body>*{flex:1 1 auto!important;min-width:100%!important;max-width:100%!important}}.masonry-item{container-type:inline-size;container-name:section}.masonry-item--priority-critical:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);border-radius:0 2px 2px 0}.masonry-item--sticky{position:sticky!important;top:0!important;z-index:10!important;background:var(--card-background)!important}.masonry-item--flex-grow{flex-grow:1!important}@media (prefers-reduced-motion: reduce){.masonry-item,.masonry-grid-container .masonry-item{transition:none}}.masonry-container--compact{--section-card-gap: 8px}.masonry-container--compact .masonry-item{padding:calc(var(--section-container-padding) * .75)!important}.masonry-container--comfortable{--section-card-gap: 16px}.masonry-container--comfortable .masonry-item{padding:calc(var(--section-container-padding) * 1.25)!important}.masonry-container--track-aligned{display:grid;grid-template-columns:repeat(var(--masonry-columns, 4),1fr);grid-auto-rows:minmax(50px,auto);gap:var(--section-card-gap, 12px)}.masonry-container--track-aligned .masonry-item{position:relative!important;left:auto!important;top:auto!important;width:auto!important;align-self:start}.masonry-container--debug{background-image:linear-gradient(to right,rgba(255,121,0,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,121,0,.1) 1px,transparent 1px);background-size:calc(100% / var(--masonry-columns, 4)) 50px}.masonry-container--debug .masonry-item{outline:2px dashed rgba(255,121,0,.5)!important;outline-offset:-2px}.masonry-container--debug .masonry-item:after{content:attr(data-col-span) \" col\";position:absolute;top:4px;right:4px;background:#ff7900e6;color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px;z-index:100;pointer-events:none}.masonry-container--debug .masonry-item[data-priority=critical]:before{content:\"\\2605 Critical\";position:absolute;top:4px;left:4px;background:#ef4444;color:#fff;font-size:9px;font-weight:600;padding:2px 4px;border-radius:3px;z-index:100}.masonry-container--debug .masonry-item[data-priority=important]:before{content:\"\\25c6 Important\";position:absolute;top:4px;left:4px;background:#f59e0b;color:#fff;font-size:9px;font-weight:600;padding:2px 4px;border-radius:3px;z-index:100}.masonry-container--debug .masonry-item[data-priority=optional]:before{content:\"\\25cb Optional\";position:absolute;top:4px;left:4px;background:#6b7280;color:#fff;font-size:9px;font-weight:600;padding:2px 4px;border-radius:3px;z-index:100}.masonry-container--stagger-animations .masonry-item{animation:masonry-item-appear .4s cubic-bezier(.4,0,.2,1) backwards}.masonry-container--stagger-animations .masonry-item:nth-child(1){animation-delay:0ms}.masonry-container--stagger-animations .masonry-item:nth-child(2){animation-delay:50ms}.masonry-container--stagger-animations .masonry-item:nth-child(3){animation-delay:.1s}.masonry-container--stagger-animations .masonry-item:nth-child(4){animation-delay:.15s}.masonry-container--stagger-animations .masonry-item:nth-child(5){animation-delay:.2s}.masonry-container--stagger-animations .masonry-item:nth-child(6){animation-delay:.25s}.masonry-container--stagger-animations .masonry-item:nth-child(7){animation-delay:.3s}.masonry-container--stagger-animations .masonry-item:nth-child(8){animation-delay:.35s}.masonry-container--stagger-animations .masonry-item:nth-child(9){animation-delay:.4s}.masonry-container--stagger-animations .masonry-item:nth-child(10){animation-delay:.45s}.masonry-container--stagger-animations .masonry-item:nth-child(11){animation-delay:.5s}.masonry-container--stagger-animations .masonry-item:nth-child(12){animation-delay:.55s}.masonry-container--stagger-animations .masonry-item:nth-child(13){animation-delay:.6s}.masonry-container--stagger-animations .masonry-item:nth-child(14){animation-delay:.65s}.masonry-container--stagger-animations .masonry-item:nth-child(15){animation-delay:.7s}.masonry-container--stagger-animations .masonry-item:nth-child(16){animation-delay:.75s}.masonry-container--stagger-animations .masonry-item:nth-child(17){animation-delay:.8s}.masonry-container--stagger-animations .masonry-item:nth-child(18){animation-delay:.85s}.masonry-container--stagger-animations .masonry-item:nth-child(19){animation-delay:.9s}.masonry-container--stagger-animations .masonry-item:nth-child(20){animation-delay:.95s}@keyframes masonry-item-appear{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.masonry-item--transitioning{will-change:transform,left,top,width;transition:top .35s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1),transform .35s cubic-bezier(.4,0,.2,1),opacity .25s ease-out}.masonry-container--initializing .masonry-item{transition:none!important}@media (prefers-reduced-motion: reduce){.masonry-item,.masonry-item--transitioning{transition:none!important;animation:none!important}}.masonry-container--balanced:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:2px;background:linear-gradient(to right,transparent,rgba(var(--primary-rgb, 59, 130, 246),.3),transparent);opacity:0;transition:opacity .3s ease}.masonry-container--balanced:hover:after{opacity:1}.masonry-container--debug-balance .masonry-item{position:relative}.masonry-container--debug-balance .masonry-item:after{content:attr(data-column);position:absolute;top:-20px;left:50%;transform:translate(-50%);background:#0009;color:#fff;font-size:10px;padding:2px 6px;border-radius:4px;pointer-events:none}.masonry-skeleton{position:relative;background:linear-gradient(90deg,var(--skeleton-base, rgba(200, 200, 200, .2)) 25%,var(--skeleton-highlight, rgba(200, 200, 200, .4)) 50%,var(--skeleton-base, rgba(200, 200, 200, .2)) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s infinite;border-radius:var(--section-border-radius, 8px);overflow:hidden}.masonry-skeleton--single{width:calc((100% - var(--masonry-gap, 12px) * 3) / 4);height:180px}.masonry-skeleton--double{width:calc((100% - var(--masonry-gap, 12px) * 3) / 4 * 2 + var(--masonry-gap, 12px));height:200px}.masonry-skeleton--triple{width:calc((100% - var(--masonry-gap, 12px) * 3) / 4 * 3 + var(--masonry-gap, 12px) * 2);height:220px}.masonry-skeleton--full{width:100%;height:250px}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.masonry-skeleton__header{height:24px;width:60%;margin:16px;background:#0000001a;border-radius:4px}.masonry-skeleton__line{height:16px;margin:8px 16px;background:#00000014;border-radius:4px}.masonry-skeleton__line:nth-child(2){width:90%}.masonry-skeleton__line:nth-child(3){width:75%}.masonry-skeleton__line:nth-child(4){width:60%}.masonry-container--loading{min-height:400px}.masonry-container--loading .masonry-skeleton{position:absolute}.masonry-container--loading .masonry-skeleton:nth-child(1){animation-delay:0ms}.masonry-container--loading .masonry-skeleton:nth-child(2){animation-delay:.1s}.masonry-container--loading .masonry-skeleton:nth-child(3){animation-delay:.2s}.masonry-container--loading .masonry-skeleton:nth-child(4){animation-delay:.3s}.masonry-container--loading .masonry-skeleton:nth-child(5){animation-delay:.4s}.masonry-container--loading .masonry-skeleton:nth-child(6){animation-delay:.5s}.masonry-container--loading .masonry-skeleton:nth-child(7){animation-delay:.6s}.masonry-container--loading .masonry-skeleton:nth-child(8){animation-delay:.7s}.masonry-container--preserve-order .masonry-item{order:var(--item-order, 0)}.masonry-container--preserve-order.masonry-container--debug .masonry-item:before{content:\"#\" attr(data-index);position:absolute;top:4px;right:4px;background:#000000b3;color:#fff;font-size:10px;padding:2px 6px;border-radius:4px;z-index:100}.masonry-item:focus-visible{outline:2px solid var(--focus-color, #3b82f6);outline-offset:2px;z-index:10}.masonry-container--show-reading-order .masonry-item:after{content:attr(data-reading-order);position:absolute;bottom:4px;right:4px;background:var(--reading-order-bg, #6366f1);color:#fff;font-size:12px;font-weight:700;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;z-index:100}.masonry-container--show-reading-order .masonry-item[data-next-id]:before{content:\"\";position:absolute;bottom:16px;right:-6px;width:20px;height:2px;background:var(--reading-order-line, rgba(99, 102, 241, .3));z-index:99}.masonry-skip-link{position:absolute;top:-9999px;left:-9999px;z-index:1000;padding:12px 24px;background:var(--skip-link-bg, #1e40af);color:#fff;text-decoration:none;border-radius:4px}.masonry-skip-link:focus{top:12px;left:12px}.masonry-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.feature-grid{display:grid;gap:var(--feature-grid-gap, 1.5rem);width:100%;grid-template-columns:1fr}@media (min-width: 640px){.feature-grid--2col{grid-template-columns:repeat(2,1fr)}}@media (min-width: 640px){.feature-grid--3col{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.feature-grid--3col{grid-template-columns:repeat(3,1fr)}}@media (min-width: 640px){.feature-grid--4col{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.feature-grid--4col{grid-template-columns:repeat(3,1fr)}}@media (min-width: 1280px){.feature-grid--4col{grid-template-columns:repeat(4,1fr)}}.feature-grid--auto{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr))}.feature-grid--auto-lg{grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}.feature-grid--auto-sm{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr))}.feature-grid--gap-sm{--feature-grid-gap: .75rem;gap:var(--feature-grid-gap)}.feature-grid--gap-md{--feature-grid-gap: 1rem;gap:var(--feature-grid-gap)}.feature-grid--gap-lg{--feature-grid-gap: 2rem;gap:var(--feature-grid-gap)}.feature-grid--gap-xl{--feature-grid-gap: 3rem;gap:var(--feature-grid-gap)}.feature-grid__item{display:flex;flex-direction:column;min-width:0}.feature-grid__item--span-2{grid-column:span 2}@media (max-width: 639px){.feature-grid__item--span-2{grid-column:span 1}}.feature-grid__item--span-full{grid-column:1/-1}.hero-grid{display:grid;gap:1rem;width:100%;grid-template-columns:1fr}@media (min-width: 768px){.hero-grid{grid-template-columns:repeat(2,1fr);gap:1.5rem}}@media (min-width: 1024px){.hero-grid{grid-template-columns:repeat(3,1fr)}}.capabilities-grid{display:grid;gap:1.5rem;width:100%;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}@media (min-width: 1024px){.capabilities-grid{grid-template-columns:repeat(3,1fr)}}.features-grid{display:grid;gap:1.5rem;width:100%;grid-template-columns:1fr}@media (min-width: 640px){.features-grid{grid-template-columns:repeat(2,1fr);gap:2rem}}@media (min-width: 1024px){.features-grid{grid-template-columns:repeat(3,1fr)}}.feature-grid--dense{grid-auto-flow:dense}.feature-grid--center{justify-items:center}.feature-grid--stretch{align-items:stretch}.feature-grid--start{align-items:start}.feature-grid--animated .feature-grid__item{opacity:0;animation:fadeInUp .6s ease-out forwards}.feature-grid--animated .feature-grid__item:nth-child(1){animation-delay:0s}.feature-grid--animated .feature-grid__item:nth-child(2){animation-delay:.08s}.feature-grid--animated .feature-grid__item:nth-child(3){animation-delay:.16s}.feature-grid--animated .feature-grid__item:nth-child(4){animation-delay:.24s}.feature-grid--animated .feature-grid__item:nth-child(5){animation-delay:.32s}.feature-grid--animated .feature-grid__item:nth-child(6){animation-delay:.4s}.feature-grid--animated .feature-grid__item:nth-child(7){animation-delay:.48s}.feature-grid--animated .feature-grid__item:nth-child(8){animation-delay:.56s}.feature-grid--animated .feature-grid__item:nth-child(9){animation-delay:.64s}.feature-grid--animated .feature-grid__item:nth-child(10){animation-delay:.72s}.feature-grid--animated .feature-grid__item:nth-child(11){animation-delay:.8s}.feature-grid--animated .feature-grid__item:nth-child(12){animation-delay:.88s}@media (prefers-reduced-motion: reduce){.feature-grid--animated .feature-grid__item{opacity:1;animation:none}}@media (max-width: 639px){.feature-grid--mobile-1col{grid-template-columns:1fr!important}}@media (min-width: 640px) and (max-width: 1023px){.feature-grid--tablet-2col{grid-template-columns:repeat(2,1fr)!important}}.hero-card{position:relative;transition:all .35s cubic-bezier(.4,0,.2,1)}.hero-card:hover{transform:translateY(-6px);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}@media (prefers-reduced-motion: reduce){.hero-card{transition:none}.hero-card:hover{transform:none}}.hero-card--accent{position:relative;transition:all .35s cubic-bezier(.4,0,.2,1)}.hero-card--accent:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);border-radius:3px 0 0 3px;opacity:0;transition:opacity .35s ease}.hero-card--accent:hover{transform:translateY(-6px);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.hero-card--accent:hover:before{opacity:1}@media (prefers-reduced-motion: reduce){.hero-card--accent{transition:none}.hero-card--accent:hover{transform:none}}.hero-card--glow-line{position:relative;transition:all .35s cubic-bezier(.4,0,.2,1);overflow:hidden}.hero-card--glow-line:before{content:\"\";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent) 50%,transparent 100%);opacity:0;transition:opacity .35s ease}.hero-card--glow-line:after{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);opacity:0;transition:opacity .35s ease}.hero-card--glow-line:hover{transform:translateY(-6px);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.hero-card--glow-line:hover:before,.hero-card--glow-line:hover:after{opacity:1}@media (prefers-reduced-motion: reduce){.hero-card--glow-line{transition:none}.hero-card--glow-line:hover{transform:none}.hero-card--glow-line:before,.hero-card--glow-line:after{transition:none}}.hero-card-icon{transition:transform .35s ease,filter .35s ease}.hero-card:hover .hero-card-icon,.hero-feature-card:hover .hero-card-icon,.feature-card:hover .hero-card-icon,[class*=card]:hover .hero-card-icon{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.hero-card-icon{transition:none}.hero-card:hover .hero-card-icon,.hero-feature-card:hover .hero-card-icon,.feature-card:hover .hero-card-icon,[class*=card]:hover .hero-card-icon{transform:none;filter:none}}.icon-hover{transition:transform .35s ease,filter .35s ease}.icon-hover:hover{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.icon-hover{transition:none}.icon-hover:hover{transform:none;filter:none}}.hero-feature-card{position:relative;border-radius:var(--card-border-radius, 1rem);border:1px solid var(--border, rgba(255, 255, 255, .08));background:var(--card-background, rgba(20, 20, 20, .6));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:1.5rem;transition:all .35s cubic-bezier(.4,0,.2,1)}.hero-feature-card:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--color-brand, #ff7900) 50%,transparent);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.hero-feature-card .hero-feature-card__icon{transition:transform .35s ease,filter .35s ease}.hero-feature-card:hover .hero-feature-card__icon{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.hero-feature-card{transition:none}.hero-feature-card:hover{transform:none}.hero-feature-card .hero-feature-card__icon{transition:none}.hero-feature-card:hover .hero-feature-card__icon{transform:none;filter:none}}.system-capability-card{position:relative;border-radius:var(--card-border-radius, 1rem);border:1px solid var(--border, rgba(255, 255, 255, .08));background:var(--card-background, rgba(20, 20, 20, .6));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:1.25rem;transition:all .35s cubic-bezier(.4,0,.2,1);animation:fadeInUp .6s ease-out backwards}.system-capability-card:nth-child(1){animation-delay:.08s}.system-capability-card:nth-child(2){animation-delay:.16s}.system-capability-card:nth-child(3){animation-delay:.24s}.system-capability-card:nth-child(4){animation-delay:.32s}.system-capability-card:nth-child(5){animation-delay:.4s}.system-capability-card:nth-child(6){animation-delay:.48s}.system-capability-card:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-brand, #ff7900);border-radius:3px 0 0 3px;opacity:0;transition:opacity .35s ease}.system-capability-card:after{content:\"\";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent) 50%,transparent 100%);opacity:0;transition:opacity .35s ease}.system-capability-card:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--color-brand, #ff7900) 50%,transparent);box-shadow:0 20px 40px color-mix(in srgb,var(--foreground, #000) 15%,transparent),0 0 0 1px color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent)}.system-capability-card:hover:before,.system-capability-card:hover:after{opacity:1}.system-capability-card .system-capability-card__icon{transition:transform .35s ease,filter .35s ease}.system-capability-card:hover .system-capability-card__icon{transform:scale(1.15) rotate(5deg);filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent))}@media (prefers-reduced-motion: reduce){.system-capability-card{animation:none;transition:none}.system-capability-card:hover{transform:none}.system-capability-card:before,.system-capability-card:after{transition:none}.system-capability-card .system-capability-card__icon{transition:none}.system-capability-card:hover .system-capability-card__icon{transform:none;filter:none}}.feature-card{position:relative;border-radius:var(--card-border-radius, 1rem);border:1px solid var(--border, rgba(255, 255, 255, .08));background:var(--card-background);padding:1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1)}.feature-card:hover{transform:translateY(-4px);box-shadow:0 10px 30px -10px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent)}.feature-card:hover .feature-card__icon{transform:scale(1.1)}.feature-card .feature-card__icon{transition:transform .3s ease}@media (prefers-reduced-motion: reduce){.feature-card{transition:none}.feature-card:hover{transform:none}.feature-card .feature-card__icon{transition:none}.feature-card:hover .feature-card__icon{transform:none}}.ai-card-surface.streaming-active{position:relative;border:1px solid rgba(255,121,0,.4);box-shadow:0 0 10px #ff790033,0 0 20px #ff79001a}.ai-card-surface.streaming-active:before{content:\"\";position:absolute;width:3px;height:3px;background:#ff9500;border-radius:50%;box-shadow:0 0 6px 1px #ff9500cc;animation:sparkTravel 3s linear infinite;pointer-events:none;z-index:10}.ai-card-surface.streaming-active .field-value,.ai-card-surface.streaming-active .item-title,.ai-card-surface.streaming-active .item-description,.ai-card-surface.streaming-active .section-title,.ai-card-surface.streaming-active .section-description,.ai-card-surface.streaming-active [class*=value],.ai-card-surface.streaming-active [class*=label]{transition:all .2s ease-out}.ai-card-surface.streaming-active [class*=value]:last-child:after,.ai-card-surface.streaming-active .field-value:last-child:after{content:\"\\258b\";display:inline-block;color:var(--color-brand, #ff7900);animation:cursorBlink .8s step-end infinite;margin-left:2px;font-weight:400}.ai-card-surface.streaming-active .masonry-item:not(.masonry-item--animating){animation:none!important}.ai-card-surface.streaming-active .masonry-item:not(.masonry-item--animating):after{animation:none!important;opacity:0!important}.ai-card-surface.streaming-active .masonry-item--animated,.ai-card-surface.streaming-active .masonry-item--animated *,.ai-card-surface.streaming-active .masonry-item--animated:before,.ai-card-surface.streaming-active .masonry-item--animated:after,.ai-card-surface.streaming-active .masonry-item[data-animated=true],.ai-card-surface.streaming-active .masonry-item[data-animated=true] *{animation:none!important;opacity:1!important;transform:none!important;filter:none!important}.ai-card-surface.streaming-active .masonry-item--animated:after,.ai-card-surface.streaming-active .masonry-item[data-animated=true]:after{display:none!important}.ai-card-surface.streaming-active .masonry-item--animating .section-card,.ai-card-surface.streaming-active .masonry-item--animating [class*=section-]>div{border-color:#ff79004d!important;box-shadow:0 0 15px #ff790040;animation:sectionGlowPulse .8s ease-out forwards;animation-iteration-count:1}.ai-card-surface.streaming-active .masonry-item--animating .section-card:hover{border-color:#ff790099!important;box-shadow:0 0 25px #ff790066}.ai-card-surface.streaming-active .masonry-item--animating .section-card{animation:innerFlash .6s ease-out forwards;animation-iteration-count:1}.ai-card-surface.streaming-active .masonry-item--animating .section-card:before{content:\"\";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px #ff790026;pointer-events:none;animation:innerBorderPulse .8s ease-out forwards;animation-iteration-count:1}.ai-card-surface.streaming-active .masonry-item--animated .section-card,.ai-card-surface.streaming-active .masonry-item--animated [class*=section-]>div,.ai-card-surface.streaming-active .masonry-item[data-animated=true] .section-card{animation:none!important;box-shadow:none!important;border-color:#ff790026!important}.ai-card-surface.streaming-active .masonry-item--animated .section-card:before,.ai-card-surface.streaming-active .masonry-item[data-animated=true] .section-card:before{animation:none!important;box-shadow:none!important}.ai-card-surface.streaming-active .masonry-item--animating{animation:sectionMagicAppear .7s cubic-bezier(.34,1.56,.64,1) forwards;animation-iteration-count:1;position:relative;overflow:hidden}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(1){animation-delay:0ms}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(2){animation-delay:80ms}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(3){animation-delay:.16s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(4){animation-delay:.24s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(5){animation-delay:.32s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(6){animation-delay:.4s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(7){animation-delay:.48s}.ai-card-surface.streaming-active .masonry-item--animating:nth-child(8){animation-delay:.56s}.ai-card-surface.streaming-active .masonry-item--animating:after{content:\"\";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,149,0,.15) 50%,transparent 70%);animation:shimmerSweep .8s ease-out forwards;animation-iteration-count:1;pointer-events:none;border-radius:inherit}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item){opacity:0;transform:translateY(12px);animation:fieldEnterBounce .45s ease forwards;animation-iteration-count:1;will-change:opacity,transform}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(1){animation-delay:0s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(2){animation-delay:.05s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(3){animation-delay:.1s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(4){animation-delay:.15s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(5){animation-delay:.2s}.ai-card-surface.streaming-active .masonry-item--animating :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item):nth-child(n+6){animation-delay:.24s}.ai-card-surface.streaming-active .masonry-item--animated :where(.info-row,.section-card,.list-card,.event-timeline__item,.product-card,.solutions-card,.contact-card,.network-card__item,.map-point,.text-reference-entry,.quote-card,.overview-card__item){animation:none!important;opacity:1!important;transform:none!important}.streaming-border-glow{position:relative;border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent),0 0 20px color-mix(in srgb,var(--color-brand, #ff7900) 10%,transparent)}.streaming-border-glow:before{content:\"\";position:absolute;width:3px;height:3px;background:var(--color-brand, #ff7900);border-radius:50%;box-shadow:0 0 6px 1px color-mix(in srgb,var(--color-brand, #ff7900) 80%,transparent);animation:sparkTravel 3s linear infinite;pointer-events:none;z-index:10}.typing-cursor:after{content:\"\\258b\";display:inline-block;color:var(--color-brand, #ff7900);animation:cursorBlink .8s step-end infinite;margin-left:2px;font-weight:400}.section-highlight{animation:sectionPulse 2s ease-out;position:relative}.section-highlight:after{content:\"\";position:absolute;inset:-4px;border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 60%,transparent);border-radius:var(--card-border-radius, 14px);pointer-events:none;animation:sectionBorderFade 2s ease-out forwards}.new-section-glow{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);box-shadow:0 0 15px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent);animation:newSectionGlow .6s ease-out forwards}.shimmer-text{background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:textShimmer 2s ease-in-out infinite}.wave-progress{position:absolute;bottom:0;left:0;right:0;height:4px;background:linear-gradient(90deg,transparent 0%,var(--color-brand, #ff7900) 25%,var(--color-brand, #ff7900) 75%,transparent 100%);background-size:200% 100%;animation:waveSlide 2s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.ai-card-surface.streaming-active,.ai-card-surface.streaming-active:before,.ai-card-surface.streaming-active:after,.ai-card-surface.streaming-active *,.streaming-border-glow,.streaming-border-glow:before,.typing-cursor:after,.section-highlight,.section-highlight:after,.new-section-glow,.shimmer-text,.wave-progress{animation:none!important;transition:none!important}.ai-card-surface.streaming-active [class*=value]:last-child:after,.ai-card-surface.streaming-active .field-value:last-child:after,.typing-cursor:after{content:none!important}.shimmer-text{background:none!important;-webkit-text-fill-color:currentColor!important}}:host{display:block;padding:8px;background:transparent!important;background-color:transparent!important}@media (max-width: 480px){:host{padding:4px}}.ai-card-surface{position:relative;display:flex;flex-direction:column;height:100%;overflow:visible;isolation:isolate;border:var(--ai-card-border, 1px solid rgba(255, 121, 0, .12))!important;border-width:1px!important;border-style:solid!important;border-radius:var(--ai-card-border-radius)!important;background:var(--section-item-background)!important;box-shadow:var(--ai-card-box-shadow, none)!important;transition:var(--ai-card-transition, none)!important;animation:var(--ai-card-entrance-animation, none);will-change:opacity,transform;background:var(--ai-card-background)!important;border:var(--theme-ai-card-border)!important;box-shadow:var(--theme-ai-card-box-shadow)!important;padding:var(--card-main-padding)!important;padding-bottom:var(--card-main-padding)!important;border-radius:var(--card-border-radius)!important;gap:var(--section-card-gap)!important;transition:border-color .2s ease,background .2s ease,box-shadow .2s ease!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.ai-card-surface *{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.ai-card-surface h1{transition:opacity .2s ease}.ai-card-surface:hover{border-color:var(--ai-card-border-hover, rgba(255, 121, 0, .2))!important;background:var(--section-item-background-hover, var(--section-item-background))!important;box-shadow:var(--ai-card-box-shadow-hover, var(--ai-card-box-shadow, none))!important;background:var(--ai-card-background-hover)!important;border:var(--theme-ai-card-border-hover)!important;box-shadow:var(--theme-ai-card-box-shadow-hover)!important}.ai-card-surface--fullscreen{border:none!important;box-shadow:none!important;background:var(--ai-card-background)!important;max-height:none!important;max-width:none!important;width:100%!important;overflow:visible!important;padding:var(--card-main-padding)!important}.ai-card-surface--fullscreen:hover{background:var(--ai-card-background)!important;border:none!important;box-shadow:none!important}.ai-card-surface--fullscreen .tilt-container{transform:none!important;box-shadow:none!important;width:100%!important;max-width:none!important}.ai-card-surface--fullscreen .glow-container{filter:none!important}.ai-card-surface--fullscreen .card-reflection{display:none!important}.ai-card-surface--fullscreen .ai-card-header{padding:0!important;margin:0!important;border:none!important;background:transparent!important;box-shadow:none!important}.ai-card-surface--fullscreen .ai-card-title{font-size:14px!important}.ai-card-fullscreen-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;background:#ff790014;border:1px solid rgba(255,121,0,.2);color:var(--foreground);cursor:pointer;transition:all .2s ease;flex-shrink:0;position:absolute;top:var(--card-main-padding);right:var(--card-main-padding);z-index:100}.ai-card-fullscreen-btn:hover{transform:translateY(-2px);background:#ff790026;border-color:#ff790066;box-shadow:0 4px 12px #ff790033}.ai-card-fullscreen-btn:active{transform:translateY(0)}.ai-card-fullscreen-btn__icon{color:currentColor}.ai-card-header{position:relative;z-index:10;padding:0!important;padding-block:0!important;padding-block-start:0!important;padding-block-end:0!important;padding-inline:0!important;padding-inline-start:0!important;padding-inline-end:0!important;margin:0!important;display:flex;flex-direction:column;gap:4px;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-block-start:none!important;border-block-end:none!important;border-inline:none!important;border-inline-start:none!important;border-inline-end:none!important;background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;box-shadow:none!important;border-radius:0!important;outline:none!important;outline-offset:0!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important}.ai-card-header:before{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-header:after{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-title-stack{display:flex;flex-direction:column;gap:2px}.ai-card-eyebrow{font-size:var(--font-card-eyebrow);letter-spacing:.08em;text-transform:none;color:#1c1c1fd9;font-weight:600;opacity:.9}.ai-card-title{font-size:18px;font-weight:700;color:var(--foreground);letter-spacing:-.01em;line-height:1.2;text-transform:none;border:0!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-top:0!important;border-right:0!important;border-bottom:0!important;border-left:0!important;border-top:none!important;border-right:none!important;border-bottom:none!important;border-left:none!important;border-block:none!important;border-inline:none!important;border-image:none!important;border-radius:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;outline-offset:0!important;padding:0!important;padding-block:0!important;padding-inline:0!important;margin:0!important;margin-block:0!important;margin-inline:0!important;box-shadow:none!important;text-decoration:none!important;text-decoration-line:none!important;text-decoration-style:none!important;text-decoration-color:transparent!important;text-underline-offset:0!important;text-decoration-thickness:0!important}.ai-card-title:before,.ai-card-title:after{display:none!important;border:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-top:none!important;border-right:none!important;border-bottom:none!important;border-left:none!important;border-block:none!important;border-inline:none!important;border-image:none!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;margin:0!important;content:none!important}.ai-card-type-pill{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border-radius:999px;border:1px solid rgba(255,121,0,.32);background:#ff79002e;text-transform:none;letter-spacing:.05em;font-size:var(--font-card-meta);font-weight:600;color:#423d37d9}.ai-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px;text-transform:none;font-size:var(--font-card-meta);letter-spacing:.05em;color:#1c1c1fd9}.ai-card-meta__chip{display:inline-flex;align-items:stretch;gap:4px;padding:2px 6px;border-radius:999px;border:1px solid rgba(55,55,60,.65);background:#28282dcc}.ai-card-meta__chip-dot{width:3px;height:3px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 1px #ff79001f}.ai-card-meta__chip-dot--primary{background:var(--accent)}.ai-card-meta__chip-dot--secondary{background:#ff7900a6}.ai-card-meta__chip-dot--tertiary{background:#ff790059}.ai-card-meta__chip-content{display:flex;flex-direction:column;gap:0px;line-height:1}.ai-card-meta__chip-label{font-size:.48rem;letter-spacing:.05em;text-transform:none;color:#1c1c1fd9;font-weight:600}.ai-card-meta__chip-value{font-size:var(--font-card-meta-value);font-weight:600;color:var(--foreground);letter-spacing:.01em}.ai-card-body{position:relative;z-index:10;flex:1;padding:0!important;padding-block:0!important;padding-block-start:0!important;padding-block-end:0!important;padding-inline:0!important;padding-inline-start:0!important;padding-inline-end:0!important;margin:0!important;display:flex;flex-direction:column;gap:12px;min-height:0;overflow:visible;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-block-start:none!important;border-block-end:none!important;border-inline:none!important;border-inline-start:none!important;border-inline-end:none!important;background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;box-shadow:none!important;border-radius:0!important;outline:none!important;outline-offset:0!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important}.ai-card-body:before{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-body:after{display:none!important;border:none!important;border-top:none!important;border-bottom:none!important;border-left:none!important;border-right:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;border-image:none!important;border-block:none!important;border-inline:none!important;padding:0!important;padding-block:0!important;padding-inline:0!important;outline:none!important;outline-width:0!important;outline-style:none!important;outline-color:transparent!important;box-shadow:none!important}.ai-card-action{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border-radius:8px;font-weight:600;font-size:var(--font-card-action, .875rem);letter-spacing:.01em;border:1px solid transparent;text-transform:none;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1)}.ai-card-action--primary{background:var(--primary, #ff7900);color:var(--primary-foreground, #ffffff);border-color:#ff7900cc;box-shadow:0 2px 8px #ff790040,0 1px 2px #0000001a}.ai-card-action--primary:hover{transform:translateY(-1px);box-shadow:0 4px 16px #ff790059,0 2px 4px #0000001a;background:#ff7900f2;border-color:var(--primary, #ff7900)}.ai-card-action--secondary{background:#28282de6;color:var(--foreground, #ffffff);border-color:#37373c99;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f}.ai-card-action--secondary:hover{transform:translateY(-1px);border-color:#ff790066;box-shadow:0 4px 12px #00000026,0 2px 4px #0000001a;background:#322e2af2}.ai-card-action__shine{position:absolute;inset:0;background:linear-gradient(135deg,#fff3,#fff0,#ffffff1a);opacity:0;transition:opacity .3s cubic-bezier(.4,0,.2,1);pointer-events:none;border-radius:inherit}.ai-card-action:hover .ai-card-action__shine{opacity:1}.ai-card-action--primary .ai-card-action__shine{background:linear-gradient(135deg,#ffffff4d,#fff0,#ffffff26)}.ai-card-action--secondary .ai-card-action__shine{background:linear-gradient(135deg,#ffffff26,#fff0,#ffffff14)}.ai-card-action__content{position:relative;z-index:10;display:inline-flex;align-items:center;gap:6px}.ai-card-action__icon{color:currentColor;opacity:.9;transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1)}.ai-card-action__label{font-weight:600;letter-spacing:.01em;transition:transform .3s cubic-bezier(.4,0,.2,1)}.ai-card-action:hover .ai-card-action__icon{transform:translate(2px);opacity:1}.ai-card-action:hover .ai-card-action__label{transform:translate(1px)}.ai-card-footnote{margin-top:auto;margin-bottom:0!important;padding:0!important;border:none!important;border-top:none!important;text-align:center;font-size:.65rem!important;letter-spacing:.08em;text-transform:none;color:#1c1c1fb3;line-height:1.2}@media (prefers-reduced-motion: reduce){.ai-card-surface{transition:none!important;transform:none!important;box-shadow:var(--card-box-shadow)!important}.ai-card-surface:before{opacity:0!important}.ai-card-surface:hover{transform:none!important}}.card-container-wrapper,.glow-container,.tilt-container,.w-full{width:100%}.h-full{height:100%}.flex-1{flex:1 1 0%}.min-h-0{min-height:0}.max-w-none{max-width:none}.card-empty-state{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;height:100%;padding:4rem 2rem;border-radius:1.5rem;overflow:hidden;border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);background:color-mix(in srgb,var(--background, #0c0c0c) 98%,transparent);transition:all .3s ease;flex:1;box-sizing:border-box}.ai-card-surface--empty-state{display:flex;flex-direction:column;min-height:100%;height:100%}.ai-card-surface--empty-state .card-empty-state{flex:1 1 auto;min-height:0;height:100%;display:flex}.card-empty-state:hover{border-color:color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent);background:color-mix(in srgb,var(--background, #0c0c0c) 99%,transparent)}.empty-state-background{position:absolute;inset:0;overflow:hidden;pointer-events:none}.empty-state-gradient{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:150%;height:150%;background:radial-gradient(circle,color-mix(in srgb,var(--color-brand, #ff7900) 6%,transparent) 0%,color-mix(in srgb,var(--color-brand, #ff7900) 3%,transparent) 50%,transparent 80%);animation:gradient-pulse 5s ease-in-out infinite;opacity:.8}@keyframes gradient-pulse{0%,to{opacity:.6;transform:translate(-50%,-50%) scale(1)}50%{opacity:.9;transform:translate(-50%,-50%) scale(1.05)}}.empty-state-particles{position:absolute;inset:0}.empty-state-particles .particle{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--color-brand, #ff7900);box-shadow:0 0 8px var(--color-brand, #ff7900);transition:transform .8s cubic-bezier(.23,1,.32,1),opacity .5s ease;will-change:transform,opacity;top:50%;left:50%;margin-left:-2px;margin-top:-2px;pointer-events:none;opacity:.7}.empty-state-particles .particle:nth-child(odd){width:5px;height:5px;background:var(--color-brand, #ff7900);box-shadow:0 0 10px var(--color-brand, #ff7900);opacity:.8}.empty-state-particles .particle:nth-child(2n){width:3px;height:3px;background:var(--color-brand, #ff7900);box-shadow:0 0 6px var(--color-brand, #ff7900);opacity:.6}.empty-state-content{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:1rem;max-width:420px;width:100%;transition:transform .2s cubic-bezier(.25,.46,.45,.94);will-change:transform}.empty-state-icon-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:88px;height:88px}.empty-state-icon-ring{position:absolute;inset:-8px;border:1.5px solid color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent);border-radius:50%;animation:ring-pulse 3s ease-in-out infinite}.empty-state-icon-pulse{position:absolute;inset:-16px;border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent);border-radius:50%;animation:ring-pulse 3s ease-in-out infinite .75s}@keyframes ring-pulse{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}.empty-state-icon{position:relative;z-index:1;color:var(--color-brand, #ff7900);animation:icon-float 4s ease-in-out infinite;filter:drop-shadow(0 2px 8px color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent));opacity:.95}@keyframes icon-float{0%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-6px) rotate(-3deg)}50%{transform:translateY(-10px) rotate(0)}75%{transform:translateY(-6px) rotate(3deg)}}.empty-state-text{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;width:100%}.empty-state-title{font-size:1.75rem;font-weight:700;color:var(--foreground, #ffffff);margin:0;letter-spacing:-.03em;line-height:1.2;text-align:center;animation:fade-in-up .6s ease-out .2s both}.empty-state-message-container{min-height:2.5rem;display:flex;align-items:center;justify-content:center;width:100%}.empty-state-message{font-size:1rem;color:var(--color-brand, #ff7900);margin:0;line-height:1.6;font-weight:500;font-style:italic;text-align:center;animation:fade-in-up .6s ease-out .4s both;letter-spacing:.01em}.card-empty-state-legacy{min-height:200px;display:flex;align-items:center;justify-content:center;padding:3rem;background:linear-gradient(135deg,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,color-mix(in srgb,var(--background, #0c0c0c) 98%,transparent) 50%,transparent 100%);border-radius:1.5rem;border:1px dashed color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}.empty-state-box{text-align:center;max-width:320px}.empty-state-icon-legacy{display:flex;justify-content:center;margin-bottom:1.5rem;color:var(--color-brand, #ff7900);opacity:.7}.empty-state-message-legacy{font-size:.95rem;color:var(--muted-foreground, #a1a1aa);line-height:1.6;margin:0}.ai-card-surface.has-loading-overlay{display:flex;align-items:center;justify-content:center;min-height:500px;position:relative;overflow:hidden;background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%);animation:generating-bg-pulse 3s ease-in-out infinite,card-generating-pulse 2s ease-in-out infinite}@keyframes card-generating-pulse{0%,to{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent),0 4px 20px #00000026,0 0 0 transparent}50%{box-shadow:inset 0 1px 3px color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent),0 4px 20px #00000026,0 0 30px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent)}}@keyframes generating-bg-pulse{0%,to{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%)}50%{background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--color-brand, #ff7900) 12%,transparent) 0%,transparent 70%)}}.generating-content{position:relative;z-index:2;text-align:center}.generating-shimmer{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-brand, #ff7900) 15%,transparent) 50%,transparent 100%);animation:shimmer-sweep 2.5s ease-in-out infinite;pointer-events:none;z-index:1}@keyframes shimmer-sweep{0%{left:-100%}to{left:100%}}.generating-text{font-size:1.125rem;font-weight:600;color:var(--foreground, #ffffff);margin:0;background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:text-shimmer-flow 2.5s ease-in-out infinite;position:relative;z-index:2;letter-spacing:.02em}@keyframes text-shimmer-flow{0%,to{background-position:-200% 0}50%{background-position:200% 0}}.loading-particles{position:absolute;inset:0;overflow:hidden;pointer-events:none}.particle{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--color-brand, #ff7900);box-shadow:0 0 6px var(--color-brand, #ff7900);animation:particle-float 4s ease-in-out infinite}.particle:nth-child(1){top:10%;left:20%;animation-delay:0s}.particle:nth-child(2){top:30%;left:80%;animation-delay:.5s}.particle:nth-child(3){top:70%;left:30%;animation-delay:1s}.particle:nth-child(4){top:80%;left:70%;animation-delay:1.5s}.particle:nth-child(5){top:20%;left:50%;animation-delay:.3s}.particle:nth-child(6){top:60%;left:15%;animation-delay:.9s}.particle:nth-child(7){top:50%;left:90%;animation-delay:1.8s}.particle:nth-child(8){top:15%;left:60%;animation-delay:2.1s}@keyframes particle-float{0%,to{transform:translateY(0) translate(0) scale(1);opacity:.3}25%{transform:translateY(-30px) translate(20px) scale(1.2);opacity:.7}50%{transform:translateY(-60px) translate(-10px) scale(.8);opacity:1}75%{transform:translateY(-30px) translate(15px) scale(1.1);opacity:.6}}.loading-content{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:1.5rem}.loading-spinner{width:64px;height:64px;position:relative}.spinner-svg{width:100%;height:100%;animation:spinner-rotate 1.5s linear infinite;transform-origin:center}.spinner-circle{stroke-dasharray:125.6;stroke-dashoffset:31.4;stroke:var(--color-brand, #ff7900);animation:spinner-dash 1.5s ease-in-out infinite}@keyframes spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spinner-dash{0%{stroke-dasharray:1,125.6;stroke-dashoffset:0}50%{stroke-dasharray:94.2,125.6;stroke-dashoffset:-31.4}to{stroke-dasharray:94.2,125.6;stroke-dashoffset:-125.6}}.loading-text{text-align:center}.loading-title{font-size:1.25rem;font-weight:600;color:var(--foreground, #ffffff);margin-bottom:.5rem;background:linear-gradient(90deg,var(--foreground, #ffffff) 0%,var(--color-brand, #ff7900) 50%,var(--foreground, #ffffff) 100%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:text-shimmer 2s ease-in-out infinite}.loading-subtitle{font-size:.875rem;color:var(--muted-foreground, #a1a1aa);margin:0}@keyframes text-shimmer{0%,to{background-position:-200% 0}50%{background-position:200% 0}}.loading-wave{position:absolute;bottom:0;left:0;right:0;height:4px;background:linear-gradient(90deg,transparent 0%,var(--color-brand, #ff7900) 25%,var(--color-brand, #ff7900) 75%,transparent 100%);background-size:200% 100%;animation:wave-slide 2s ease-in-out infinite}@keyframes wave-slide{0%{background-position:-200% 0}to{background-position:200% 0}}.ai-section{--section-accent: var(--accent, #ff7900);--section-border-hover: 1px solid var(--card-border-hover, rgba(255, 121, 0, .2));--section-background: var( --section-surface, var(--section-background, var(--card-section-bg, #fafafa)) );--section-background-hover: var( --section-surface-hover, var(--section-background-hover, var(--card-section-bg, #fafafa)) );--section-backdrop-filter: blur(12px);--section-spacing-bottom: clamp(4px, .8vw, 12px);--section-glow-background: radial-gradient( circle at top right, rgba(255, 121, 0, .35) 0%, transparent 65% );--section-glow-opacity-hover: .12;--section-title-underline-length: clamp(32px, 3vw, 48px);--section-title-underline-hover-length: clamp(40px, 4vw, 64px);--section-title-underline-height: 3px;--section-title-underline-offset: -10px;--section-title-hover-color: rgba(255, 180, 100, 1);height:100%!important;margin-bottom:var(--section-spacing-bottom)!important;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.ai-section *{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.ai-section:not(.masonry-item .ai-section){position:relative;display:flex;flex-direction:column;gap:var(--section-card-gap);padding:var(--section-padding);border-radius:var(--section-item-border-radius);background:var(--section-background);border:var(--section-border);box-shadow:var(--section-box-shadow)}.masonry-item .ai-section{display:flex!important;flex-direction:column!important;gap:var(--section-card-gap)!important}.ai-section--main{--section-background: var(--section-bg-main, var(--section-surface, var(--background)));--section-background-hover: var( --section-bg-main-hover, var(--section-surface-hover, var(--background)) )}.ai-section--contrast{--section-background: var(--section-bg-contrast, var(--card-section-bg));--section-background-hover: var(--section-bg-contrast-hover, var(--card-section-card-bg))}.ai-section__header{display:flex;flex-direction:row;gap:calc(var(--card-gap) * .75);width:100%;box-sizing:border-box;align-items:center!important;padding:0 0 calc(var(--card-gap) * .75) 0!important;border-bottom:none!important;background:transparent!important;margin:0!important;flex-wrap:wrap!important;gap:calc(var(--card-gap) * .75)!important}.ai-section__title{font-size:var(--section-title-font-size, 1.1rem);font-weight:var(--section-title-font-weight, 700);letter-spacing:var(--section-title-letter-spacing, -.02em);line-height:var(--section-title-line-height, 1.3);color:var(--card-text-primary, #1c1c1f);margin:0;font-size:var(--section-title-font-size, 1.1rem)!important;font-weight:var(--section-title-font-weight, 700)!important;letter-spacing:var(--section-title-letter-spacing, -.02em)!important;line-height:var(--section-title-line-height, 1.3)!important;color:var(--card-text-primary, #1c1c1f)!important;opacity:1!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;position:relative!important;transition:color .22s cubic-bezier(.4,0,.2,1)!important;padding:0!important;margin:0 0 var(--section-title-margin-bottom) 0!important;font-family:inherit!important;border:none!important}.ai-section__title:before{content:\"\"!important;position:absolute!important;left:0!important;bottom:var(--section-title-underline-offset, -10px)!important;width:var(--section-title-underline-length)!important;height:var(--section-title-underline-height)!important;background:var(--section-accent, var(--accent, #ff7900))!important;border-radius:2px!important;transition:width .22s ease,opacity .22s ease!important;transform-origin:left!important;opacity:.6!important}.ai-section__title:hover{color:var(--card-text-primary, #1c1c1f)!important}.ai-section__title:hover:before{width:var(--section-title-underline-hover-length)!important;opacity:1!important}.ai-section__icon{display:none!important;width:var(--icon-size-section)!important;height:var(--icon-size-section)!important}.ai-section__details{display:flex!important;flex-direction:column!important;gap:calc(var(--card-gap) * .75)!important}.ai-section__description{font-size:var(--section-description-font-size, .8rem);font-weight:400;color:var(--card-text-secondary, rgba(28, 28, 31, .6));line-height:1.4;margin:0;color:#1c1c1fb3!important;letter-spacing:.01em!important;line-height:1.2!important;font-weight:400!important;overflow:hidden!important;text-overflow:ellipsis!important;display:-webkit-box!important;-webkit-line-clamp:2!important;-webkit-box-orient:vertical!important;margin-top:calc(var(--card-gap) * .5)!important;transition:color .2s ease!important;font-family:inherit!important}.ai-section:hover .ai-section__description{color:#1c1c1fcc!important}.ai-section__badge{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;font-size:.55rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;color:#ff7900;background:#ff79001a;border-radius:4px;white-space:nowrap;display:none!important;padding:var(--tag-padding-y-sm) var(--tag-padding-x)!important;border-radius:var(--radius-sm)!important}.ai-section--contact-card .ai-section__badge,.ai-section--solutions .ai-section__badge,.ai-section--event .ai-section__badge,.ai-section--chart .ai-section__badge,.ai-section--financials .ai-section__badge{display:none!important;align-items:center!important;padding:calc(var(--tag-padding-y-sm) * .75) calc(var(--tag-padding-x) * .875)!important;background:linear-gradient(135deg,#ff790026,#ff79001f)!important;color:#ff7900e6!important;border:none!important;box-shadow:none!important;border-radius:var(--section-card-border-radius)!important;font-size:var(--card-meta-font-size, .6rem)!important;font-weight:var(--card-meta-font-weight, 500)!important;transition:opacity .2s ease,background .2s ease!important;line-height:1.2!important}.ai-section:hover .ai-section__badge{opacity:1!important;background:#ff790033!important}.ai-section__body{display:flex;flex-direction:column;gap:var(--section-gap-internal);width:100%;box-sizing:border-box;padding:0!important;margin:0!important}.ai-section .section-empty{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;padding:calc(var(--card-padding) * 1.5)!important;text-align:center!important;color:var(--muted-foreground)!important;min-height:auto!important;border-radius:var(--radius-md)!important;background:var(--section-item-background, var(--card-section-bg))!important;border:1px dashed var(--border)!important;transition:opacity .2s ease,background .2s ease!important}.ai-section .section-empty lucide-icon{margin-bottom:var(--card-gap)!important;opacity:.5!important;color:var(--accent)!important;transition:all .2s ease!important}.ai-section .section-empty p{font-size:var(--font-section-description, .85rem)!important;margin:0!important;font-weight:500!important;font-family:inherit!important}.ai-section .section-empty:hover{background:var(--section-item-background-hover, var(--card-section-card-bg))!important;border-color:var(--accent)!important}.ai-section .section-empty:hover lucide-icon{opacity:.7!important}.ai-section--info{--section-accent: var(--section-accent-info, #ff7900)}.ai-section--analytics{--section-accent: var(--section-accent-analytics, #ff7900)}.ai-section--financials{--section-accent: var(--section-accent-financials, #ff7900)}.ai-section--map{--section-accent: var(--section-accent-map, #ff7900)}.ai-section--network-card{--section-accent: var(--section-accent-network, #ff7900)}.ai-section--contact-card{--section-accent: var(--section-accent-contact, #ff7900)}.ai-section--product{--section-accent: var(--section-accent-product, #ff7900)}.ai-section--solutions{--section-accent: var(--section-accent-solutions, #ff7900)}.ai-section--overview{--section-accent: var(--section-accent-overview, #ff7900)}.ai-section--list,.ai-section--info-list{--section-accent: var(--section-accent-list, #ff7900)}.ai-section--event{--section-accent: var(--section-accent-event, #ff7900)}.ai-section--chart{--section-accent: var(--section-accent-chart, var(--accent, #ff7900))}.ai-section--text-reference{--section-accent: var(--section-accent-reference, var(--accent, #ff7900))}.ai-section--quotation{--section-accent: var(--section-accent-quotation, var(--accent, #ff7900))}.ai-card-surface--fullscreen .ai-section{--section-padding: var(--section-padding);--section-spacing-bottom: calc(var(--card-gap) * 1.25);--section-gap: var(--section-card-gap);--section-gap-internal: var(--card-gap);--section-title-underline-length: 32px;--section-title-underline-hover-length: 40px;--section-title-underline-height: 2px;--section-title-underline-offset: -8px;--section-box-shadow: none !important;--section-box-shadow-hover: none !important}.ai-card-surface--fullscreen .masonry-item,.ai-card-surface--fullscreen .masonry-item:hover{box-shadow:none!important}.ai-card-surface--fullscreen .ai-section__header{padding:0 0 calc(var(--card-gap) * .75) 0!important;gap:calc(var(--card-gap) * .75)!important}.ai-card-surface--fullscreen .ai-section__title{font-size:var(--card-title-font-size, .95rem)!important}.ai-card-surface--fullscreen .ai-section__body{gap:var(--card-gap)!important}.ai-card-surface--fullscreen .ai-section__description{font-size:var(--card-meta-font-size, .6rem)!important;margin-top:4px!important}:root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@keyframes unified-stream-in{0%{opacity:0;transform:translateY(var(--motion-distance-sm))}to{opacity:1;transform:translateY(0)}}.section-card,.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.section-card:hover,.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible,.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card,.unified-card{transition:none}}.section-card.section-item-streaming,.section-card.item-streaming,.section-card.field-streaming,.unified-card.section-item-streaming,.unified-card.item-streaming,.unified-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.section-card.section-item-entered,.section-card.item-entered,.section-card.field-entered,.unified-card.section-item-entered,.unified-card.item-entered,.unified-card.field-entered{animation:none}.section-card.section-item-stagger-0,.section-card.item-stagger-0,.section-card.field-stagger-0,.unified-card.section-item-stagger-0,.unified-card.item-stagger-0,.unified-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.section-card.section-item-stagger-1,.section-card.item-stagger-1,.section-card.field-stagger-1,.unified-card.section-item-stagger-1,.unified-card.item-stagger-1,.unified-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.section-card.section-item-stagger-2,.section-card.item-stagger-2,.section-card.field-stagger-2,.unified-card.section-item-stagger-2,.unified-card.item-stagger-2,.unified-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.section-card.section-item-stagger-3,.section-card.item-stagger-3,.section-card.field-stagger-3,.unified-card.section-item-stagger-3,.unified-card.item-stagger-3,.unified-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.section-card.section-item-stagger-4,.section-card.item-stagger-4,.section-card.field-stagger-4,.unified-card.section-item-stagger-4,.unified-card.item-stagger-4,.unified-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.section-card.section-item-stagger-5,.section-card.item-stagger-5,.section-card.field-stagger-5,.unified-card.section-item-stagger-5,.unified-card.item-stagger-5,.unified-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.section-card.section-item-stagger-6,.section-card.item-stagger-6,.section-card.field-stagger-6,.unified-card.section-item-stagger-6,.unified-card.item-stagger-6,.unified-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.section-card.section-item-stagger-7,.section-card.item-stagger-7,.section-card.field-stagger-7,.unified-card.section-item-stagger-7,.unified-card.item-stagger-7,.unified-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.section-card.section-item-stagger-8,.section-card.item-stagger-8,.section-card.field-stagger-8,.unified-card.section-item-stagger-8,.unified-card.item-stagger-8,.unified-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.section-card.section-item-stagger-9,.section-card.item-stagger-9,.section-card.field-stagger-9,.unified-card.section-item-stagger-9,.unified-card.item-stagger-9,.unified-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.section-card.section-item-stagger-10,.section-card.item-stagger-10,.section-card.field-stagger-10,.unified-card.section-item-stagger-10,.unified-card.item-stagger-10,.unified-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.section-card.section-item-stagger-11,.section-card.item-stagger-11,.section-card.field-stagger-11,.unified-card.section-item-stagger-11,.unified-card.item-stagger-11,.unified-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.section-card.section-item-stagger-12,.section-card.item-stagger-12,.section-card.field-stagger-12,.unified-card.section-item-stagger-12,.unified-card.item-stagger-12,.unified-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.section-card.section-item-stagger-13,.section-card.item-stagger-13,.section-card.field-stagger-13,.unified-card.section-item-stagger-13,.unified-card.item-stagger-13,.unified-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.section-card.section-item-stagger-14,.section-card.item-stagger-14,.section-card.field-stagger-14,.unified-card.section-item-stagger-14,.unified-card.item-stagger-14,.unified-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.section-card.section-item-stagger-15,.section-card.item-stagger-15,.section-card.field-stagger-15,.unified-card.section-item-stagger-15,.unified-card.item-stagger-15,.unified-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.analytics-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.analytics-metrics{grid-template-columns:1fr;gap:var(--gap-sm)}}.analytics-metric{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.analytics-metric:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.analytics-metric:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.analytics-metric{transition:none}}.analytics-metric.section-item-streaming,.analytics-metric.item-streaming,.analytics-metric.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.analytics-metric.section-item-entered,.analytics-metric.item-entered,.analytics-metric.field-entered{animation:none}.analytics-metric.section-item-stagger-0,.analytics-metric.item-stagger-0,.analytics-metric.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-1,.analytics-metric.item-stagger-1,.analytics-metric.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-2,.analytics-metric.item-stagger-2,.analytics-metric.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-3,.analytics-metric.item-stagger-3,.analytics-metric.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-4,.analytics-metric.item-stagger-4,.analytics-metric.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-5,.analytics-metric.item-stagger-5,.analytics-metric.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-6,.analytics-metric.item-stagger-6,.analytics-metric.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-7,.analytics-metric.item-stagger-7,.analytics-metric.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-8,.analytics-metric.item-stagger-8,.analytics-metric.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-9,.analytics-metric.item-stagger-9,.analytics-metric.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-10,.analytics-metric.item-stagger-10,.analytics-metric.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-11,.analytics-metric.item-stagger-11,.analytics-metric.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-12,.analytics-metric.item-stagger-12,.analytics-metric.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-13,.analytics-metric.item-stagger-13,.analytics-metric.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-14,.analytics-metric.item-stagger-14,.analytics-metric.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.analytics-metric.section-item-stagger-15,.analytics-metric.item-stagger-15,.analytics-metric.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.analytics-metric__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height)}.analytics-metric__value{font-size:var(--card-value-font-size);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap}.analytics-metric__change{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--card-meta-font-size);font-weight:600}.analytics-metric__change lucide-icon,.analytics-metric__change svg{width:var(--icon-xs);height:var(--icon-xs)}.analytics-metric__change.trend--up{color:#4ade80}.analytics-metric__change.trend--down{color:#f87171}.analytics-metric__change.trend--stable{color:#facc15}.analytics-metric__progress{width:100%;height:3px;background:var(--muted);border-radius:var(--radius-full);overflow:hidden;margin-top:var(--space-2)}.analytics-metric__progress-bar{height:100%;background:var(--accent);border-radius:inherit;transition:width var(--duration-slow) var(--ease-out-smooth)}.analytics-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.analytics-empty lucide-icon,.analytics-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.analytics-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.financials-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.financials-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.financial-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.financial-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.financial-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.financial-card{transition:none}}.financial-card.section-item-streaming,.financial-card.item-streaming,.financial-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.financial-card.section-item-entered,.financial-card.item-entered,.financial-card.field-entered{animation:none}.financial-card.section-item-stagger-0,.financial-card.item-stagger-0,.financial-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.financial-card.section-item-stagger-1,.financial-card.item-stagger-1,.financial-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.financial-card.section-item-stagger-2,.financial-card.item-stagger-2,.financial-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.financial-card.section-item-stagger-3,.financial-card.item-stagger-3,.financial-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.financial-card.section-item-stagger-4,.financial-card.item-stagger-4,.financial-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.financial-card.section-item-stagger-5,.financial-card.item-stagger-5,.financial-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.financial-card.section-item-stagger-6,.financial-card.item-stagger-6,.financial-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.financial-card.section-item-stagger-7,.financial-card.item-stagger-7,.financial-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.financial-card.section-item-stagger-8,.financial-card.item-stagger-8,.financial-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.financial-card.section-item-stagger-9,.financial-card.item-stagger-9,.financial-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.financial-card.section-item-stagger-10,.financial-card.item-stagger-10,.financial-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.financial-card.section-item-stagger-11,.financial-card.item-stagger-11,.financial-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.financial-card.section-item-stagger-12,.financial-card.item-stagger-12,.financial-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.financial-card.section-item-stagger-13,.financial-card.item-stagger-13,.financial-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.financial-card.section-item-stagger-14,.financial-card.item-stagger-14,.financial-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.financial-card.section-item-stagger-15,.financial-card.item-stagger-15,.financial-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.financial-card__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height)}.financial-card__value{font-size:var(--card-value-font-size-large);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);display:flex;align-items:baseline;gap:var(--space-2)}.financial-card__change{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--card-meta-font-size);font-weight:600}.financial-card__change lucide-icon,.financial-card__change svg{width:var(--icon-xs);height:var(--icon-xs)}.financial-card__change.trend--up{color:#4ade80}.financial-card__change.trend--down{color:#f87171}.financial-card__change.trend--stable{color:#facc15}.financial-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-md);height:var(--icon-md);color:var(--accent);flex-shrink:0}.financial-card__icon lucide-icon,.financial-card__icon svg{width:calc(var(--icon-md) * .6);height:calc(var(--icon-md) * .6)}.financials-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.financials-empty lucide-icon,.financials-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.financials-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.overview-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.overview-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3)}.overview-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.overview-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.overview-card{transition:none}}.overview-card.section-item-streaming,.overview-card.item-streaming,.overview-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.overview-card.section-item-entered,.overview-card.item-entered,.overview-card.field-entered{animation:none}.overview-card.section-item-stagger-0,.overview-card.item-stagger-0,.overview-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.overview-card.section-item-stagger-1,.overview-card.item-stagger-1,.overview-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.overview-card.section-item-stagger-2,.overview-card.item-stagger-2,.overview-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.overview-card.section-item-stagger-3,.overview-card.item-stagger-3,.overview-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.overview-card.section-item-stagger-4,.overview-card.item-stagger-4,.overview-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.overview-card.section-item-stagger-5,.overview-card.item-stagger-5,.overview-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.overview-card.section-item-stagger-6,.overview-card.item-stagger-6,.overview-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.overview-card.section-item-stagger-7,.overview-card.item-stagger-7,.overview-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.overview-card.section-item-stagger-8,.overview-card.item-stagger-8,.overview-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.overview-card.section-item-stagger-9,.overview-card.item-stagger-9,.overview-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.overview-card.section-item-stagger-10,.overview-card.item-stagger-10,.overview-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.overview-card.section-item-stagger-11,.overview-card.item-stagger-11,.overview-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.overview-card.section-item-stagger-12,.overview-card.item-stagger-12,.overview-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.overview-card.section-item-stagger-13,.overview-card.item-stagger-13,.overview-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.overview-card.section-item-stagger-14,.overview-card.item-stagger-14,.overview-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.overview-card.section-item-stagger-15,.overview-card.item-stagger-15,.overview-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.overview-card__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height);margin-bottom:0}.overview-card__value{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;text-align:right}.overview-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.overview-empty lucide-icon,.overview-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.overview-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.info-matrix{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.info-row{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);gap:var(--space-4)}.info-row:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.info-row:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.info-row{transition:none}}.info-row.section-item-streaming,.info-row.item-streaming,.info-row.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.info-row.section-item-entered,.info-row.item-entered,.info-row.field-entered{animation:none}.info-row.section-item-stagger-0,.info-row.item-stagger-0,.info-row.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.info-row.section-item-stagger-1,.info-row.item-stagger-1,.info-row.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.info-row.section-item-stagger-2,.info-row.item-stagger-2,.info-row.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.info-row.section-item-stagger-3,.info-row.item-stagger-3,.info-row.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.info-row.section-item-stagger-4,.info-row.item-stagger-4,.info-row.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.info-row.section-item-stagger-5,.info-row.item-stagger-5,.info-row.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.info-row.section-item-stagger-6,.info-row.item-stagger-6,.info-row.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.info-row.section-item-stagger-7,.info-row.item-stagger-7,.info-row.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.info-row.section-item-stagger-8,.info-row.item-stagger-8,.info-row.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.info-row.section-item-stagger-9,.info-row.item-stagger-9,.info-row.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.info-row.section-item-stagger-10,.info-row.item-stagger-10,.info-row.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.info-row.section-item-stagger-11,.info-row.item-stagger-11,.info-row.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.info-row.section-item-stagger-12,.info-row.item-stagger-12,.info-row.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.info-row.section-item-stagger-13,.info-row.item-stagger-13,.info-row.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.info-row.section-item-stagger-14,.info-row.item-stagger-14,.info-row.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.info-row.section-item-stagger-15,.info-row.item-stagger-15,.info-row.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.info-row__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height);margin-bottom:0;min-width:80px}.info-row__value{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);text-align:right;flex:1;color:var(--foreground)}.info-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.info-empty lucide-icon,.info-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.info-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.news-feed{display:flex;flex-direction:column;gap:var(--gap-sm);width:100%}.news-item{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.news-item:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.news-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.news-item{transition:none}}.news-item.section-item-streaming,.news-item.item-streaming,.news-item.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.news-item.section-item-entered,.news-item.item-entered,.news-item.field-entered{animation:none}.news-item.section-item-stagger-0,.news-item.item-stagger-0,.news-item.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.news-item.section-item-stagger-1,.news-item.item-stagger-1,.news-item.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.news-item.section-item-stagger-2,.news-item.item-stagger-2,.news-item.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.news-item.section-item-stagger-3,.news-item.item-stagger-3,.news-item.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.news-item.section-item-stagger-4,.news-item.item-stagger-4,.news-item.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.news-item.section-item-stagger-5,.news-item.item-stagger-5,.news-item.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.news-item.section-item-stagger-6,.news-item.item-stagger-6,.news-item.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.news-item.section-item-stagger-7,.news-item.item-stagger-7,.news-item.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.news-item.section-item-stagger-8,.news-item.item-stagger-8,.news-item.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.news-item.section-item-stagger-9,.news-item.item-stagger-9,.news-item.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.news-item.section-item-stagger-10,.news-item.item-stagger-10,.news-item.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.news-item.section-item-stagger-11,.news-item.item-stagger-11,.news-item.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.news-item.section-item-stagger-12,.news-item.item-stagger-12,.news-item.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.news-item.section-item-stagger-13,.news-item.item-stagger-13,.news-item.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.news-item.section-item-stagger-14,.news-item.item-stagger-14,.news-item.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.news-item.section-item-stagger-15,.news-item.item-stagger-15,.news-item.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.news-item__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between;margin-bottom:var(--space-1)}.news-item__tag{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.news-item__date{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height)}.news-item__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.news-item__summary{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0}.news-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.news-empty lucide-icon,.news-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.news-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.contact-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.contact-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:flex-start;gap:var(--space-3)}.contact-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.contact-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.contact-card{transition:none}}.contact-card.section-item-streaming,.contact-card.item-streaming,.contact-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.contact-card.section-item-entered,.contact-card.item-entered,.contact-card.field-entered{animation:none}.contact-card.section-item-stagger-0,.contact-card.item-stagger-0,.contact-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.contact-card.section-item-stagger-1,.contact-card.item-stagger-1,.contact-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.contact-card.section-item-stagger-2,.contact-card.item-stagger-2,.contact-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.contact-card.section-item-stagger-3,.contact-card.item-stagger-3,.contact-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.contact-card.section-item-stagger-4,.contact-card.item-stagger-4,.contact-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.contact-card.section-item-stagger-5,.contact-card.item-stagger-5,.contact-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.contact-card.section-item-stagger-6,.contact-card.item-stagger-6,.contact-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.contact-card.section-item-stagger-7,.contact-card.item-stagger-7,.contact-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.contact-card.section-item-stagger-8,.contact-card.item-stagger-8,.contact-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.contact-card.section-item-stagger-9,.contact-card.item-stagger-9,.contact-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.contact-card.section-item-stagger-10,.contact-card.item-stagger-10,.contact-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.contact-card.section-item-stagger-11,.contact-card.item-stagger-11,.contact-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.contact-card.section-item-stagger-12,.contact-card.item-stagger-12,.contact-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.contact-card.section-item-stagger-13,.contact-card.item-stagger-13,.contact-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.contact-card.section-item-stagger-14,.contact-card.item-stagger-14,.contact-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.contact-card.section-item-stagger-15,.contact-card.item-stagger-15,.contact-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.contact-card__avatar{width:36px;height:36px;border-radius:var(--radius-full);background:#ff790026;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}.contact-card__avatar img{width:100%;height:100%;object-fit:cover}.contact-card__avatar__initials{font-size:12.6px;font-weight:600;color:var(--accent)}.contact-card__initials{font-size:.75rem;font-weight:600;color:var(--accent)}.contact-card__info{display:flex;flex-direction:column;gap:var(--space-1);width:100%;flex:1;min-width:0}.contact-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.contact-card__role{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.contact-card__email,.contact-card__phone{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1);text-decoration:none}.contact-card__email lucide-icon,.contact-card__email svg,.contact-card__phone lucide-icon,.contact-card__phone svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.6}.contact-card__email:hover,.contact-card__phone:hover{color:var(--accent)}.contact-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.contact-empty lucide-icon,.contact-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.contact-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.event-grid{display:flex;flex-direction:column;gap:var(--gap-sm);width:100%}.event-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:flex-start;gap:var(--space-3)}.event-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.event-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.event-card{transition:none}}.event-card.section-item-streaming,.event-card.item-streaming,.event-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.event-card.section-item-entered,.event-card.item-entered,.event-card.field-entered{animation:none}.event-card.section-item-stagger-0,.event-card.item-stagger-0,.event-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.event-card.section-item-stagger-1,.event-card.item-stagger-1,.event-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.event-card.section-item-stagger-2,.event-card.item-stagger-2,.event-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.event-card.section-item-stagger-3,.event-card.item-stagger-3,.event-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.event-card.section-item-stagger-4,.event-card.item-stagger-4,.event-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.event-card.section-item-stagger-5,.event-card.item-stagger-5,.event-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.event-card.section-item-stagger-6,.event-card.item-stagger-6,.event-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.event-card.section-item-stagger-7,.event-card.item-stagger-7,.event-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.event-card.section-item-stagger-8,.event-card.item-stagger-8,.event-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.event-card.section-item-stagger-9,.event-card.item-stagger-9,.event-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.event-card.section-item-stagger-10,.event-card.item-stagger-10,.event-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.event-card.section-item-stagger-11,.event-card.item-stagger-11,.event-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.event-card.section-item-stagger-12,.event-card.item-stagger-12,.event-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.event-card.section-item-stagger-13,.event-card.item-stagger-13,.event-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.event-card.section-item-stagger-14,.event-card.item-stagger-14,.event-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.event-card.section-item-stagger-15,.event-card.item-stagger-15,.event-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.event-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-xl);height:var(--icon-xl);color:var(--accent);flex-shrink:0;background:#ff79001a;border-radius:var(--radius-sm)}.event-card__icon lucide-icon,.event-card__icon svg{width:calc(var(--icon-xl) * .6);height:calc(var(--icon-xl) * .6)}.event-card__content{display:flex;flex-direction:column;gap:var(--space-1);width:100%;flex:1;min-width:0}.event-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.event-card__datetime{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;flex-direction:row;align-items:center;gap:var(--space-3);width:100%;flex-wrap:wrap}.event-card__datetime lucide-icon,.event-card__datetime svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.5}.event-card__date,.event-card__time,.event-card__location{display:inline-flex;align-items:center;gap:var(--space-1)}.event-card__status{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.event-card__status.status--completed,.event-card__status.status--success{color:var(--status-success);background:var(--status-success-bg)}.event-card__status.status--active,.event-card__status.status--in-progress{color:var(--accent);background:#ff79001a}.event-card__status.status--pending,.event-card__status.status--warning{color:var(--status-warning);background:var(--status-warning-bg)}.event-card__status.status--blocked,.event-card__status.status--cancelled,.event-card__status.status--error{color:var(--status-error);background:var(--status-error-bg)}.event-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.event-empty lucide-icon,.event-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.event-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.quotation-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.quotation-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.quotation-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.quotation-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.quotation-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.quotation-card{transition:none}}.quotation-card.section-item-streaming,.quotation-card.item-streaming,.quotation-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.quotation-card.section-item-entered,.quotation-card.item-entered,.quotation-card.field-entered{animation:none}.quotation-card.section-item-stagger-0,.quotation-card.item-stagger-0,.quotation-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-1,.quotation-card.item-stagger-1,.quotation-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-2,.quotation-card.item-stagger-2,.quotation-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-3,.quotation-card.item-stagger-3,.quotation-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-4,.quotation-card.item-stagger-4,.quotation-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-5,.quotation-card.item-stagger-5,.quotation-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-6,.quotation-card.item-stagger-6,.quotation-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-7,.quotation-card.item-stagger-7,.quotation-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-8,.quotation-card.item-stagger-8,.quotation-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-9,.quotation-card.item-stagger-9,.quotation-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-10,.quotation-card.item-stagger-10,.quotation-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-11,.quotation-card.item-stagger-11,.quotation-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-12,.quotation-card.item-stagger-12,.quotation-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-13,.quotation-card.item-stagger-13,.quotation-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-14,.quotation-card.item-stagger-14,.quotation-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.quotation-card.section-item-stagger-15,.quotation-card.item-stagger-15,.quotation-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.quotation-card__icon{display:none}.quotation-card__text{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);font-style:italic;line-height:1.6;padding-left:var(--space-3);border-left:2px solid var(--accent);color:var(--foreground)}.quotation-card__author{display:flex;flex-direction:column;gap:var(--space-0);width:100%;margin-top:var(--space-3)}.quotation-card__author-name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;color:var(--accent)}.quotation-card__author-role{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height)}.quotation-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.quotation-empty lucide-icon,.quotation-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.quotation-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.reference-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.reference-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.reference-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.reference-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.reference-card{transition:none}}.reference-card.section-item-streaming,.reference-card.item-streaming,.reference-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.reference-card.section-item-entered,.reference-card.item-entered,.reference-card.field-entered{animation:none}.reference-card.section-item-stagger-0,.reference-card.item-stagger-0,.reference-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.reference-card.section-item-stagger-1,.reference-card.item-stagger-1,.reference-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.reference-card.section-item-stagger-2,.reference-card.item-stagger-2,.reference-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.reference-card.section-item-stagger-3,.reference-card.item-stagger-3,.reference-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.reference-card.section-item-stagger-4,.reference-card.item-stagger-4,.reference-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.reference-card.section-item-stagger-5,.reference-card.item-stagger-5,.reference-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.reference-card.section-item-stagger-6,.reference-card.item-stagger-6,.reference-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.reference-card.section-item-stagger-7,.reference-card.item-stagger-7,.reference-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.reference-card.section-item-stagger-8,.reference-card.item-stagger-8,.reference-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.reference-card.section-item-stagger-9,.reference-card.item-stagger-9,.reference-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.reference-card.section-item-stagger-10,.reference-card.item-stagger-10,.reference-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.reference-card.section-item-stagger-11,.reference-card.item-stagger-11,.reference-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.reference-card.section-item-stagger-12,.reference-card.item-stagger-12,.reference-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.reference-card.section-item-stagger-13,.reference-card.item-stagger-13,.reference-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.reference-card.section-item-stagger-14,.reference-card.item-stagger-14,.reference-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.reference-card.section-item-stagger-15,.reference-card.item-stagger-15,.reference-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.reference-card__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between}.reference-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;flex:1}.reference-card__category{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.reference-card__meta{display:flex;flex-direction:row;align-items:center;gap:var(--space-4);width:100%;flex-wrap:wrap;margin-top:var(--space-1)}.reference-card__source,.reference-card__date{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1)}.reference-card__source lucide-icon,.reference-card__source svg,.reference-card__date lucide-icon,.reference-card__date svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.5}.reference-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.reference-empty lucide-icon,.reference-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.reference-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.network-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.network-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.network-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.network-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.network-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.network-card{transition:none}}.network-card.section-item-streaming,.network-card.item-streaming,.network-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.network-card.section-item-entered,.network-card.item-entered,.network-card.field-entered{animation:none}.network-card.section-item-stagger-0,.network-card.item-stagger-0,.network-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.network-card.section-item-stagger-1,.network-card.item-stagger-1,.network-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.network-card.section-item-stagger-2,.network-card.item-stagger-2,.network-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.network-card.section-item-stagger-3,.network-card.item-stagger-3,.network-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.network-card.section-item-stagger-4,.network-card.item-stagger-4,.network-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.network-card.section-item-stagger-5,.network-card.item-stagger-5,.network-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.network-card.section-item-stagger-6,.network-card.item-stagger-6,.network-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.network-card.section-item-stagger-7,.network-card.item-stagger-7,.network-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.network-card.section-item-stagger-8,.network-card.item-stagger-8,.network-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.network-card.section-item-stagger-9,.network-card.item-stagger-9,.network-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.network-card.section-item-stagger-10,.network-card.item-stagger-10,.network-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.network-card.section-item-stagger-11,.network-card.item-stagger-11,.network-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.network-card.section-item-stagger-12,.network-card.item-stagger-12,.network-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.network-card.section-item-stagger-13,.network-card.item-stagger-13,.network-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.network-card.section-item-stagger-14,.network-card.item-stagger-14,.network-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.network-card.section-item-stagger-15,.network-card.item-stagger-15,.network-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.network-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-lg);height:var(--icon-lg);color:var(--accent);flex-shrink:0;margin-bottom:var(--space-1)}.network-card__icon lucide-icon,.network-card__icon svg{width:calc(var(--icon-lg) * .6);height:calc(var(--icon-lg) * .6)}.network-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.network-card__type{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap;margin-bottom:var(--space-1)}.network-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.network-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.network-empty lucide-icon,.network-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.network-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.product-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.product-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.product-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.product-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.product-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.product-card{transition:none}}.product-card.section-item-streaming,.product-card.item-streaming,.product-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.product-card.section-item-entered,.product-card.item-entered,.product-card.field-entered{animation:none}.product-card.section-item-stagger-0,.product-card.item-stagger-0,.product-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.product-card.section-item-stagger-1,.product-card.item-stagger-1,.product-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.product-card.section-item-stagger-2,.product-card.item-stagger-2,.product-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.product-card.section-item-stagger-3,.product-card.item-stagger-3,.product-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.product-card.section-item-stagger-4,.product-card.item-stagger-4,.product-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.product-card.section-item-stagger-5,.product-card.item-stagger-5,.product-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.product-card.section-item-stagger-6,.product-card.item-stagger-6,.product-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.product-card.section-item-stagger-7,.product-card.item-stagger-7,.product-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.product-card.section-item-stagger-8,.product-card.item-stagger-8,.product-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.product-card.section-item-stagger-9,.product-card.item-stagger-9,.product-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.product-card.section-item-stagger-10,.product-card.item-stagger-10,.product-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.product-card.section-item-stagger-11,.product-card.item-stagger-11,.product-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.product-card.section-item-stagger-12,.product-card.item-stagger-12,.product-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.product-card.section-item-stagger-13,.product-card.item-stagger-13,.product-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.product-card.section-item-stagger-14,.product-card.item-stagger-14,.product-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.product-card.section-item-stagger-15,.product-card.item-stagger-15,.product-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.product-card__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between;margin-bottom:var(--space-1)}.product-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;flex:1}.product-card__category{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.product-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0 0 var(--space-3) 0}.product-card__features{display:flex;flex-direction:column;gap:var(--space-1);width:100%}.product-card__feature{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;align-items:center;gap:var(--space-2)}.product-card__feature lucide-icon,.product-card__feature svg{width:var(--icon-xs);height:var(--icon-xs);color:var(--status-success)}.product-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.product-empty lucide-icon,.product-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.product-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.solutions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.solutions-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.solution-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.solution-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.solution-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.solution-card{transition:none}}.solution-card.section-item-streaming,.solution-card.item-streaming,.solution-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.solution-card.section-item-entered,.solution-card.item-entered,.solution-card.field-entered{animation:none}.solution-card.section-item-stagger-0,.solution-card.item-stagger-0,.solution-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.solution-card.section-item-stagger-1,.solution-card.item-stagger-1,.solution-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.solution-card.section-item-stagger-2,.solution-card.item-stagger-2,.solution-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.solution-card.section-item-stagger-3,.solution-card.item-stagger-3,.solution-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.solution-card.section-item-stagger-4,.solution-card.item-stagger-4,.solution-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.solution-card.section-item-stagger-5,.solution-card.item-stagger-5,.solution-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.solution-card.section-item-stagger-6,.solution-card.item-stagger-6,.solution-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.solution-card.section-item-stagger-7,.solution-card.item-stagger-7,.solution-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.solution-card.section-item-stagger-8,.solution-card.item-stagger-8,.solution-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.solution-card.section-item-stagger-9,.solution-card.item-stagger-9,.solution-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.solution-card.section-item-stagger-10,.solution-card.item-stagger-10,.solution-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.solution-card.section-item-stagger-11,.solution-card.item-stagger-11,.solution-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.solution-card.section-item-stagger-12,.solution-card.item-stagger-12,.solution-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.solution-card.section-item-stagger-13,.solution-card.item-stagger-13,.solution-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.solution-card.section-item-stagger-14,.solution-card.item-stagger-14,.solution-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.solution-card.section-item-stagger-15,.solution-card.item-stagger-15,.solution-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.solution-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-xl);height:var(--icon-xl);color:var(--accent);flex-shrink:0;margin-bottom:var(--space-2)}.solution-card__icon lucide-icon,.solution-card__icon svg{width:calc(var(--icon-xl) * .6);height:calc(var(--icon-xl) * .6)}.solution-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.solution-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.solution-card__benefits{display:flex;flex-direction:column;gap:var(--space-1);width:100%;margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--border)}.solution-card__benefit{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;align-items:center;gap:var(--space-2)}.solution-card__benefit lucide-icon,.solution-card__benefit svg{width:var(--icon-xs);height:var(--icon-xs);color:var(--accent)}.solutions-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.solutions-empty lucide-icon,.solutions-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.solutions-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.timeline-grid{display:flex;flex-direction:column;gap:0;width:100%;position:relative;padding-left:var(--space-5)}.timeline-grid:before{content:\"\";position:absolute;left:var(--space-1);top:var(--space-3);bottom:var(--space-3);width:1px;background:var(--accent);opacity:.3}.timeline-item{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);position:relative}.timeline-item:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.timeline-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.timeline-item{transition:none}}.timeline-item.section-item-streaming,.timeline-item.item-streaming,.timeline-item.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.timeline-item.section-item-entered,.timeline-item.item-entered,.timeline-item.field-entered{animation:none}.timeline-item.section-item-stagger-0,.timeline-item.item-stagger-0,.timeline-item.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-1,.timeline-item.item-stagger-1,.timeline-item.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-2,.timeline-item.item-stagger-2,.timeline-item.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-3,.timeline-item.item-stagger-3,.timeline-item.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-4,.timeline-item.item-stagger-4,.timeline-item.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-5,.timeline-item.item-stagger-5,.timeline-item.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-6,.timeline-item.item-stagger-6,.timeline-item.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-7,.timeline-item.item-stagger-7,.timeline-item.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-8,.timeline-item.item-stagger-8,.timeline-item.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-9,.timeline-item.item-stagger-9,.timeline-item.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-10,.timeline-item.item-stagger-10,.timeline-item.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-11,.timeline-item.item-stagger-11,.timeline-item.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-12,.timeline-item.item-stagger-12,.timeline-item.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-13,.timeline-item.item-stagger-13,.timeline-item.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-14,.timeline-item.item-stagger-14,.timeline-item.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.timeline-item.section-item-stagger-15,.timeline-item.item-stagger-15,.timeline-item.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.timeline-item:before{content:\"\";position:absolute;left:calc(-1 * var(--space-5) + var(--space-1) - 3px);top:var(--space-3);width:7px;height:7px;background:var(--accent);border-radius:var(--radius-full);z-index:1}.timeline-item__date{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap;margin-bottom:var(--space-1)}.timeline-item__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.timeline-item__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.timeline-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.timeline-empty lucide-icon,.timeline-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.timeline-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.brand-colors-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.brand-colors-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.brand-color-tile{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:0;overflow:hidden}.brand-color-tile:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.brand-color-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.brand-color-tile{transition:none}}.brand-color-tile.section-item-streaming,.brand-color-tile.item-streaming,.brand-color-tile.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.brand-color-tile.section-item-entered,.brand-color-tile.item-entered,.brand-color-tile.field-entered{animation:none}.brand-color-tile.section-item-stagger-0,.brand-color-tile.item-stagger-0,.brand-color-tile.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-1,.brand-color-tile.item-stagger-1,.brand-color-tile.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-2,.brand-color-tile.item-stagger-2,.brand-color-tile.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-3,.brand-color-tile.item-stagger-3,.brand-color-tile.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-4,.brand-color-tile.item-stagger-4,.brand-color-tile.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-5,.brand-color-tile.item-stagger-5,.brand-color-tile.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-6,.brand-color-tile.item-stagger-6,.brand-color-tile.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-7,.brand-color-tile.item-stagger-7,.brand-color-tile.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-8,.brand-color-tile.item-stagger-8,.brand-color-tile.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-9,.brand-color-tile.item-stagger-9,.brand-color-tile.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-10,.brand-color-tile.item-stagger-10,.brand-color-tile.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-11,.brand-color-tile.item-stagger-11,.brand-color-tile.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-12,.brand-color-tile.item-stagger-12,.brand-color-tile.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-13,.brand-color-tile.item-stagger-13,.brand-color-tile.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-14,.brand-color-tile.item-stagger-14,.brand-color-tile.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.brand-color-tile.section-item-stagger-15,.brand-color-tile.item-stagger-15,.brand-color-tile.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.brand-color-tile__swatch{width:100%;height:48px}.brand-color-tile__info{padding:var(--space-2)}.brand-color-tile__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;font-size:var(--card-subtitle-font-size);margin:0 0 var(--space-0) 0}.brand-color-tile__code{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);font-family:SF Mono,Monaco,Consolas,monospace}.brand-colors-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.brand-colors-empty lucide-icon,.brand-colors-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.brand-colors-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.social-feed{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.social-feed{grid-template-columns:1fr;gap:var(--gap-sm)}}.social-post{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.social-post:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.social-post:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.social-post{transition:none}}.social-post.section-item-streaming,.social-post.item-streaming,.social-post.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.social-post.section-item-entered,.social-post.item-entered,.social-post.field-entered{animation:none}.social-post.section-item-stagger-0,.social-post.item-stagger-0,.social-post.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.social-post.section-item-stagger-1,.social-post.item-stagger-1,.social-post.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.social-post.section-item-stagger-2,.social-post.item-stagger-2,.social-post.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.social-post.section-item-stagger-3,.social-post.item-stagger-3,.social-post.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.social-post.section-item-stagger-4,.social-post.item-stagger-4,.social-post.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.social-post.section-item-stagger-5,.social-post.item-stagger-5,.social-post.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.social-post.section-item-stagger-6,.social-post.item-stagger-6,.social-post.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.social-post.section-item-stagger-7,.social-post.item-stagger-7,.social-post.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.social-post.section-item-stagger-8,.social-post.item-stagger-8,.social-post.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.social-post.section-item-stagger-9,.social-post.item-stagger-9,.social-post.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.social-post.section-item-stagger-10,.social-post.item-stagger-10,.social-post.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.social-post.section-item-stagger-11,.social-post.item-stagger-11,.social-post.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.social-post.section-item-stagger-12,.social-post.item-stagger-12,.social-post.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.social-post.section-item-stagger-13,.social-post.item-stagger-13,.social-post.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.social-post.section-item-stagger-14,.social-post.item-stagger-14,.social-post.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.social-post.section-item-stagger-15,.social-post.item-stagger-15,.social-post.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.social-post__header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;margin-bottom:var(--space-2)}.social-post__platform{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap;text-transform:capitalize}.social-post__handle{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.social-post__followers{font-size:var(--card-value-font-size);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);margin-bottom:var(--space-1)}.social-post__label{font-size:var(--card-label-font-size);font-weight:var(--card-label-font-weight);letter-spacing:var(--card-label-letter-spacing);text-transform:var(--card-label-text-transform);color:var(--muted-foreground);line-height:var(--card-label-line-height)}.social-post__content{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:var(--space-2) 0 0 0}.social-media-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.social-media-empty lucide-icon,.social-media-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.social-media-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.gallery-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.gallery-item{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:0;overflow:hidden;aspect-ratio:4/3}.gallery-item:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.gallery-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.gallery-item{transition:none}}.gallery-item.section-item-streaming,.gallery-item.item-streaming,.gallery-item.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.gallery-item.section-item-entered,.gallery-item.item-entered,.gallery-item.field-entered{animation:none}.gallery-item.section-item-stagger-0,.gallery-item.item-stagger-0,.gallery-item.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-1,.gallery-item.item-stagger-1,.gallery-item.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-2,.gallery-item.item-stagger-2,.gallery-item.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-3,.gallery-item.item-stagger-3,.gallery-item.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-4,.gallery-item.item-stagger-4,.gallery-item.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-5,.gallery-item.item-stagger-5,.gallery-item.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-6,.gallery-item.item-stagger-6,.gallery-item.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-7,.gallery-item.item-stagger-7,.gallery-item.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-8,.gallery-item.item-stagger-8,.gallery-item.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-9,.gallery-item.item-stagger-9,.gallery-item.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-10,.gallery-item.item-stagger-10,.gallery-item.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-11,.gallery-item.item-stagger-11,.gallery-item.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-12,.gallery-item.item-stagger-12,.gallery-item.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-13,.gallery-item.item-stagger-13,.gallery-item.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-14,.gallery-item.item-stagger-14,.gallery-item.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.gallery-item.section-item-stagger-15,.gallery-item.item-stagger-15,.gallery-item.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.gallery-item__image{width:100%;height:100%;object-fit:cover}.gallery-item__caption{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);position:absolute;bottom:0;left:0;right:0;padding:var(--space-2);background:linear-gradient(transparent,#000000b3);color:#fff}.gallery-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.gallery-empty lucide-icon,.gallery-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.gallery-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.video-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.video-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.video-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:0;overflow:hidden}.video-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.video-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.video-card{transition:none}}.video-card.section-item-streaming,.video-card.item-streaming,.video-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.video-card.section-item-entered,.video-card.item-entered,.video-card.field-entered{animation:none}.video-card.section-item-stagger-0,.video-card.item-stagger-0,.video-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.video-card.section-item-stagger-1,.video-card.item-stagger-1,.video-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.video-card.section-item-stagger-2,.video-card.item-stagger-2,.video-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.video-card.section-item-stagger-3,.video-card.item-stagger-3,.video-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.video-card.section-item-stagger-4,.video-card.item-stagger-4,.video-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.video-card.section-item-stagger-5,.video-card.item-stagger-5,.video-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.video-card.section-item-stagger-6,.video-card.item-stagger-6,.video-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.video-card.section-item-stagger-7,.video-card.item-stagger-7,.video-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.video-card.section-item-stagger-8,.video-card.item-stagger-8,.video-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.video-card.section-item-stagger-9,.video-card.item-stagger-9,.video-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.video-card.section-item-stagger-10,.video-card.item-stagger-10,.video-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.video-card.section-item-stagger-11,.video-card.item-stagger-11,.video-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.video-card.section-item-stagger-12,.video-card.item-stagger-12,.video-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.video-card.section-item-stagger-13,.video-card.item-stagger-13,.video-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.video-card.section-item-stagger-14,.video-card.item-stagger-14,.video-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.video-card.section-item-stagger-15,.video-card.item-stagger-15,.video-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.video-card__thumbnail{width:100%;height:90px;background:#ff79001a;display:flex;align-items:center;justify-content:center;position:relative}.video-card__thumbnail img{width:100%;height:100%;object-fit:cover}.video-card__thumbnail:after{content:\"\\25b6\";position:absolute;width:28px;height:28px;background:#0009;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;font-size:.7rem;color:#fff;padding-left:2px}.video-card__info{padding:var(--space-2) var(--space-3)}.video-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.video-card__meta{display:flex;flex-direction:row;align-items:center;gap:var(--space-3);width:100%}.video-card__duration,.video-card__views{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1)}.video-card__duration lucide-icon,.video-card__duration svg,.video-card__views lucide-icon,.video-card__views svg{width:var(--icon-xs);height:var(--icon-xs);opacity:.5}.video-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.video-empty lucide-icon,.video-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.video-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.chart-container{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);min-height:180px}.chart-container:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.chart-container:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.chart-container{transition:none}}.chart-container canvas{max-width:100%;height:auto!important}.chart-header{display:flex;flex-direction:row;align-items:center;gap:var(--space-2);width:100%;justify-content:space-between;margin-bottom:var(--space-3)}.chart-title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.chart-legend{display:flex;flex-direction:row;align-items:center;gap:var(--space-4);width:100%}.chart-legend__item{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:inline-flex;align-items:center;gap:var(--space-1)}.chart-legend__color{width:8px;height:8px;border-radius:var(--radius-xs)}.chart-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.chart-empty lucide-icon,.chart-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.chart-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.list-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.list-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);flex-direction:row;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3)}.list-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.list-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.list-card{transition:none}}.list-card.section-item-streaming,.list-card.item-streaming,.list-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.list-card.section-item-entered,.list-card.item-entered,.list-card.field-entered{animation:none}.list-card.section-item-stagger-0,.list-card.item-stagger-0,.list-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.list-card.section-item-stagger-1,.list-card.item-stagger-1,.list-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.list-card.section-item-stagger-2,.list-card.item-stagger-2,.list-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.list-card.section-item-stagger-3,.list-card.item-stagger-3,.list-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.list-card.section-item-stagger-4,.list-card.item-stagger-4,.list-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.list-card.section-item-stagger-5,.list-card.item-stagger-5,.list-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.list-card.section-item-stagger-6,.list-card.item-stagger-6,.list-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.list-card.section-item-stagger-7,.list-card.item-stagger-7,.list-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.list-card.section-item-stagger-8,.list-card.item-stagger-8,.list-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.list-card.section-item-stagger-9,.list-card.item-stagger-9,.list-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.list-card.section-item-stagger-10,.list-card.item-stagger-10,.list-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.list-card.section-item-stagger-11,.list-card.item-stagger-11,.list-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.list-card.section-item-stagger-12,.list-card.item-stagger-12,.list-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.list-card.section-item-stagger-13,.list-card.item-stagger-13,.list-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.list-card.section-item-stagger-14,.list-card.item-stagger-14,.list-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.list-card.section-item-stagger-15,.list-card.item-stagger-15,.list-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.list-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-lg);height:var(--icon-lg);color:var(--accent);flex-shrink:0}.list-card__icon lucide-icon,.list-card__icon svg{width:calc(var(--icon-lg) * .6);height:calc(var(--icon-lg) * .6)}.list-card__content{display:flex;flex-direction:column;gap:var(--space-0);width:100%;flex:1;min-width:0}.list-card__title{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.list-card__description{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.list-card__badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);font-size:var(--card-text-small-font-size);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:#ff79001a;border-radius:var(--radius-xs);white-space:nowrap}.list-card__badge.status--completed,.list-card__badge.status--success{color:var(--status-success);background:var(--status-success-bg)}.list-card__badge.status--active,.list-card__badge.status--in-progress{color:var(--accent);background:#ff79001a}.list-card__badge.status--pending,.list-card__badge.status--warning{color:var(--status-warning);background:var(--status-warning-bg)}.list-card__badge.status--blocked,.list-card__badge.status--cancelled,.list-card__badge.status--error{color:var(--status-error);background:var(--status-error-bg)}.list-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.list-empty lucide-icon,.list-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.list-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.map-container{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);padding:var(--space-5);min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);text-align:center}.map-container:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.map-container:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.map-container{transition:none}}.map-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.map-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.map-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.map-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.map-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.map-card{transition:none}}.map-card.section-item-streaming,.map-card.item-streaming,.map-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.map-card.section-item-entered,.map-card.item-entered,.map-card.field-entered{animation:none}.map-card.section-item-stagger-0,.map-card.item-stagger-0,.map-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.map-card.section-item-stagger-1,.map-card.item-stagger-1,.map-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.map-card.section-item-stagger-2,.map-card.item-stagger-2,.map-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.map-card.section-item-stagger-3,.map-card.item-stagger-3,.map-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.map-card.section-item-stagger-4,.map-card.item-stagger-4,.map-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.map-card.section-item-stagger-5,.map-card.item-stagger-5,.map-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.map-card.section-item-stagger-6,.map-card.item-stagger-6,.map-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.map-card.section-item-stagger-7,.map-card.item-stagger-7,.map-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.map-card.section-item-stagger-8,.map-card.item-stagger-8,.map-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.map-card.section-item-stagger-9,.map-card.item-stagger-9,.map-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.map-card.section-item-stagger-10,.map-card.item-stagger-10,.map-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.map-card.section-item-stagger-11,.map-card.item-stagger-11,.map-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.map-card.section-item-stagger-12,.map-card.item-stagger-12,.map-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.map-card.section-item-stagger-13,.map-card.item-stagger-13,.map-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.map-card.section-item-stagger-14,.map-card.item-stagger-14,.map-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.map-card.section-item-stagger-15,.map-card.item-stagger-15,.map-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.map-card__icon{display:flex;align-items:center;justify-content:center;width:var(--icon-lg);height:var(--icon-lg);color:var(--accent);flex-shrink:0;margin-bottom:var(--space-2)}.map-card__icon lucide-icon,.map-card__icon svg{width:calc(var(--icon-lg) * .6);height:calc(var(--icon-lg) * .6)}.map-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-1) 0}.map-card__address{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0 0 var(--space-1) 0}.map-card__coordinates{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);font-family:SF Mono,Monaco,Consolas,monospace}.map-location{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0}.map-placeholder{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height)}.map-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.map-empty lucide-icon,.map-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.map-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.faq-grid{display:flex;flex-direction:column;gap:var(--gap-xs);width:100%}.faq-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth)}.faq-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.faq-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.faq-card{transition:none}}.faq-card.section-item-streaming,.faq-card.item-streaming,.faq-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.faq-card.section-item-entered,.faq-card.item-entered,.faq-card.field-entered{animation:none}.faq-card.section-item-stagger-0,.faq-card.item-stagger-0,.faq-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.faq-card.section-item-stagger-1,.faq-card.item-stagger-1,.faq-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.faq-card.section-item-stagger-2,.faq-card.item-stagger-2,.faq-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.faq-card.section-item-stagger-3,.faq-card.item-stagger-3,.faq-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.faq-card.section-item-stagger-4,.faq-card.item-stagger-4,.faq-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.faq-card.section-item-stagger-5,.faq-card.item-stagger-5,.faq-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.faq-card.section-item-stagger-6,.faq-card.item-stagger-6,.faq-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.faq-card.section-item-stagger-7,.faq-card.item-stagger-7,.faq-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.faq-card.section-item-stagger-8,.faq-card.item-stagger-8,.faq-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.faq-card.section-item-stagger-9,.faq-card.item-stagger-9,.faq-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.faq-card.section-item-stagger-10,.faq-card.item-stagger-10,.faq-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.faq-card.section-item-stagger-11,.faq-card.item-stagger-11,.faq-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.faq-card.section-item-stagger-12,.faq-card.item-stagger-12,.faq-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.faq-card.section-item-stagger-13,.faq-card.item-stagger-13,.faq-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.faq-card.section-item-stagger-14,.faq-card.item-stagger-14,.faq-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.faq-card.section-item-stagger-15,.faq-card.item-stagger-15,.faq-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.faq-card__question{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-2) 0}.faq-card__answer{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0;padding-left:var(--space-3);border-left:2px solid var(--accent);opacity:.9}.faq-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.faq-empty lucide-icon,.faq-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.faq-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.pricing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--section-card-gap);width:100%}@media (max-width: 480px){.pricing-grid{grid-template-columns:1fr;gap:var(--gap-sm)}}.pricing-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius, var(--radius-md));display:flex;flex-direction:column;gap:var(--card-element-gap-md);padding:var(--space-3) var(--space-4);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;transition:background var(--duration-normal) var(--ease-out-smooth),border-color var(--duration-normal) var(--ease-out-smooth),box-shadow var(--duration-normal) var(--ease-out-smooth);text-align:center}.pricing-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.pricing-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.pricing-card{transition:none}}.pricing-card.section-item-streaming,.pricing-card.item-streaming,.pricing-card.field-streaming{animation:unified-stream-in var(--duration-moderate) var(--ease-out-smooth) var(--animation-fill-mode)}.pricing-card.section-item-entered,.pricing-card.item-entered,.pricing-card.field-entered{animation:none}.pricing-card.section-item-stagger-0,.pricing-card.item-stagger-0,.pricing-card.field-stagger-0{animation-delay:calc(0 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-1,.pricing-card.item-stagger-1,.pricing-card.field-stagger-1{animation-delay:calc(1 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-2,.pricing-card.item-stagger-2,.pricing-card.field-stagger-2{animation-delay:calc(2 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-3,.pricing-card.item-stagger-3,.pricing-card.field-stagger-3{animation-delay:calc(3 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-4,.pricing-card.item-stagger-4,.pricing-card.field-stagger-4{animation-delay:calc(4 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-5,.pricing-card.item-stagger-5,.pricing-card.field-stagger-5{animation-delay:calc(5 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-6,.pricing-card.item-stagger-6,.pricing-card.field-stagger-6{animation-delay:calc(6 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-7,.pricing-card.item-stagger-7,.pricing-card.field-stagger-7{animation-delay:calc(7 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-8,.pricing-card.item-stagger-8,.pricing-card.field-stagger-8{animation-delay:calc(8 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-9,.pricing-card.item-stagger-9,.pricing-card.field-stagger-9{animation-delay:calc(9 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-10,.pricing-card.item-stagger-10,.pricing-card.field-stagger-10{animation-delay:calc(10 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-11,.pricing-card.item-stagger-11,.pricing-card.field-stagger-11{animation-delay:calc(11 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-12,.pricing-card.item-stagger-12,.pricing-card.field-stagger-12{animation-delay:calc(12 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-13,.pricing-card.item-stagger-13,.pricing-card.field-stagger-13{animation-delay:calc(13 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-14,.pricing-card.item-stagger-14,.pricing-card.field-stagger-14{animation-delay:calc(14 * var(--stagger-delay-base))}.pricing-card.section-item-stagger-15,.pricing-card.item-stagger-15,.pricing-card.field-stagger-15{animation-delay:calc(15 * var(--stagger-delay-base))}.pricing-card__name{font-size:var(--card-title-font-size);font-weight:var(--card-title-font-weight);letter-spacing:var(--card-title-letter-spacing);color:var(--foreground);line-height:var(--card-title-line-height);margin:0;margin:0 0 var(--space-3) 0}.pricing-card__price{font-size:var(--card-value-font-size-large);font-weight:var(--card-value-font-weight);letter-spacing:var(--card-value-letter-spacing);color:var(--foreground);line-height:var(--card-value-line-height);color:var(--accent);margin-bottom:var(--space-1)}.pricing-card__period{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);margin-bottom:var(--space-4)}.pricing-card__features{display:flex;flex-direction:column;gap:var(--space-2);width:100%;text-align:left;padding-top:var(--space-4);border-top:1px solid var(--border)}.pricing-card__feature{font-size:var(--card-meta-font-size);font-weight:var(--card-meta-font-weight);color:var(--muted-foreground);line-height:var(--card-meta-line-height);display:flex;align-items:center;gap:var(--space-2)}.pricing-card__feature lucide-icon,.pricing-card__feature svg{width:var(--icon-xs);height:var(--icon-xs);color:var(--status-success)}.pricing-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.pricing-empty lucide-icon,.pricing-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.pricing-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.fallback-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--muted-foreground);background:var(--section-item-background);border-radius:var(--section-item-border-radius);border:1px dashed var(--border)}.fallback-empty lucide-icon,.fallback-empty svg{opacity:.4;width:var(--icon-lg);height:var(--icon-lg)}.fallback-empty p{margin:0;font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height)}.fallback-message{font-size:var(--card-subtitle-font-size);font-weight:var(--card-subtitle-font-weight);letter-spacing:var(--card-subtitle-letter-spacing);color:var(--muted-foreground);line-height:var(--card-subtitle-line-height);margin:0}.ai-section__body{width:100%;box-sizing:border-box}app-card-actions{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:.75rem!important;margin-top:12px!important;margin-left:4px!important;margin-right:4px!important;padding-bottom:16px!important}.osi-action-button{margin:0!important;-webkit-appearance:none!important;appearance:none!important;display:inline-flex!important;align-items:center!important;gap:.5rem!important;padding:.625rem 1.25rem!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:.875rem!important;font-weight:600!important;line-height:1.25rem!important;text-decoration:none!important;white-space:nowrap!important;cursor:pointer!important;border-radius:10px!important;transition:all .2s ease!important;box-sizing:border-box!important}.osi-action-button--primary{background-color:#ff7900!important;color:#fff!important;border:none!important;box-shadow:0 2px 8px #ff790040!important}.osi-action-button--primary *{color:#fff!important}.osi-action-button--primary:hover{background-color:#e66d00!important;color:#fff!important;box-shadow:0 4px 16px #ff790066!important;transform:translateY(-1px)!important}.osi-action-button--primary:active{background-color:#cc6000!important;color:#fff!important;transform:scale(.98) translateY(0)!important;box-shadow:0 2px 4px #ff790033!important}.osi-action-button--primary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button--secondary{background-color:transparent!important;color:#fff!important;border:2px solid #ff7900!important}.osi-action-button--secondary *{color:#fff!important}.osi-action-button--secondary:hover{background-color:#ff79001a!important;color:#fff!important;box-shadow:0 2px 8px #ff790033!important}.osi-action-button--secondary:active{background-color:#ff790026!important;color:#fff!important;transform:scale(.98)!important}.osi-action-button--secondary:focus-visible{outline:2px solid #ff7900!important;outline-offset:2px!important}.osi-action-button__label{color:#fff!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.osi-action-button__icon{width:18px!important;height:18px!important;object-fit:contain!important;flex-shrink:0!important}.osi-action-button__emoji{font-size:16px!important;line-height:1!important;flex-shrink:0!important}.osi-action-button lucide-icon{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.osi-action-button lucide-icon svg{width:16px!important;height:16px!important;stroke:currentColor!important;fill:none!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.card-signature{display:block!important;width:100%!important;box-sizing:border-box!important;margin:0!important;padding:12px 16px!important;font-family:Helvetica,Helvetica Neue,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif!important;font-size:11px!important;font-weight:400!important;line-height:1.4!important;letter-spacing:.02em!important;text-align:center!important;color:#646464b3!important;background:transparent!important;border:none!important;text-decoration:none!important}:host([data-theme=night]) .card-signature,:host-context([data-theme=night]) .card-signature{color:#c8c8c899!important}@media (prefers-reduced-motion: reduce){:host{--duration-instant: 1ms;--duration-fast: 1ms;--duration-normal: 1ms;--duration-moderate: 1ms;--duration-slow: 1ms;--duration-slower: 1ms;--duration-slowest: 1ms;--stagger-delay-base: 0ms;--stagger-delay-fast: 0ms;--stagger-delay-slow: 0ms;--ai-card-entrance-animation: none;--section-entrance-animation: none;--section-item-entrance-animation: none}}@media (prefers-contrast: high){:host{--foreground: #ffffff;--background: #000000;--muted-foreground: #ffffff;--muted: #000000;--border: #ffffff;--card: #000000;--card-foreground: #ffffff;--ai-card-border: 2px solid #ffffff;--section-border: 2px solid #ffffff;--button-border: 2px solid #ffffff;--card-background: #000000;--card-background-hover: #1a1a1a;--section-item-background: #000000;--section-item-background-hover: #1a1a1a}}@media (forced-colors: active){:host{--foreground: ButtonText;--background: Canvas;--border: ButtonBorder;--card: Canvas;--card-foreground: ButtonText}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: LucideIconsModule }, { kind: "component", type: CardHeaderComponent, selector: "app-card-header", inputs: ["cardTitle", "showExport"], outputs: ["export"] }, { kind: "component", type: CardSectionListComponent, selector: "app-card-section-list", inputs: ["sections", "containerWidth", "isStreaming"], outputs: ["sectionEvent", "layoutChange"] }, { kind: "component", type: CardActionsComponent, selector: "app-card-actions", inputs: ["actions"], outputs: ["actionClick"] }], animations: [
|
|
27490
29200
|
trigger('messageAnimation', [
|
|
27491
29201
|
transition('* => *', [
|
|
27492
29202
|
style({ opacity: 0, transform: 'translateY(10px)' }),
|
|
@@ -27558,6 +29268,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
27558
29268
|
}], emptyStateContainer: [{
|
|
27559
29269
|
type: ViewChild,
|
|
27560
29270
|
args: ['emptyStateContainer']
|
|
29271
|
+
}], llmFallbackEndpoint: [{
|
|
29272
|
+
type: Input
|
|
29273
|
+
}], llmFallbackPrompt: [{
|
|
29274
|
+
type: Input
|
|
27561
29275
|
}] } });
|
|
27562
29276
|
|
|
27563
29277
|
/**
|
|
@@ -27736,7 +29450,7 @@ class CardPreviewComponent {
|
|
|
27736
29450
|
this.questionAction.emit(event);
|
|
27737
29451
|
}
|
|
27738
29452
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CardPreviewComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27739
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CardPreviewComponent, isStandalone: true, selector: "app-card-preview", inputs: { generatedCard: "generatedCard", isGenerating: "isGenerating", isInitialized: "isInitialized", isFullscreen: "isFullscreen" }, outputs: { cardInteraction: "cardInteraction", fieldInteraction: "fieldInteraction", fullscreenToggle: "fullscreenToggle", agentAction: "agentAction", questionAction: "questionAction" }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <!-- Initial loading state -->\n <ng-container *ngIf=\"!isInitialized; else initializedState\">\n <div class=\"preview-loading\" role=\"status\">\n <div class=\"preview-spinner\"></div>\n <div>\n <p class=\"preview-loading-title\">Initializing System\u2026</p>\n <p class=\"preview-loading-subtitle\">Loading templates and services</p>\n </div>\n </div>\n </ng-container>\n\n <ng-template #initializedState>\n <!-- Show skeleton frame only when generating -->\n <ng-container *ngIf=\"showSkeleton; else cardContent\">\n <app-card-skeleton\n [cardTitle]=\"generatedCard?.cardTitle || ''\"\n [sectionCount]=\"generatedCard?.sections?.length || 0\"\n [isFullscreen]=\"isFullscreen\"\n >\n </app-card-skeleton>\n </ng-container>\n\n <ng-template #cardContent>\n <!-- Show card if we have generatedCard -->\n <ng-container *ngIf=\"generatedCard; else previewEmpty\">\n <div class=\"card-preview-container\">\n <app-ai-card-renderer\n [cardConfig]=\"generatedCard\"\n [updateSource]=\"'liveEdit'\"\n [isFullscreen]=\"isFullscreen\"\n (cardInteraction)=\"onCardInteraction($event)\"\n (fieldInteraction)=\"onFieldInteraction($event)\"\n (fullscreenToggle)=\"onFullscreenToggle($event)\"\n (agentAction)=\"onAgentAction($event)\"\n (questionAction)=\"onQuestionAction($event)\"\n >\n </app-ai-card-renderer>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #previewEmpty>\n <div class=\"preview-empty\">\n <div class=\"preview-empty-icon\" aria-hidden=\"true\">\n <div class=\"code-icon w-8 h-8\"></div>\n </div>\n <div class=\"preview-empty-copy\">\n <p class=\"preview-empty-title\">No Card Preview</p>\n <p class=\"preview-empty-subtitle\">\n Enter a valid JSON configuration or load a template to see your card design render in real time.\n </p>\n </div>\n <div class=\"preview-empty-hints\">\n <div class=\"preview-empty-hint\">\n <div class=\"hint-dot bg-green-500\"></div>\n <span>Valid JSON auto-generates layouts</span>\n </div>\n <div class=\"preview-empty-hint\">\n <div class=\"hint-dot bg-blue-500\"></div>\n <span>Magnetic tilt responds to cursor position</span>\n </div>\n <div class=\"preview-empty-hint\">\n <div class=\"hint-dot bg-purple-500\"></div>\n <span>Export high-fidelity PNG snapshots</span>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-container>\n", styles: [":host{display:block;width:100%;height:100%}.preview-shell{position:relative;padding:clamp(1.5rem,3vw,2.25rem);border-radius:1.25rem;background:color-mix(in srgb,var(--card, #0c0c0c) 90%,transparent);border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent);box-shadow:0 4px 14px #0000002e,0 0 12px color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent);backdrop-filter:blur(20px);overflow:hidden}.preview-shell:before,.preview-shell:after{content:\"\";position:absolute;inset:0;opacity:0;pointer-events:none}.preview-header{position:relative;z-index:1;display:flex;align-items:center;gap:.75rem;margin-bottom:1.75rem}.preview-heading{display:flex;flex-direction:column;gap:.25rem}.preview-title{font-size:1.125rem;font-weight:700;color:var(--foreground, #ffffff)}.preview-subtitle{font-size:.85rem;color:var(--muted-foreground, #aaaaaa);letter-spacing:.05em;text-transform:uppercase}app-ai-card-renderer{display:block;width:100%;height:100%}.card-preview-container{display:block;width:100%;height:100%;transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1);will-change:opacity,transform;animation:fadeInScale .5s cubic-bezier(.4,0,.2,1)}@keyframes fadeInScale{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.preview-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2rem;text-align:center;padding:5rem 1.5rem;position:relative;min-height:400px}.preview-loading:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at center,color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent) 0%,transparent 70%);animation:pulseGlow 2s ease-in-out infinite;pointer-events:none}@keyframes pulseGlow{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.preview-spinner{width:3.5rem;height:3.5rem;border-radius:999px;border:4px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);border-top-color:var(--color-brand, #ff7900);border-right-color:var(--color-brand, #ff7900);animation:spin .8s linear infinite;position:relative;z-index:1;box-shadow:0 0 20px color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent)}.preview-spinner:after{content:\"\";position:absolute;inset:-4px;border-radius:999px;border:4px solid transparent;border-top-color:color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);animation:spin 1.2s linear infinite reverse}.preview-loading-title{font-size:1.25rem;font-weight:700;color:var(--foreground, #ffffff);position:relative;z-index:1;letter-spacing:-.01em;animation:fadeInUp .6s ease-out}.preview-loading-subtitle{font-size:.9375rem;color:var(--muted-foreground, #aaaaaa);position:relative;z-index:1;animation:fadeInUp .6s ease-out .2s both}.preview-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:2rem;padding:5rem 1.5rem;position:relative;min-height:400px}.preview-empty:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at center,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%);animation:pulseGlow 3s ease-in-out infinite;pointer-events:none}.preview-empty-icon{width:5rem;height:5rem;border-radius:999px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent),color-mix(in srgb,var(--color-brand, #ff7900) 12%,transparent));border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);box-shadow:0 8px 24px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent),inset 0 0 0 1px color-mix(in srgb,var(--color-white, #ffffff) 10%,transparent);position:relative;z-index:1;animation:float 3s ease-in-out infinite}.preview-empty-icon:after{content:\"\";position:absolute;inset:-4px;border-radius:999px;border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);animation:pulseRing 2s ease-in-out infinite}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes pulseRing{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.3)}}.preview-empty-title{font-size:1.375rem;font-weight:700;color:var(--foreground, #ffffff);letter-spacing:-.01em;position:relative;z-index:1;animation:fadeInUp .6s ease-out}.preview-empty-subtitle{font-size:1rem;color:var(--muted-foreground, #aaaaaa);max-width:28rem;line-height:1.6;position:relative;z-index:1;animation:fadeInUp .6s ease-out .2s both}.preview-empty-hints{display:flex;flex-direction:column;gap:1rem;font-size:.875rem;color:var(--muted-foreground, #aaaaaa);position:relative;z-index:1;animation:fadeInUp .6s ease-out .4s both}.preview-empty-hint{display:flex;align-items:center;gap:.75rem;justify-content:center;padding:.5rem 1rem;background:color-mix(in srgb,var(--card-background, var(--card, #1c1c1f)) 80%,transparent);border:1px solid color-mix(in srgb,var(--border, rgba(200, 200, 200, .3)) 50%,transparent);border-radius:.5rem;transition:all .3s ease}.preview-empty-hint:hover{background:color-mix(in srgb,var(--card-background, var(--card, #1c1c1f)) 90%,transparent);border-color:color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent);transform:translate(4px)}.hint-dot{width:8px;height:8px;border-radius:999px;box-shadow:0 0 12px currentColor;flex-shrink:0;animation:pulse 2s ease-in-out infinite}.badge{background-color:color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);color:var(--primary, #ff7900);border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent);padding:.3rem .6rem;border-radius:999px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin-left:auto}.sparkles-icon,.code-icon{display:inline-flex;align-items:center;justify-content:center}.sparkles-icon:before{content:\"\\2728\";font-size:1.2rem;color:var(--primary, #ff7900)}.code-icon:before{content:\"\\1f4bb\";font-size:1.2rem;color:var(--primary, #ff7900)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (min-width: 768px){.preview-empty{padding:5rem 2rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AICardRendererComponent, selector: "app-ai-card-renderer", inputs: ["loadingMessages", "loadingTitle", "cardConfig", "updateSource", "isFullscreen", "tiltEnabled", "streamingStage", "streamingProgress", "streamingProgressLabel", "isStreaming", "showLoadingByDefault", "containerWidth", "changeType"], outputs: ["fieldInteraction", "cardInteraction", "fullscreenToggle", "agentAction", "questionAction", "export"] }, { kind: "component", type: CardSkeletonComponent, selector: "app-card-skeleton", inputs: ["cardTitle", "sectionCount", "isFullscreen", "sections", "animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
29453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CardPreviewComponent, isStandalone: true, selector: "app-card-preview", inputs: { generatedCard: "generatedCard", isGenerating: "isGenerating", isInitialized: "isInitialized", isFullscreen: "isFullscreen" }, outputs: { cardInteraction: "cardInteraction", fieldInteraction: "fieldInteraction", fullscreenToggle: "fullscreenToggle", agentAction: "agentAction", questionAction: "questionAction" }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <!-- Initial loading state -->\n <ng-container *ngIf=\"!isInitialized; else initializedState\">\n <div class=\"preview-loading\" role=\"status\">\n <div class=\"preview-spinner\"></div>\n <div>\n <p class=\"preview-loading-title\">Initializing System\u2026</p>\n <p class=\"preview-loading-subtitle\">Loading templates and services</p>\n </div>\n </div>\n </ng-container>\n\n <ng-template #initializedState>\n <!-- Show skeleton frame only when generating -->\n <ng-container *ngIf=\"showSkeleton; else cardContent\">\n <app-card-skeleton\n [cardTitle]=\"generatedCard?.cardTitle || ''\"\n [sectionCount]=\"generatedCard?.sections?.length || 0\"\n [isFullscreen]=\"isFullscreen\"\n >\n </app-card-skeleton>\n </ng-container>\n\n <ng-template #cardContent>\n <!-- Show card if we have generatedCard -->\n <ng-container *ngIf=\"generatedCard; else previewEmpty\">\n <div class=\"card-preview-container\">\n <app-ai-card-renderer\n [cardConfig]=\"generatedCard\"\n [updateSource]=\"'liveEdit'\"\n [isFullscreen]=\"isFullscreen\"\n (cardInteraction)=\"onCardInteraction($event)\"\n (fieldInteraction)=\"onFieldInteraction($event)\"\n (fullscreenToggle)=\"onFullscreenToggle($event)\"\n (agentAction)=\"onAgentAction($event)\"\n (questionAction)=\"onQuestionAction($event)\"\n >\n </app-ai-card-renderer>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #previewEmpty>\n <div class=\"preview-empty\">\n <div class=\"preview-empty-icon\" aria-hidden=\"true\">\n <div class=\"code-icon w-8 h-8\"></div>\n </div>\n <div class=\"preview-empty-copy\">\n <p class=\"preview-empty-title\">No Card Preview</p>\n <p class=\"preview-empty-subtitle\">\n Enter a valid JSON configuration or load a template to see your card design render in real time.\n </p>\n </div>\n <div class=\"preview-empty-hints\">\n <div class=\"preview-empty-hint\">\n <div class=\"hint-dot bg-green-500\"></div>\n <span>Valid JSON auto-generates layouts</span>\n </div>\n <div class=\"preview-empty-hint\">\n <div class=\"hint-dot bg-blue-500\"></div>\n <span>Magnetic tilt responds to cursor position</span>\n </div>\n <div class=\"preview-empty-hint\">\n <div class=\"hint-dot bg-purple-500\"></div>\n <span>Export high-fidelity PNG snapshots</span>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-container>\n", styles: [":host{display:block;width:100%;height:100%}.preview-shell{position:relative;padding:clamp(1.5rem,3vw,2.25rem);border-radius:1.25rem;background:color-mix(in srgb,var(--card, #0c0c0c) 90%,transparent);border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 25%,transparent);box-shadow:0 4px 14px #0000002e,0 0 12px color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent);backdrop-filter:blur(20px);overflow:hidden}.preview-shell:before,.preview-shell:after{content:\"\";position:absolute;inset:0;opacity:0;pointer-events:none}.preview-header{position:relative;z-index:1;display:flex;align-items:center;gap:.75rem;margin-bottom:1.75rem}.preview-heading{display:flex;flex-direction:column;gap:.25rem}.preview-title{font-size:1.125rem;font-weight:700;color:var(--foreground, #ffffff)}.preview-subtitle{font-size:.85rem;color:var(--muted-foreground, #aaaaaa);letter-spacing:.05em;text-transform:uppercase}app-ai-card-renderer{display:block;width:100%;height:100%}.card-preview-container{display:block;width:100%;height:100%;transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1);will-change:opacity,transform;animation:fadeInScale .5s cubic-bezier(.4,0,.2,1)}@keyframes fadeInScale{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.preview-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2rem;text-align:center;padding:5rem 1.5rem;position:relative;min-height:400px}.preview-loading:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at center,color-mix(in srgb,var(--color-brand, #ff7900) 8%,transparent) 0%,transparent 70%);animation:pulseGlow 2s ease-in-out infinite;pointer-events:none}@keyframes pulseGlow{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.preview-spinner{width:3.5rem;height:3.5rem;border-radius:999px;border:4px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);border-top-color:var(--color-brand, #ff7900);border-right-color:var(--color-brand, #ff7900);animation:spin .8s linear infinite;position:relative;z-index:1;box-shadow:0 0 20px color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent)}.preview-spinner:after{content:\"\";position:absolute;inset:-4px;border-radius:999px;border:4px solid transparent;border-top-color:color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);animation:spin 1.2s linear infinite reverse}.preview-loading-title{font-size:1.25rem;font-weight:700;color:var(--foreground, #ffffff);position:relative;z-index:1;letter-spacing:-.01em;animation:fadeInUp .6s ease-out}.preview-loading-subtitle{font-size:.9375rem;color:var(--muted-foreground, #aaaaaa);position:relative;z-index:1;animation:fadeInUp .6s ease-out .2s both}.preview-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:2rem;padding:5rem 1.5rem;position:relative;min-height:400px}.preview-empty:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at center,color-mix(in srgb,var(--color-brand, #ff7900) 5%,transparent) 0%,transparent 70%);animation:pulseGlow 3s ease-in-out infinite;pointer-events:none}.preview-empty-icon{width:5rem;height:5rem;border-radius:999px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent),color-mix(in srgb,var(--color-brand, #ff7900) 12%,transparent));border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 40%,transparent);box-shadow:0 8px 24px color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent),inset 0 0 0 1px color-mix(in srgb,var(--color-white, #ffffff) 10%,transparent);position:relative;z-index:1;animation:float 3s ease-in-out infinite}.preview-empty-icon:after{content:\"\";position:absolute;inset:-4px;border-radius:999px;border:2px solid color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);animation:pulseRing 2s ease-in-out infinite}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes pulseRing{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.3)}}.preview-empty-title{font-size:1.375rem;font-weight:700;color:var(--foreground, #ffffff);letter-spacing:-.01em;position:relative;z-index:1;animation:fadeInUp .6s ease-out}.preview-empty-subtitle{font-size:1rem;color:var(--muted-foreground, #aaaaaa);max-width:28rem;line-height:1.6;position:relative;z-index:1;animation:fadeInUp .6s ease-out .2s both}.preview-empty-hints{display:flex;flex-direction:column;gap:1rem;font-size:.875rem;color:var(--muted-foreground, #aaaaaa);position:relative;z-index:1;animation:fadeInUp .6s ease-out .4s both}.preview-empty-hint{display:flex;align-items:center;gap:.75rem;justify-content:center;padding:.5rem 1rem;background:color-mix(in srgb,var(--card-background, var(--card, #1c1c1f)) 80%,transparent);border:1px solid color-mix(in srgb,var(--border, rgba(200, 200, 200, .3)) 50%,transparent);border-radius:.5rem;transition:all .3s ease}.preview-empty-hint:hover{background:color-mix(in srgb,var(--card-background, var(--card, #1c1c1f)) 90%,transparent);border-color:color-mix(in srgb,var(--color-brand, #ff7900) 30%,transparent);transform:translate(4px)}.hint-dot{width:8px;height:8px;border-radius:999px;box-shadow:0 0 12px currentColor;flex-shrink:0;animation:pulse 2s ease-in-out infinite}.badge{background-color:color-mix(in srgb,var(--color-brand, #ff7900) 20%,transparent);color:var(--primary, #ff7900);border:1px solid color-mix(in srgb,var(--color-brand, #ff7900) 35%,transparent);padding:.3rem .6rem;border-radius:999px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin-left:auto}.sparkles-icon,.code-icon{display:inline-flex;align-items:center;justify-content:center}.sparkles-icon:before{content:\"\\2728\";font-size:1.2rem;color:var(--primary, #ff7900)}.code-icon:before{content:\"\\1f4bb\";font-size:1.2rem;color:var(--primary, #ff7900)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (min-width: 768px){.preview-empty{padding:5rem 2rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AICardRendererComponent, selector: "app-ai-card-renderer", inputs: ["loadingMessages", "loadingTitle", "cardConfig", "updateSource", "isFullscreen", "tiltEnabled", "streamingStage", "streamingProgress", "streamingProgressLabel", "isStreaming", "showLoadingByDefault", "containerWidth", "changeType", "llmFallbackEndpoint", "llmFallbackPrompt"], outputs: ["fieldInteraction", "cardInteraction", "fullscreenToggle", "agentAction", "questionAction", "export"] }, { kind: "component", type: CardSkeletonComponent, selector: "app-card-skeleton", inputs: ["cardTitle", "sectionCount", "isFullscreen", "sections", "animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27740
29454
|
}
|
|
27741
29455
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CardPreviewComponent, decorators: [{
|
|
27742
29456
|
type: Component,
|
|
@@ -27900,7 +29614,7 @@ class OsiCardsComponent {
|
|
|
27900
29614
|
>
|
|
27901
29615
|
</app-ai-card-renderer>
|
|
27902
29616
|
</div>
|
|
27903
|
-
`, isInline: true, styles: [":host{display:block;width:100%}.osi-cards-root{width:100%;min-height:200px}.osi-cards-fullscreen{position:fixed;inset:0;z-index:var(--z-modal, 500);background:var(--background, #ffffff)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AICardRendererComponent, selector: "app-ai-card-renderer", inputs: ["loadingMessages", "loadingTitle", "cardConfig", "updateSource", "isFullscreen", "tiltEnabled", "streamingStage", "streamingProgress", "streamingProgressLabel", "isStreaming", "showLoadingByDefault", "containerWidth", "changeType"], outputs: ["fieldInteraction", "cardInteraction", "fullscreenToggle", "agentAction", "questionAction", "export"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
29617
|
+
`, isInline: true, styles: [":host{display:block;width:100%}.osi-cards-root{width:100%;min-height:200px}.osi-cards-fullscreen{position:fixed;inset:0;z-index:var(--z-modal, 500);background:var(--background, #ffffff)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AICardRendererComponent, selector: "app-ai-card-renderer", inputs: ["loadingMessages", "loadingTitle", "cardConfig", "updateSource", "isFullscreen", "tiltEnabled", "streamingStage", "streamingProgress", "streamingProgressLabel", "isStreaming", "showLoadingByDefault", "containerWidth", "changeType", "llmFallbackEndpoint", "llmFallbackPrompt"], outputs: ["fieldInteraction", "cardInteraction", "fullscreenToggle", "agentAction", "questionAction", "export"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
27904
29618
|
}
|
|
27905
29619
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: OsiCardsComponent, decorators: [{
|
|
27906
29620
|
type: Component,
|
|
@@ -31980,11 +33694,11 @@ class SubscriptionPool {
|
|
|
31980
33694
|
* Do not edit manually - generated by scripts/generate-version.js
|
|
31981
33695
|
*
|
|
31982
33696
|
* Source of truth: version.config.json
|
|
31983
|
-
* Last synced: 2025-12-
|
|
33697
|
+
* Last synced: 2025-12-05T16:14:02.608Z
|
|
31984
33698
|
*/
|
|
31985
|
-
const VERSION = '1.5.
|
|
31986
|
-
const BUILD_DATE = '2025-12-
|
|
31987
|
-
const BUILD_HASH = '
|
|
33699
|
+
const VERSION = '1.5.14';
|
|
33700
|
+
const BUILD_DATE = '2025-12-05T16:14:02.608Z';
|
|
33701
|
+
const BUILD_HASH = 'c8e1b38';
|
|
31988
33702
|
const BUILD_BRANCH = 'main';
|
|
31989
33703
|
const VERSION_INFO = {
|
|
31990
33704
|
version: VERSION,
|