diff --git a/package.json b/package.json index f1a5878e..919ec7f8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "osit-aether-app-svelte", - "version": "3.00.05", + "version": "3.00.06", "description": "One Sky IT's Aether App created with Svelte, SvelteKit, Tailwind CSS, Lucide, Font Awesome, and Skeleton UI. -Scott Idem", "homepage": "https://oneskyit.com/", "private": true, diff --git a/src/ae-firefly-indigo.css b/src/ae-firefly-indigo.css index 1c6c3636..d1bb7e7e 100644 --- a/src/ae-firefly-indigo.css +++ b/src/ae-firefly-indigo.css @@ -63,50 +63,50 @@ html[data-theme='AE_Firefly_Indigo'] { /* --- Color ramps (light mode) copied from dark block so both modes have full ramps --- */ html[data-theme='AE_Firefly_Indigo'] { - --color-primary-50: oklch(95.5% 0.040 270deg); + --color-primary-50: oklch(95.5% 0.04 270deg); --color-primary-100: oklch(89.5% 0.072 270deg); --color-primary-200: oklch(82.5% 0.108 269deg); --color-primary-300: oklch(74.5% 0.135 268deg); - --color-primary-400: oklch(65.0% 0.155 267deg); - --color-primary-500: oklch(50.5% 0.160 266deg); + --color-primary-400: oklch(65% 0.155 267deg); + --color-primary-500: oklch(50.5% 0.16 266deg); --color-primary-600: oklch(43.5% 0.152 265deg); - --color-primary-700: oklch(37.0% 0.138 264deg); - --color-primary-800: oklch(30.0% 0.120 263deg); - --color-primary-900: oklch(23.0% 0.100 262deg); - --color-primary-950: oklch(15.5% 0.080 261deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-700: oklch(37% 0.138 264deg); + --color-primary-800: oklch(30% 0.12 263deg); + --color-primary-900: oklch(23% 0.1 262deg); + --color-primary-950: oklch(15.5% 0.08 261deg); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-secondary-50: oklch(96.5% 0.032 297deg); + --color-secondary-50: oklch(96.5% 0.032 297deg); --color-secondary-100: oklch(91.5% 0.058 295deg); - --color-secondary-200: oklch(85.5% 0.090 293deg); + --color-secondary-200: oklch(85.5% 0.09 293deg); --color-secondary-300: oklch(78.5% 0.115 292deg); - --color-secondary-400: oklch(70.0% 0.132 291deg); - --color-secondary-500: oklch(60.0% 0.140 290deg); + --color-secondary-400: oklch(70% 0.132 291deg); + --color-secondary-500: oklch(60% 0.14 290deg); --color-secondary-600: oklch(52.5% 0.135 289deg); - --color-secondary-700: oklch(45.0% 0.126 288deg); + --color-secondary-700: oklch(45% 0.126 288deg); --color-secondary-800: oklch(37.5% 0.112 286deg); - --color-secondary-900: oklch(30.0% 0.094 284deg); - --color-secondary-950: oklch(22.0% 0.076 282deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-900: oklch(30% 0.094 284deg); + --color-secondary-950: oklch(22% 0.076 282deg); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-tertiary-50: oklch(96.5% 0.022 348deg); - --color-tertiary-100: oklch(91.0% 0.042 346deg); + --color-tertiary-50: oklch(96.5% 0.022 348deg); + --color-tertiary-100: oklch(91% 0.042 346deg); --color-tertiary-200: oklch(84.5% 0.068 344deg); --color-tertiary-300: oklch(76.5% 0.095 343deg); - --color-tertiary-400: oklch(68.0% 0.118 342deg); + --color-tertiary-400: oklch(68% 0.118 342deg); --color-tertiary-500: oklch(57.5% 0.128 341deg); - --color-tertiary-600: oklch(50.0% 0.122 340deg); - --color-tertiary-700: oklch(43.0% 0.112 339deg); + --color-tertiary-600: oklch(50% 0.122 340deg); + --color-tertiary-700: oklch(43% 0.112 339deg); --color-tertiary-800: oklch(35.5% 0.098 338deg); - --color-tertiary-900: oklch(28.0% 0.080 337deg); + --color-tertiary-900: oklch(28% 0.08 337deg); --color-tertiary-950: oklch(20.5% 0.062 336deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -114,51 +114,51 @@ html[data-theme='AE_Firefly_Indigo'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-surface-50: oklch(99.0% 0.003 270deg); + --color-surface-50: oklch(99% 0.003 270deg); --color-surface-100: oklch(96.5% 0.006 268deg); - --color-surface-200: oklch(92.5% 0.010 266deg); - --color-surface-300: oklch(87.0% 0.014 265deg); + --color-surface-200: oklch(92.5% 0.01 266deg); + --color-surface-300: oklch(87% 0.014 265deg); --color-surface-400: oklch(78.5% 0.018 265deg); - --color-surface-500: oklch(66.5% 0.020 267deg); + --color-surface-500: oklch(66.5% 0.02 267deg); --color-surface-600: oklch(54.5% 0.022 269deg); --color-surface-700: oklch(42.5% 0.024 270deg); - --color-surface-800: oklch(31.0% 0.026 272deg); - --color-surface-900: oklch(20.5% 0.030 274deg); - --color-surface-950: oklch(13.0% 0.034 276deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-800: oklch(31% 0.026 272deg); + --color-surface-900: oklch(20.5% 0.03 274deg); + --color-surface-950: oklch(13% 0.034 276deg); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); } @@ -182,20 +182,20 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * maintaining sufficient contrast at mid-range shades. * At 500 (L≈50%): sufficient contrast with primary-50 text (≥4:1). * =================================================================== */ - --color-primary-50: oklch(95.5% 0.040 270deg); + --color-primary-50: oklch(95.5% 0.04 270deg); --color-primary-100: oklch(89.5% 0.072 270deg); --color-primary-200: oklch(82.5% 0.108 269deg); --color-primary-300: oklch(74.5% 0.135 268deg); - --color-primary-400: oklch(65.0% 0.155 267deg); - --color-primary-500: oklch(50.5% 0.160 266deg); + --color-primary-400: oklch(65% 0.155 267deg); + --color-primary-500: oklch(50.5% 0.16 266deg); --color-primary-600: oklch(43.5% 0.152 265deg); - --color-primary-700: oklch(37.0% 0.138 264deg); - --color-primary-800: oklch(30.0% 0.120 263deg); - --color-primary-900: oklch(23.0% 0.100 262deg); - --color-primary-950: oklch(15.5% 0.080 261deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-700: oklch(37% 0.138 264deg); + --color-primary-800: oklch(30% 0.12 263deg); + --color-primary-900: oklch(23% 0.1 262deg); + --color-primary-950: oklch(15.5% 0.08 261deg); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-primary-contrast-50: var(--color-primary-contrast-dark); + --color-primary-contrast-50: var(--color-primary-contrast-dark); --color-primary-contrast-100: var(--color-primary-contrast-dark); --color-primary-contrast-200: var(--color-primary-contrast-dark); --color-primary-contrast-300: var(--color-primary-contrast-dark); @@ -214,20 +214,20 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * remaining clearly distinct from the primary. * Used for secondary actions, badges, and soft highlights. * =================================================================== */ - --color-secondary-50: oklch(96.5% 0.032 297deg); + --color-secondary-50: oklch(96.5% 0.032 297deg); --color-secondary-100: oklch(91.5% 0.058 295deg); - --color-secondary-200: oklch(85.5% 0.090 293deg); + --color-secondary-200: oklch(85.5% 0.09 293deg); --color-secondary-300: oklch(78.5% 0.115 292deg); - --color-secondary-400: oklch(70.0% 0.132 291deg); - --color-secondary-500: oklch(60.0% 0.140 290deg); + --color-secondary-400: oklch(70% 0.132 291deg); + --color-secondary-500: oklch(60% 0.14 290deg); --color-secondary-600: oklch(52.5% 0.135 289deg); - --color-secondary-700: oklch(45.0% 0.126 288deg); + --color-secondary-700: oklch(45% 0.126 288deg); --color-secondary-800: oklch(37.5% 0.112 286deg); - --color-secondary-900: oklch(30.0% 0.094 284deg); - --color-secondary-950: oklch(22.0% 0.076 282deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-900: oklch(30% 0.094 284deg); + --color-secondary-950: oklch(22% 0.076 282deg); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-secondary-contrast-50: var(--color-secondary-contrast-dark); + --color-secondary-contrast-50: var(--color-secondary-contrast-dark); --color-secondary-contrast-100: var(--color-secondary-contrast-dark); --color-secondary-contrast-200: var(--color-secondary-contrast-dark); --color-secondary-contrast-300: var(--color-secondary-contrast-dark); @@ -247,20 +247,20 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * breaking against a deep indigo sky. * Used for location chips, warm accents, tertiary elements. * =================================================================== */ - --color-tertiary-50: oklch(96.5% 0.022 348deg); - --color-tertiary-100: oklch(91.0% 0.042 346deg); + --color-tertiary-50: oklch(96.5% 0.022 348deg); + --color-tertiary-100: oklch(91% 0.042 346deg); --color-tertiary-200: oklch(84.5% 0.068 344deg); --color-tertiary-300: oklch(76.5% 0.095 343deg); - --color-tertiary-400: oklch(68.0% 0.118 342deg); + --color-tertiary-400: oklch(68% 0.118 342deg); --color-tertiary-500: oklch(57.5% 0.128 341deg); - --color-tertiary-600: oklch(50.0% 0.122 340deg); - --color-tertiary-700: oklch(43.0% 0.112 339deg); + --color-tertiary-600: oklch(50% 0.122 340deg); + --color-tertiary-700: oklch(43% 0.112 339deg); --color-tertiary-800: oklch(35.5% 0.098 338deg); - --color-tertiary-900: oklch(28.0% 0.080 337deg); + --color-tertiary-900: oklch(28% 0.08 337deg); --color-tertiary-950: oklch(20.5% 0.062 336deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); + --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-100: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-200: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-300: var(--color-tertiary-contrast-dark); @@ -277,8 +277,8 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * Hue: ~152°. Consistent with AE_Firefly for recognizable semantic * color meaning across OSIT themes. * =================================================================== */ - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -286,11 +286,11 @@ html.dark[data-theme='AE_Firefly_Indigo'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-success-contrast-50: var(--color-success-contrast-dark); + --color-success-contrast-50: var(--color-success-contrast-dark); --color-success-contrast-100: var(--color-success-contrast-dark); --color-success-contrast-200: var(--color-success-contrast-dark); --color-success-contrast-300: var(--color-success-contrast-dark); @@ -306,20 +306,20 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * WARNING — Amber Orange * Consistent with AE_Firefly for recognizable semantic meaning. * =================================================================== */ - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-warning-contrast-50: var(--color-warning-contrast-dark); + --color-warning-contrast-50: var(--color-warning-contrast-dark); --color-warning-contrast-100: var(--color-warning-contrast-dark); --color-warning-contrast-200: var(--color-warning-contrast-dark); --color-warning-contrast-300: var(--color-warning-contrast-dark); @@ -335,20 +335,20 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * ERROR — Soft Coral/Rose * Consistent with AE_Firefly for recognizable semantic meaning. * =================================================================== */ - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-error-contrast-50: var(--color-error-contrast-dark); + --color-error-contrast-50: var(--color-error-contrast-dark); --color-error-contrast-100: var(--color-error-contrast-dark); --color-error-contrast-200: var(--color-error-contrast-dark); --color-error-contrast-300: var(--color-error-contrast-dark); @@ -370,20 +370,20 @@ html.dark[data-theme='AE_Firefly_Indigo'] { * 50 → body-bg light: near-white with ImperceptibleISTIC purple cast * 950 → body-bg dark: deep midnight with indigo depth * =================================================================== */ - --color-surface-50: oklch(99.0% 0.003 270deg); + --color-surface-50: oklch(99% 0.003 270deg); --color-surface-100: oklch(96.5% 0.006 268deg); - --color-surface-200: oklch(92.5% 0.010 266deg); - --color-surface-300: oklch(87.0% 0.014 265deg); + --color-surface-200: oklch(92.5% 0.01 266deg); + --color-surface-300: oklch(87% 0.014 265deg); --color-surface-400: oklch(78.5% 0.018 265deg); - --color-surface-500: oklch(66.5% 0.020 267deg); + --color-surface-500: oklch(66.5% 0.02 267deg); --color-surface-600: oklch(54.5% 0.022 269deg); --color-surface-700: oklch(42.5% 0.024 270deg); - --color-surface-800: oklch(31.0% 0.026 272deg); - --color-surface-900: oklch(20.5% 0.030 274deg); - --color-surface-950: oklch(13.0% 0.034 276deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-800: oklch(31% 0.026 272deg); + --color-surface-900: oklch(20.5% 0.03 274deg); + --color-surface-950: oklch(13% 0.034 276deg); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); - --color-surface-contrast-50: var(--color-surface-contrast-dark); + --color-surface-contrast-50: var(--color-surface-contrast-dark); --color-surface-contrast-100: var(--color-surface-contrast-dark); --color-surface-contrast-200: var(--color-surface-contrast-dark); --color-surface-contrast-300: var(--color-surface-contrast-dark); diff --git a/src/ae-firefly-rainbow.css b/src/ae-firefly-rainbow.css index 5ccb4284..8a3c2842 100644 --- a/src/ae-firefly-rainbow.css +++ b/src/ae-firefly-rainbow.css @@ -63,50 +63,50 @@ html[data-theme='AE_Firefly_Rainbow'] { /* --- Color ramps (light mode) copied from dark block so both modes have full ramps --- */ html[data-theme='AE_Firefly_Rainbow'] { - --color-primary-50: oklch(97.0% 0.020 15deg); - --color-primary-100: oklch(92.0% 0.048 14deg); - --color-primary-200: oklch(86.0% 0.085 13deg); - --color-primary-300: oklch(79.0% 0.125 13deg); - --color-primary-400: oklch(71.0% 0.160 13deg); - --color-primary-500: oklch(60.0% 0.190 14deg); + --color-primary-50: oklch(97% 0.02 15deg); + --color-primary-100: oklch(92% 0.048 14deg); + --color-primary-200: oklch(86% 0.085 13deg); + --color-primary-300: oklch(79% 0.125 13deg); + --color-primary-400: oklch(71% 0.16 13deg); + --color-primary-500: oklch(60% 0.19 14deg); --color-primary-600: oklch(52.5% 0.178 15deg); - --color-primary-700: oklch(45.0% 0.162 16deg); + --color-primary-700: oklch(45% 0.162 16deg); --color-primary-800: oklch(37.5% 0.142 17deg); - --color-primary-900: oklch(30.0% 0.118 18deg); + --color-primary-900: oklch(30% 0.118 18deg); --color-primary-950: oklch(22.5% 0.092 19deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-secondary-50: oklch(97.0% 0.040 152deg); + --color-secondary-50: oklch(97% 0.04 152deg); --color-secondary-100: oklch(92.5% 0.072 150deg); - --color-secondary-200: oklch(87.0% 0.105 149deg); - --color-secondary-300: oklch(81.0% 0.132 148deg); + --color-secondary-200: oklch(87% 0.105 149deg); + --color-secondary-300: oklch(81% 0.132 148deg); --color-secondary-400: oklch(74.5% 0.152 148deg); - --color-secondary-500: oklch(62.0% 0.160 148deg); + --color-secondary-500: oklch(62% 0.16 148deg); --color-secondary-600: oklch(53.5% 0.148 148deg); --color-secondary-700: oklch(45.5% 0.132 147deg); --color-secondary-800: oklch(37.5% 0.112 146deg); - --color-secondary-900: oklch(29.5% 0.090 145deg); + --color-secondary-900: oklch(29.5% 0.09 145deg); --color-secondary-950: oklch(21.5% 0.068 144deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-tertiary-50: oklch(96.5% 0.030 299deg); - --color-tertiary-100: oklch(91.0% 0.058 297deg); + --color-tertiary-50: oklch(96.5% 0.03 299deg); + --color-tertiary-100: oklch(91% 0.058 297deg); --color-tertiary-200: oklch(84.5% 0.092 296deg); - --color-tertiary-300: oklch(77.0% 0.122 295deg); + --color-tertiary-300: oklch(77% 0.122 295deg); --color-tertiary-400: oklch(68.5% 0.148 295deg); - --color-tertiary-500: oklch(57.0% 0.158 295deg); - --color-tertiary-600: oklch(49.5% 0.150 294deg); + --color-tertiary-500: oklch(57% 0.158 295deg); + --color-tertiary-600: oklch(49.5% 0.15 294deg); --color-tertiary-700: oklch(42.5% 0.138 293deg); --color-tertiary-800: oklch(35.5% 0.122 292deg); --color-tertiary-900: oklch(28.5% 0.102 291deg); - --color-tertiary-950: oklch(21.0% 0.080 290deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-950: oklch(21% 0.08 290deg); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -114,51 +114,51 @@ html[data-theme='AE_Firefly_Rainbow'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-surface-50: oklch(99.2% 0.004 75deg); - --color-surface-100: oklch(97.0% 0.007 72deg); - --color-surface-200: oklch(93.5% 0.010 70deg); + --color-surface-50: oklch(99.2% 0.004 75deg); + --color-surface-100: oklch(97% 0.007 72deg); + --color-surface-200: oklch(93.5% 0.01 70deg); --color-surface-300: oklch(88.5% 0.013 68deg); --color-surface-400: oklch(81.5% 0.016 66deg); --color-surface-500: oklch(70.5% 0.018 64deg); - --color-surface-600: oklch(59.0% 0.018 62deg); + --color-surface-600: oklch(59% 0.018 62deg); --color-surface-700: oklch(47.5% 0.018 58deg); - --color-surface-800: oklch(35.5% 0.020 55deg); - --color-surface-900: oklch(24.5% 0.020 52deg); + --color-surface-800: oklch(35.5% 0.02 55deg); + --color-surface-900: oklch(24.5% 0.02 52deg); --color-surface-950: oklch(15.5% 0.022 48deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); } @@ -180,20 +180,20 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * Kept within sRGB gamut across the full ramp. * At 500 (L≈60%): sufficient contrast with primary-50 text (≥4:1). * =================================================================== */ - --color-primary-50: oklch(97.0% 0.020 15deg); - --color-primary-100: oklch(92.0% 0.048 14deg); - --color-primary-200: oklch(86.0% 0.085 13deg); - --color-primary-300: oklch(79.0% 0.125 13deg); - --color-primary-400: oklch(71.0% 0.160 13deg); - --color-primary-500: oklch(60.0% 0.190 14deg); + --color-primary-50: oklch(97% 0.02 15deg); + --color-primary-100: oklch(92% 0.048 14deg); + --color-primary-200: oklch(86% 0.085 13deg); + --color-primary-300: oklch(79% 0.125 13deg); + --color-primary-400: oklch(71% 0.16 13deg); + --color-primary-500: oklch(60% 0.19 14deg); --color-primary-600: oklch(52.5% 0.178 15deg); - --color-primary-700: oklch(45.0% 0.162 16deg); + --color-primary-700: oklch(45% 0.162 16deg); --color-primary-800: oklch(37.5% 0.142 17deg); - --color-primary-900: oklch(30.0% 0.118 18deg); + --color-primary-900: oklch(30% 0.118 18deg); --color-primary-950: oklch(22.5% 0.092 19deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-primary-contrast-50: var(--color-primary-contrast-dark); + --color-primary-contrast-50: var(--color-primary-contrast-dark); --color-primary-contrast-100: var(--color-primary-contrast-dark); --color-primary-contrast-200: var(--color-primary-contrast-dark); --color-primary-contrast-300: var(--color-primary-contrast-dark); @@ -212,20 +212,20 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * it bridges the warm red primary and the cool violet tertiary. * Used for secondary actions, success-adjacent highlights, badges. * =================================================================== */ - --color-secondary-50: oklch(97.0% 0.040 152deg); + --color-secondary-50: oklch(97% 0.04 152deg); --color-secondary-100: oklch(92.5% 0.072 150deg); - --color-secondary-200: oklch(87.0% 0.105 149deg); - --color-secondary-300: oklch(81.0% 0.132 148deg); + --color-secondary-200: oklch(87% 0.105 149deg); + --color-secondary-300: oklch(81% 0.132 148deg); --color-secondary-400: oklch(74.5% 0.152 148deg); - --color-secondary-500: oklch(62.0% 0.160 148deg); + --color-secondary-500: oklch(62% 0.16 148deg); --color-secondary-600: oklch(53.5% 0.148 148deg); --color-secondary-700: oklch(45.5% 0.132 147deg); --color-secondary-800: oklch(37.5% 0.112 146deg); - --color-secondary-900: oklch(29.5% 0.090 145deg); + --color-secondary-900: oklch(29.5% 0.09 145deg); --color-secondary-950: oklch(21.5% 0.068 144deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-secondary-contrast-50: var(--color-secondary-contrast-dark); + --color-secondary-contrast-50: var(--color-secondary-contrast-dark); --color-secondary-contrast-100: var(--color-secondary-contrast-dark); --color-secondary-contrast-200: var(--color-secondary-contrast-dark); --color-secondary-contrast-300: var(--color-secondary-contrast-dark); @@ -244,20 +244,20 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * brand color slots. Creates striking contrast with the warm primary. * Used for location chips, deep accents, tertiary elements. * =================================================================== */ - --color-tertiary-50: oklch(96.5% 0.030 299deg); - --color-tertiary-100: oklch(91.0% 0.058 297deg); + --color-tertiary-50: oklch(96.5% 0.03 299deg); + --color-tertiary-100: oklch(91% 0.058 297deg); --color-tertiary-200: oklch(84.5% 0.092 296deg); - --color-tertiary-300: oklch(77.0% 0.122 295deg); + --color-tertiary-300: oklch(77% 0.122 295deg); --color-tertiary-400: oklch(68.5% 0.148 295deg); - --color-tertiary-500: oklch(57.0% 0.158 295deg); - --color-tertiary-600: oklch(49.5% 0.150 294deg); + --color-tertiary-500: oklch(57% 0.158 295deg); + --color-tertiary-600: oklch(49.5% 0.15 294deg); --color-tertiary-700: oklch(42.5% 0.138 293deg); --color-tertiary-800: oklch(35.5% 0.122 292deg); --color-tertiary-900: oklch(28.5% 0.102 291deg); - --color-tertiary-950: oklch(21.0% 0.080 290deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-950: oklch(21% 0.08 290deg); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); + --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-100: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-200: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-300: var(--color-tertiary-contrast-dark); @@ -274,8 +274,8 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * Hue: ~152°. Consistent with AE_Firefly for recognizable semantic * color meaning across OSIT themes. * =================================================================== */ - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -283,11 +283,11 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-success-contrast-50: var(--color-success-contrast-dark); + --color-success-contrast-50: var(--color-success-contrast-dark); --color-success-contrast-100: var(--color-success-contrast-dark); --color-success-contrast-200: var(--color-success-contrast-dark); --color-success-contrast-300: var(--color-success-contrast-dark); @@ -303,20 +303,20 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * WARNING — Amber Orange * Consistent with AE_Firefly for recognizable semantic meaning. * =================================================================== */ - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-warning-contrast-50: var(--color-warning-contrast-dark); + --color-warning-contrast-50: var(--color-warning-contrast-dark); --color-warning-contrast-100: var(--color-warning-contrast-dark); --color-warning-contrast-200: var(--color-warning-contrast-dark); --color-warning-contrast-300: var(--color-warning-contrast-dark); @@ -332,20 +332,20 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * ERROR — Soft Coral/Rose * Consistent with AE_Firefly for recognizable semantic meaning. * =================================================================== */ - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-error-contrast-50: var(--color-error-contrast-dark); + --color-error-contrast-50: var(--color-error-contrast-dark); --color-error-contrast-100: var(--color-error-contrast-dark); --color-error-contrast-200: var(--color-error-contrast-dark); --color-error-contrast-300: var(--color-error-contrast-dark); @@ -366,20 +366,20 @@ html.dark[data-theme='AE_Firefly_Rainbow'] { * 50 → body-bg light: warm near-white, like morning paper * 950 → body-bg dark: deep warm charcoal, like a dim theatre * =================================================================== */ - --color-surface-50: oklch(99.2% 0.004 75deg); - --color-surface-100: oklch(97.0% 0.007 72deg); - --color-surface-200: oklch(93.5% 0.010 70deg); + --color-surface-50: oklch(99.2% 0.004 75deg); + --color-surface-100: oklch(97% 0.007 72deg); + --color-surface-200: oklch(93.5% 0.01 70deg); --color-surface-300: oklch(88.5% 0.013 68deg); --color-surface-400: oklch(81.5% 0.016 66deg); --color-surface-500: oklch(70.5% 0.018 64deg); - --color-surface-600: oklch(59.0% 0.018 62deg); + --color-surface-600: oklch(59% 0.018 62deg); --color-surface-700: oklch(47.5% 0.018 58deg); - --color-surface-800: oklch(35.5% 0.020 55deg); - --color-surface-900: oklch(24.5% 0.020 52deg); + --color-surface-800: oklch(35.5% 0.02 55deg); + --color-surface-900: oklch(24.5% 0.02 52deg); --color-surface-950: oklch(15.5% 0.022 48deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); - --color-surface-contrast-50: var(--color-surface-contrast-dark); + --color-surface-contrast-50: var(--color-surface-contrast-dark); --color-surface-contrast-100: var(--color-surface-contrast-dark); --color-surface-contrast-200: var(--color-surface-contrast-dark); --color-surface-contrast-300: var(--color-surface-contrast-dark); diff --git a/src/ae-firefly-steelblue.css b/src/ae-firefly-steelblue.css index 58a70e2c..1a3d4e6b 100644 --- a/src/ae-firefly-steelblue.css +++ b/src/ae-firefly-steelblue.css @@ -60,50 +60,50 @@ html[data-theme='AE_Firefly_SteelBlue'] { --radius-base: 0.375rem; --radius-container: 0.875rem; /* --- Color ramps (light mode) copied from dark block so both modes have full ramps --- */ - --color-primary-50: oklch(96.5% 0.022 214deg); - --color-primary-100: oklch(91.0% 0.045 213deg); + --color-primary-50: oklch(96.5% 0.022 214deg); + --color-primary-100: oklch(91% 0.045 213deg); --color-primary-200: oklch(84.5% 0.072 212deg); --color-primary-300: oklch(76.5% 0.097 212deg); - --color-primary-400: oklch(67.0% 0.115 213deg); - --color-primary-500: oklch(56.0% 0.115 214deg); - --color-primary-600: oklch(49.0% 0.112 214deg); + --color-primary-400: oklch(67% 0.115 213deg); + --color-primary-500: oklch(56% 0.115 214deg); + --color-primary-600: oklch(49% 0.112 214deg); --color-primary-700: oklch(41.5% 0.105 213deg); - --color-primary-800: oklch(34.0% 0.095 212deg); - --color-primary-900: oklch(26.5% 0.080 211deg); + --color-primary-800: oklch(34% 0.095 212deg); + --color-primary-900: oklch(26.5% 0.08 211deg); --color-primary-950: oklch(18.5% 0.065 210deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-secondary-50: oklch(97.5% 0.055 56deg); - --color-secondary-100: oklch(93.5% 0.090 55deg); - --color-secondary-200: oklch(89.5% 0.120 54deg); + --color-secondary-50: oklch(97.5% 0.055 56deg); + --color-secondary-100: oklch(93.5% 0.09 55deg); + --color-secondary-200: oklch(89.5% 0.12 54deg); --color-secondary-300: oklch(85.5% 0.148 53deg); --color-secondary-400: oklch(81.5% 0.162 52deg); --color-secondary-500: oklch(76.5% 0.162 51deg); --color-secondary-600: oklch(68.5% 0.152 50deg); --color-secondary-700: oklch(60.5% 0.138 49deg); - --color-secondary-800: oklch(52.0% 0.122 48deg); + --color-secondary-800: oklch(52% 0.122 48deg); --color-secondary-900: oklch(43.5% 0.102 47deg); - --color-secondary-950: oklch(35.0% 0.084 46deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-950: oklch(35% 0.084 46deg); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-tertiary-50: oklch(95.5% 0.025 232deg); + --color-tertiary-50: oklch(95.5% 0.025 232deg); --color-tertiary-100: oklch(89.5% 0.048 231deg); --color-tertiary-200: oklch(82.5% 0.072 230deg); --color-tertiary-300: oklch(74.5% 0.095 229deg); - --color-tertiary-400: oklch(65.5% 0.120 229deg); + --color-tertiary-400: oklch(65.5% 0.12 229deg); --color-tertiary-500: oklch(54.5% 0.135 230deg); - --color-tertiary-600: oklch(47.0% 0.132 230deg); + --color-tertiary-600: oklch(47% 0.132 230deg); --color-tertiary-700: oklch(39.5% 0.122 229deg); - --color-tertiary-800: oklch(32.0% 0.108 228deg); - --color-tertiary-900: oklch(25.0% 0.090 227deg); + --color-tertiary-800: oklch(32% 0.108 228deg); + --color-tertiary-900: oklch(25% 0.09 227deg); --color-tertiary-950: oklch(17.5% 0.072 226deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -111,51 +111,51 @@ html[data-theme='AE_Firefly_SteelBlue'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-surface-50: oklch(99.0% 0.004 220deg); + --color-surface-50: oklch(99% 0.004 220deg); --color-surface-100: oklch(96.5% 0.008 218deg); --color-surface-200: oklch(92.5% 0.012 217deg); - --color-surface-300: oklch(87.0% 0.016 216deg); - --color-surface-400: oklch(78.5% 0.020 215deg); + --color-surface-300: oklch(87% 0.016 216deg); + --color-surface-400: oklch(78.5% 0.02 215deg); --color-surface-500: oklch(66.5% 0.022 217deg); --color-surface-600: oklch(54.5% 0.025 220deg); --color-surface-700: oklch(42.5% 0.028 223deg); - --color-surface-800: oklch(31.0% 0.032 226deg); + --color-surface-800: oklch(31% 0.032 226deg); --color-surface-900: oklch(20.5% 0.035 228deg); - --color-surface-950: oklch(13.0% 0.040 232deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-950: oklch(13% 0.04 232deg); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); } @@ -175,20 +175,20 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * Approx: #4682B4 (CSS SteelBlue) sits at oklch(56%, 0.113, 214°). * At 500 (L≈56%): sufficient contrast with primary-50 text (≥4:1). * =================================================================== */ - --color-primary-50: oklch(96.5% 0.022 214deg); - --color-primary-100: oklch(91.0% 0.045 213deg); + --color-primary-50: oklch(96.5% 0.022 214deg); + --color-primary-100: oklch(91% 0.045 213deg); --color-primary-200: oklch(84.5% 0.072 212deg); --color-primary-300: oklch(76.5% 0.097 212deg); - --color-primary-400: oklch(67.0% 0.115 213deg); - --color-primary-500: oklch(56.0% 0.115 214deg); - --color-primary-600: oklch(49.0% 0.112 214deg); + --color-primary-400: oklch(67% 0.115 213deg); + --color-primary-500: oklch(56% 0.115 214deg); + --color-primary-600: oklch(49% 0.112 214deg); --color-primary-700: oklch(41.5% 0.105 213deg); - --color-primary-800: oklch(34.0% 0.095 212deg); - --color-primary-900: oklch(26.5% 0.080 211deg); + --color-primary-800: oklch(34% 0.095 212deg); + --color-primary-900: oklch(26.5% 0.08 211deg); --color-primary-950: oklch(18.5% 0.065 210deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-primary-contrast-50: var(--color-primary-contrast-dark); + --color-primary-contrast-50: var(--color-primary-contrast-dark); --color-primary-contrast-100: var(--color-primary-contrast-dark); --color-primary-contrast-200: var(--color-primary-contrast-dark); --color-primary-contrast-300: var(--color-primary-contrast-dark); @@ -206,20 +206,20 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * of steel blue. The classic "metal on metal" contrast pairing — * used for secondary actions, badges, and call-to-action highlights. * =================================================================== */ - --color-secondary-50: oklch(97.5% 0.055 56deg); - --color-secondary-100: oklch(93.5% 0.090 55deg); - --color-secondary-200: oklch(89.5% 0.120 54deg); + --color-secondary-50: oklch(97.5% 0.055 56deg); + --color-secondary-100: oklch(93.5% 0.09 55deg); + --color-secondary-200: oklch(89.5% 0.12 54deg); --color-secondary-300: oklch(85.5% 0.148 53deg); --color-secondary-400: oklch(81.5% 0.162 52deg); --color-secondary-500: oklch(76.5% 0.162 51deg); --color-secondary-600: oklch(68.5% 0.152 50deg); --color-secondary-700: oklch(60.5% 0.138 49deg); - --color-secondary-800: oklch(52.0% 0.122 48deg); + --color-secondary-800: oklch(52% 0.122 48deg); --color-secondary-900: oklch(43.5% 0.102 47deg); - --color-secondary-950: oklch(35.0% 0.084 46deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-950: oklch(35% 0.084 46deg); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-secondary-contrast-50: var(--color-secondary-contrast-dark); + --color-secondary-contrast-50: var(--color-secondary-contrast-dark); --color-secondary-contrast-100: var(--color-secondary-contrast-dark); --color-secondary-contrast-200: var(--color-secondary-contrast-dark); --color-secondary-contrast-300: var(--color-secondary-contrast-dark); @@ -237,20 +237,20 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * like the heavy cobalt-blue depths under polished chrome. * Used for accents, location chips, and depth elements. * =================================================================== */ - --color-tertiary-50: oklch(95.5% 0.025 232deg); + --color-tertiary-50: oklch(95.5% 0.025 232deg); --color-tertiary-100: oklch(89.5% 0.048 231deg); --color-tertiary-200: oklch(82.5% 0.072 230deg); --color-tertiary-300: oklch(74.5% 0.095 229deg); - --color-tertiary-400: oklch(65.5% 0.120 229deg); + --color-tertiary-400: oklch(65.5% 0.12 229deg); --color-tertiary-500: oklch(54.5% 0.135 230deg); - --color-tertiary-600: oklch(47.0% 0.132 230deg); + --color-tertiary-600: oklch(47% 0.132 230deg); --color-tertiary-700: oklch(39.5% 0.122 229deg); - --color-tertiary-800: oklch(32.0% 0.108 228deg); - --color-tertiary-900: oklch(25.0% 0.090 227deg); + --color-tertiary-800: oklch(32% 0.108 228deg); + --color-tertiary-900: oklch(25% 0.09 227deg); --color-tertiary-950: oklch(17.5% 0.072 226deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); + --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-100: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-200: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-300: var(--color-tertiary-contrast-dark); @@ -267,8 +267,8 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * Hue: ~152°. Consistent with AE_Firefly for recognizable semantic * color meaning across OSIT themes. * =================================================================== */ - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -276,11 +276,11 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-success-contrast-50: var(--color-success-contrast-dark); + --color-success-contrast-50: var(--color-success-contrast-dark); --color-success-contrast-100: var(--color-success-contrast-dark); --color-success-contrast-200: var(--color-success-contrast-dark); --color-success-contrast-300: var(--color-success-contrast-dark); @@ -296,20 +296,20 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * WARNING — Amber Orange * Consistent with AE_Firefly for recognizable semantic meaning. * =================================================================== */ - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-warning-contrast-50: var(--color-warning-contrast-dark); + --color-warning-contrast-50: var(--color-warning-contrast-dark); --color-warning-contrast-100: var(--color-warning-contrast-dark); --color-warning-contrast-200: var(--color-warning-contrast-dark); --color-warning-contrast-300: var(--color-warning-contrast-dark); @@ -325,20 +325,20 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * ERROR — Soft Coral/Rose * Consistent with AE_Firefly for recognizable semantic meaning. * =================================================================== */ - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-error-contrast-50: var(--color-error-contrast-dark); + --color-error-contrast-50: var(--color-error-contrast-dark); --color-error-contrast-100: var(--color-error-contrast-dark); --color-error-contrast-200: var(--color-error-contrast-dark); --color-error-contrast-300: var(--color-error-contrast-dark); @@ -359,20 +359,20 @@ html.dark[data-theme='AE_Firefly_SteelBlue'] { * 50 → body-bg light: brilliant near-white with a chrome whisper * 950 → body-bg dark: deep gunmetal with subtle cool-blue depth * =================================================================== */ - --color-surface-50: oklch(99.0% 0.004 220deg); + --color-surface-50: oklch(99% 0.004 220deg); --color-surface-100: oklch(96.5% 0.008 218deg); --color-surface-200: oklch(92.5% 0.012 217deg); - --color-surface-300: oklch(87.0% 0.016 216deg); - --color-surface-400: oklch(78.5% 0.020 215deg); + --color-surface-300: oklch(87% 0.016 216deg); + --color-surface-400: oklch(78.5% 0.02 215deg); --color-surface-500: oklch(66.5% 0.022 217deg); --color-surface-600: oklch(54.5% 0.025 220deg); --color-surface-700: oklch(42.5% 0.028 223deg); - --color-surface-800: oklch(31.0% 0.032 226deg); + --color-surface-800: oklch(31% 0.032 226deg); --color-surface-900: oklch(20.5% 0.035 228deg); - --color-surface-950: oklch(13.0% 0.040 232deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-950: oklch(13% 0.04 232deg); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); - --color-surface-contrast-50: var(--color-surface-contrast-dark); + --color-surface-contrast-50: var(--color-surface-contrast-dark); --color-surface-contrast-100: var(--color-surface-contrast-dark); --color-surface-contrast-200: var(--color-surface-contrast-dark); --color-surface-contrast-300: var(--color-surface-contrast-dark); diff --git a/src/ae-firefly.css b/src/ae-firefly.css index 57b734e3..ad7de7c0 100644 --- a/src/ae-firefly.css +++ b/src/ae-firefly.css @@ -63,50 +63,50 @@ html[data-theme='AE_Firefly'] { /* --- Color ramps (light mode) copied from dark block so both modes have full ramps --- */ html[data-theme='AE_Firefly'] { - --color-primary-50: oklch(96.5% 0.025 192deg); - --color-primary-100: oklch(91.0% 0.050 190deg); + --color-primary-50: oklch(96.5% 0.025 192deg); + --color-primary-100: oklch(91% 0.05 190deg); --color-primary-200: oklch(84.5% 0.078 188deg); --color-primary-300: oklch(76.5% 0.105 186deg); --color-primary-400: oklch(67.5% 0.125 185deg); - --color-primary-500: oklch(50.5% 0.130 184deg); - --color-primary-600: oklch(44.0% 0.125 183deg); + --color-primary-500: oklch(50.5% 0.13 184deg); + --color-primary-600: oklch(44% 0.125 183deg); --color-primary-700: oklch(37.5% 0.115 182deg); --color-primary-800: oklch(30.5% 0.105 181deg); - --color-primary-900: oklch(23.5% 0.090 180deg); - --color-primary-950: oklch(16.0% 0.075 179deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-900: oklch(23.5% 0.09 180deg); + --color-primary-950: oklch(16% 0.075 179deg); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-secondary-50: oklch(97.5% 0.060 102deg); + --color-secondary-50: oklch(97.5% 0.06 102deg); --color-secondary-100: oklch(93.5% 0.095 100deg); --color-secondary-200: oklch(89.5% 0.128 98deg); --color-secondary-300: oklch(85.5% 0.155 95deg); - --color-secondary-400: oklch(81.0% 0.170 93deg); - --color-secondary-500: oklch(76.0% 0.170 90deg); - --color-secondary-600: oklch(68.5% 0.160 87deg); + --color-secondary-400: oklch(81% 0.17 93deg); + --color-secondary-500: oklch(76% 0.17 90deg); + --color-secondary-600: oklch(68.5% 0.16 87deg); --color-secondary-700: oklch(60.5% 0.145 85deg); - --color-secondary-800: oklch(52.0% 0.130 83deg); - --color-secondary-900: oklch(43.5% 0.110 81deg); - --color-secondary-950: oklch(35.0% 0.090 79deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-800: oklch(52% 0.13 83deg); + --color-secondary-900: oklch(43.5% 0.11 81deg); + --color-secondary-950: oklch(35% 0.09 79deg); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-tertiary-50: oklch(95.5% 0.042 283deg); - --color-tertiary-100: oklch(89.0% 0.068 281deg); + --color-tertiary-50: oklch(95.5% 0.042 283deg); + --color-tertiary-100: oklch(89% 0.068 281deg); --color-tertiary-200: oklch(81.5% 0.092 279deg); --color-tertiary-300: oklch(73.5% 0.112 278deg); - --color-tertiary-400: oklch(65.0% 0.132 277deg); + --color-tertiary-400: oklch(65% 0.132 277deg); --color-tertiary-500: oklch(55.5% 0.142 276deg); --color-tertiary-600: oklch(48.5% 0.138 275deg); --color-tertiary-700: oklch(41.5% 0.128 274deg); --color-tertiary-800: oklch(34.5% 0.112 273deg); --color-tertiary-900: oklch(27.5% 0.098 272deg); - --color-tertiary-950: oklch(20.0% 0.082 271deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-950: oklch(20% 0.082 271deg); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -114,51 +114,51 @@ html[data-theme='AE_Firefly'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-surface-50: oklch(99.2% 0.003 220deg); - --color-surface-100: oklch(97.0% 0.006 217deg); + --color-surface-50: oklch(99.2% 0.003 220deg); + --color-surface-100: oklch(97% 0.006 217deg); --color-surface-200: oklch(93.5% 0.009 215deg); --color-surface-300: oklch(88.5% 0.012 213deg); --color-surface-400: oklch(81.5% 0.015 212deg); --color-surface-500: oklch(70.5% 0.016 215deg); - --color-surface-600: oklch(59.0% 0.018 218deg); - --color-surface-700: oklch(47.5% 0.020 222deg); + --color-surface-600: oklch(59% 0.018 218deg); + --color-surface-700: oklch(47.5% 0.02 222deg); --color-surface-800: oklch(30.5% 0.022 226deg); --color-surface-900: oklch(24.5% 0.025 229deg); --color-surface-950: oklch(15.5% 0.028 233deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); } @@ -174,20 +174,20 @@ html.dark[data-theme='AE_Firefly'] { * PRIMARY — Luminescent Firefly Teal * ...existing code... */ - --color-primary-50: oklch(96.5% 0.025 192deg); - --color-primary-100: oklch(91.0% 0.050 190deg); + --color-primary-50: oklch(96.5% 0.025 192deg); + --color-primary-100: oklch(91% 0.05 190deg); --color-primary-200: oklch(84.5% 0.078 188deg); --color-primary-300: oklch(76.5% 0.105 186deg); --color-primary-400: oklch(67.5% 0.125 185deg); - --color-primary-500: oklch(50.5% 0.130 184deg); - --color-primary-600: oklch(44.0% 0.125 183deg); + --color-primary-500: oklch(50.5% 0.13 184deg); + --color-primary-600: oklch(44% 0.125 183deg); --color-primary-700: oklch(37.5% 0.115 182deg); --color-primary-800: oklch(30.5% 0.105 181deg); - --color-primary-900: oklch(23.5% 0.090 180deg); - --color-primary-950: oklch(16.0% 0.075 179deg); - --color-primary-contrast-dark: var(--color-primary-950); + --color-primary-900: oklch(23.5% 0.09 180deg); + --color-primary-950: oklch(16% 0.075 179deg); + --color-primary-contrast-dark: var(--color-primary-950); --color-primary-contrast-light: var(--color-primary-50); - --color-primary-contrast-50: var(--color-primary-contrast-dark); + --color-primary-contrast-50: var(--color-primary-contrast-dark); --color-primary-contrast-100: var(--color-primary-contrast-dark); --color-primary-contrast-200: var(--color-primary-contrast-dark); --color-primary-contrast-300: var(--color-primary-contrast-dark); @@ -200,20 +200,20 @@ html.dark[data-theme='AE_Firefly'] { --color-primary-contrast-950: var(--color-primary-contrast-light); /* ...existing code for secondary, tertiary, success, warning, error, surface... */ - --color-secondary-50: oklch(97.5% 0.060 102deg); + --color-secondary-50: oklch(97.5% 0.06 102deg); --color-secondary-100: oklch(93.5% 0.095 100deg); --color-secondary-200: oklch(89.5% 0.128 98deg); --color-secondary-300: oklch(85.5% 0.155 95deg); - --color-secondary-400: oklch(81.0% 0.170 93deg); - --color-secondary-500: oklch(76.0% 0.170 90deg); - --color-secondary-600: oklch(68.5% 0.160 87deg); + --color-secondary-400: oklch(81% 0.17 93deg); + --color-secondary-500: oklch(76% 0.17 90deg); + --color-secondary-600: oklch(68.5% 0.16 87deg); --color-secondary-700: oklch(60.5% 0.145 85deg); - --color-secondary-800: oklch(52.0% 0.130 83deg); - --color-secondary-900: oklch(43.5% 0.110 81deg); - --color-secondary-950: oklch(35.0% 0.090 79deg); - --color-secondary-contrast-dark: var(--color-secondary-950); + --color-secondary-800: oklch(52% 0.13 83deg); + --color-secondary-900: oklch(43.5% 0.11 81deg); + --color-secondary-950: oklch(35% 0.09 79deg); + --color-secondary-contrast-dark: var(--color-secondary-950); --color-secondary-contrast-light: var(--color-secondary-50); - --color-secondary-contrast-50: var(--color-secondary-contrast-dark); + --color-secondary-contrast-50: var(--color-secondary-contrast-dark); --color-secondary-contrast-100: var(--color-secondary-contrast-dark); --color-secondary-contrast-200: var(--color-secondary-contrast-dark); --color-secondary-contrast-300: var(--color-secondary-contrast-dark); @@ -225,20 +225,20 @@ html.dark[data-theme='AE_Firefly'] { --color-secondary-contrast-900: var(--color-secondary-contrast-light); --color-secondary-contrast-950: var(--color-secondary-contrast-light); - --color-tertiary-50: oklch(95.5% 0.042 283deg); - --color-tertiary-100: oklch(89.0% 0.068 281deg); + --color-tertiary-50: oklch(95.5% 0.042 283deg); + --color-tertiary-100: oklch(89% 0.068 281deg); --color-tertiary-200: oklch(81.5% 0.092 279deg); --color-tertiary-300: oklch(73.5% 0.112 278deg); - --color-tertiary-400: oklch(65.0% 0.132 277deg); + --color-tertiary-400: oklch(65% 0.132 277deg); --color-tertiary-500: oklch(55.5% 0.142 276deg); --color-tertiary-600: oklch(48.5% 0.138 275deg); --color-tertiary-700: oklch(41.5% 0.128 274deg); --color-tertiary-800: oklch(34.5% 0.112 273deg); --color-tertiary-900: oklch(27.5% 0.098 272deg); - --color-tertiary-950: oklch(20.0% 0.082 271deg); - --color-tertiary-contrast-dark: var(--color-tertiary-950); + --color-tertiary-950: oklch(20% 0.082 271deg); + --color-tertiary-contrast-dark: var(--color-tertiary-950); --color-tertiary-contrast-light: var(--color-tertiary-50); - --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); + --color-tertiary-contrast-50: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-100: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-200: var(--color-tertiary-contrast-dark); --color-tertiary-contrast-300: var(--color-tertiary-contrast-dark); @@ -250,8 +250,8 @@ html.dark[data-theme='AE_Firefly'] { --color-tertiary-contrast-900: var(--color-tertiary-contrast-light); --color-tertiary-contrast-950: var(--color-tertiary-contrast-light); - --color-success-50: oklch(95.77% 0.05 152.69deg); - --color-success-100: oklch(91.59% 0.06 152.00deg); + --color-success-50: oklch(95.77% 0.05 152.69deg); + --color-success-100: oklch(91.59% 0.06 152deg); --color-success-200: oklch(87.45% 0.08 152.08deg); --color-success-300: oklch(83.57% 0.09 150.85deg); --color-success-400: oklch(79.47% 0.11 150.71deg); @@ -259,11 +259,11 @@ html.dark[data-theme='AE_Firefly'] { --color-success-600: oklch(67.65% 0.11 149.94deg); --color-success-700: oklch(59.71% 0.09 150.42deg); --color-success-800: oklch(51.74% 0.08 150.24deg); - --color-success-900: oklch(43.20% 0.06 151.12deg); - --color-success-950: oklch(34.20% 0.04 151.44deg); - --color-success-contrast-dark: var(--color-success-950); + --color-success-900: oklch(43.2% 0.06 151.12deg); + --color-success-950: oklch(34.2% 0.04 151.44deg); + --color-success-contrast-dark: var(--color-success-950); --color-success-contrast-light: var(--color-success-50); - --color-success-contrast-50: var(--color-success-contrast-dark); + --color-success-contrast-50: var(--color-success-contrast-dark); --color-success-contrast-100: var(--color-success-contrast-dark); --color-success-contrast-200: var(--color-success-contrast-dark); --color-success-contrast-300: var(--color-success-contrast-dark); @@ -275,20 +275,20 @@ html.dark[data-theme='AE_Firefly'] { --color-success-contrast-900: var(--color-success-contrast-light); --color-success-contrast-950: var(--color-success-contrast-light); - --color-warning-50: oklch(97.5% 0.065 78deg); - --color-warning-100: oklch(93.5% 0.090 75deg); - --color-warning-200: oklch(89.5% 0.120 73deg); + --color-warning-50: oklch(97.5% 0.065 78deg); + --color-warning-100: oklch(93.5% 0.09 75deg); + --color-warning-200: oklch(89.5% 0.12 73deg); --color-warning-300: oklch(85.5% 0.145 70deg); - --color-warning-400: oklch(81.5% 0.160 67deg); - --color-warning-500: oklch(77.0% 0.165 65deg); + --color-warning-400: oklch(81.5% 0.16 67deg); + --color-warning-500: oklch(77% 0.165 65deg); --color-warning-600: oklch(69.5% 0.155 64deg); - --color-warning-700: oklch(61.5% 0.140 63deg); + --color-warning-700: oklch(61.5% 0.14 63deg); --color-warning-800: oklch(53.5% 0.125 62deg); - --color-warning-900: oklch(45.0% 0.105 61deg); - --color-warning-950: oklch(37.0% 0.088 60deg); - --color-warning-contrast-dark: var(--color-warning-950); + --color-warning-900: oklch(45% 0.105 61deg); + --color-warning-950: oklch(37% 0.088 60deg); + --color-warning-contrast-dark: var(--color-warning-950); --color-warning-contrast-light: var(--color-warning-50); - --color-warning-contrast-50: var(--color-warning-contrast-dark); + --color-warning-contrast-50: var(--color-warning-contrast-dark); --color-warning-contrast-100: var(--color-warning-contrast-dark); --color-warning-contrast-200: var(--color-warning-contrast-dark); --color-warning-contrast-300: var(--color-warning-contrast-dark); @@ -300,20 +300,20 @@ html.dark[data-theme='AE_Firefly'] { --color-warning-contrast-900: var(--color-warning-contrast-light); --color-warning-contrast-950: var(--color-warning-contrast-light); - --color-error-50: oklch(95.0% 0.040 18deg); - --color-error-100: oklch(88.0% 0.070 20deg); - --color-error-200: oklch(80.0% 0.105 21deg); - --color-error-300: oklch(72.0% 0.140 22deg); - --color-error-400: oklch(64.5% 0.170 23deg); + --color-error-50: oklch(95% 0.04 18deg); + --color-error-100: oklch(88% 0.07 20deg); + --color-error-200: oklch(80% 0.105 21deg); + --color-error-300: oklch(72% 0.14 22deg); + --color-error-400: oklch(64.5% 0.17 23deg); --color-error-500: oklch(57.5% 0.195 24deg); --color-error-600: oklch(51.5% 0.182 25deg); --color-error-700: oklch(45.5% 0.165 26deg); --color-error-800: oklch(39.5% 0.148 27deg); - --color-error-900: oklch(33.0% 0.128 28deg); + --color-error-900: oklch(33% 0.128 28deg); --color-error-950: oklch(26.5% 0.108 29deg); - --color-error-contrast-dark: var(--color-error-950); + --color-error-contrast-dark: var(--color-error-950); --color-error-contrast-light: var(--color-error-50); - --color-error-contrast-50: var(--color-error-contrast-dark); + --color-error-contrast-50: var(--color-error-contrast-dark); --color-error-contrast-100: var(--color-error-contrast-dark); --color-error-contrast-200: var(--color-error-contrast-dark); --color-error-contrast-300: var(--color-error-contrast-dark); @@ -325,20 +325,20 @@ html.dark[data-theme='AE_Firefly'] { --color-error-contrast-900: var(--color-error-contrast-light); --color-error-contrast-950: var(--color-error-contrast-light); - --color-surface-50: oklch(99.2% 0.003 220deg); - --color-surface-100: oklch(97.0% 0.006 217deg); + --color-surface-50: oklch(99.2% 0.003 220deg); + --color-surface-100: oklch(97% 0.006 217deg); --color-surface-200: oklch(93.5% 0.009 215deg); --color-surface-300: oklch(88.5% 0.012 213deg); --color-surface-400: oklch(81.5% 0.015 212deg); --color-surface-500: oklch(70.5% 0.016 215deg); - --color-surface-600: oklch(59.0% 0.018 218deg); - --color-surface-700: oklch(47.5% 0.020 222deg); + --color-surface-600: oklch(59% 0.018 218deg); + --color-surface-700: oklch(47.5% 0.02 222deg); --color-surface-800: oklch(35.5% 0.022 226deg); --color-surface-900: oklch(24.5% 0.025 229deg); --color-surface-950: oklch(15.5% 0.028 233deg); - --color-surface-contrast-dark: var(--color-surface-950); + --color-surface-contrast-dark: var(--color-surface-950); --color-surface-contrast-light: var(--color-surface-50); - --color-surface-contrast-50: var(--color-surface-contrast-dark); + --color-surface-contrast-50: var(--color-surface-contrast-dark); --color-surface-contrast-100: var(--color-surface-contrast-dark); --color-surface-contrast-200: var(--color-surface-contrast-dark); --color-surface-contrast-300: var(--color-surface-contrast-dark); diff --git a/src/app.css b/src/app.css index 38e92a15..60ec347f 100644 --- a/src/app.css +++ b/src/app.css @@ -10,12 +10,15 @@ /* Sync native browser control rendering (select dropdowns, scrollbars, etc.) with the app's dark/light mode toggle. Without this, native controls follow the OS theme rather than the app's .dark/.light class on . */ -html.dark { color-scheme: dark; } -html.light { color-scheme: light; } +html.dark { + color-scheme: dark; +} +html.light { + color-scheme: light; +} @import '@skeletonlabs/skeleton'; - /* Register Preset Themes */ /* @import '@skeletonlabs/skeleton/themes/{theme-name}'; */ @import '@skeletonlabs/skeleton/themes/cerberus'; @@ -154,13 +157,13 @@ html.light { color-scheme: light; } .dark .input:not([type='checkbox']):not([type='radio']):not([type='range']), .dark .select, .dark .textarea { - color: rgb(243 244 246); /* gray-100 */ + color: rgb(243 244 246); /* gray-100 */ background-color: rgb(55 65 81); /* gray-700 */ - border-color: rgb(75 85 99); /* gray-600 */ + border-color: rgb(75 85 99); /* gray-600 */ } .dark .input::placeholder, .dark .textarea::placeholder { - color: rgb(156 163 175); /* gray-400 — legible at reduced opacity */ + color: rgb(156 163 175); /* gray-400 — legible at reduced opacity */ } /* Option elements in dark selects — forces browser native dark chrome */ .dark .select option { @@ -198,8 +201,12 @@ body { /* Font size accessibility modes — cycled via the font size button in the sys menu. Applied as a class on by the layout DOM effect. The 'default' mode has no class (browser default, typically 16px). */ -html.font-size-larger { font-size: 112.5%; } /* ~18px base */ -html.font-size-smaller { font-size: 87.5%; } /* ~14px base */ +html.font-size-larger { + font-size: 112.5%; +} /* ~18px base */ +html.font-size-smaller { + font-size: 87.5%; +} /* ~14px base */ html.super_access #appShell { background-color: hsla(0, 100%, 50%, 0.5); @@ -356,51 +363,51 @@ html.trusted_access #appShell { /* @apply preset-tonal-primary border border-primary-500 transition-all; */ } .ae_btn_secondary { - @apply preset-tonal-secondary border border-secondary-500 transition-all; + @apply preset-tonal-secondary border-secondary-500 border transition-all; /* hover:preset-filled-secondary-500 */ } .ae_btn_tertiary { - @apply preset-tonal-tertiary border border-tertiary-500 transition-all; + @apply preset-tonal-tertiary border-tertiary-500 border transition-all; } .ae_btn_success { - @apply preset-tonal-success border border-success-500 transition-all; + @apply preset-tonal-success border-success-500 border transition-all; } .ae_btn_warning { - @apply preset-tonal-warning border border-warning-500 text-warning-950-50 transition-all; + @apply preset-tonal-warning border-warning-500 text-warning-950-50 border transition-all; } .ae_btn_error { - @apply preset-tonal-error border border-error-500 transition-all; + @apply preset-tonal-error border-error-500 border transition-all; } .ae_btn_surface { - @apply preset-tonal-surface border border-surface-500 transition-all; + @apply preset-tonal-surface border-surface-500 border transition-all; } /* Buttons customized for Aether using Skeleton Tailwind preset classes */ .ae_btn_info { - @apply border text-cyan-950 dark:text-cyan-50 bg-cyan-50 dark:bg-cyan-950 border-cyan-100 dark:border-cyan-900 hover:bg-cyan-200 hover:dark:bg-cyan-800 transition-all; + @apply border border-cyan-100 bg-cyan-50 text-cyan-950 transition-all hover:bg-cyan-200 dark:border-cyan-900 dark:bg-cyan-950 dark:text-cyan-50 hover:dark:bg-cyan-800; } /* Buttons are for filled and outlined presets */ .ae_btn_secondary_filled { - @apply preset-filled-secondary-200-800 border border-secondary-500 transition-all; + @apply preset-filled-secondary-200-800 border-secondary-500 border transition-all; /* hover:preset-filled-secondary-500 */ } .ae_btn_secondary_outlined { @apply preset-outlined-secondary-200-800 hover:preset-filled-secondary-400-600 text-secondary-950-50 transition-all; } .ae_btn_success_filled { - @apply preset-filled-success-200-800 border border-success-500 transition-all; + @apply preset-filled-success-200-800 border-success-500 border transition-all; } .ae_btn_success_outlined { @apply preset-outlined-success-200-800 hover:preset-filled-success-400-600 text-success-950-50 transition-all; } .ae_btn_warning_filled { - @apply preset-filled-warning-200-800 border border-warning-500 transition-all; + @apply preset-filled-warning-200-800 border-warning-500 border transition-all; } .ae_btn_warning_outlined { @apply preset-outlined-warning-200-800 hover:preset-filled-warning-400-600 text-warning-950-50 transition-all; } .ae_btn_surface_filled { - @apply preset-filled-surface-200-800 border border-surface-500 transition-all; + @apply preset-filled-surface-200-800 border-surface-500 border transition-all; } .ae_btn_surface_outlined { @apply preset-outlined-surface-200-800 hover:preset-filled-surface-400-600 text-surface-950-50 transition-all; @@ -409,10 +416,10 @@ html.trusted_access #appShell { @apply preset-outlined-error-200-800 hover:preset-filled-error-400-600 text-error-950-50 transition-all; } .ae_btn_info_filled { - @apply border text-cyan-950 dark:text-cyan-50 bg-cyan-200 dark:bg-cyan-800 border-cyan-200 dark:border-cyan-800 transition-all; + @apply border border-cyan-200 bg-cyan-200 text-cyan-950 transition-all dark:border-cyan-800 dark:bg-cyan-800 dark:text-cyan-50; } .ae_btn_info_outlined { - @apply border text-cyan-950 dark:text-cyan-50 bg-cyan-50 dark:bg-cyan-950 border-cyan-200 dark:border-cyan-800 transition-all; + @apply border border-cyan-200 bg-cyan-50 text-cyan-950 transition-all dark:border-cyan-800 dark:bg-cyan-950 dark:text-cyan-50; } /* Containers customized for Aether using Skeleton Tailwind preset classes */ @@ -436,7 +443,7 @@ html.trusted_access #appShell { .ae_module_header { /* LCI request 3a5997 */ /* bg-gray-300 */ - @apply preset-tonal-surface rounded-md flex flex-col md:flex-row flex-wrap gap-0.25 items-center justify-between w-full max-w-7xl p-1 px-2; + @apply preset-tonal-surface flex w-full max-w-7xl flex-col flex-wrap items-center justify-between gap-0.25 rounded-md p-1 px-2 md:flex-row; } [data-theme='AE_c_LCI'] .ae_module_header { @@ -453,32 +460,18 @@ html.trusted_access #appShell { @apply container; } .ae_container_module_menu { - @apply w-full max-w-7xl flex flex-col items-center justify-center gap-1 p-1 - border rounded-md border-gray-200 dark:border-gray-800 hover:bg-gray-100 dark:hover:bg-gray-900 transition-all duration-700 hover:duration-300; + @apply flex w-full max-w-7xl flex-col items-center justify-center gap-1 rounded-md border border-gray-200 p-1 transition-all duration-700 hover:bg-gray-100 hover:duration-300 dark:border-gray-800 dark:hover:bg-gray-900; } .ae_container_module_options { - @apply text-cyan-950 dark:text-cyan-50 - bg-cyan-50 dark:bg-cyan-950 hover:bg-cyan-100 dark:hover:bg-cyan-900 - border border-cyan-200 dark:border-cyan-800 hover:border-cyan-400 dark:hover:border-cyan-600 - rounded-md - flex flex-row flex-wrap items-center justify-around - w-full max-w-full - p-2 - transition-all; + @apply flex w-full max-w-full flex-row flex-wrap items-center justify-around rounded-md border border-cyan-200 bg-cyan-50 p-2 text-cyan-950 transition-all hover:border-cyan-400 hover:bg-cyan-100 dark:border-cyan-800 dark:bg-cyan-950 dark:text-cyan-50 dark:hover:border-cyan-600 dark:hover:bg-cyan-900; } .ae_container_module_help { - @apply text-yellow-950 dark:text-yellow-50 - bg-yellow-50 dark:bg-yellow-950 hover:bg-yellow-100 dark:hover:bg-yellow-900 - border border-yellow-200 dark:border-yellow-800 hover:border-yellow-400 dark:hover:border-yellow-600 - rounded-md - w-lg max-w-full - p-2 - transition-all; + @apply w-lg max-w-full rounded-md border border-yellow-200 bg-yellow-50 p-2 text-yellow-950 transition-all hover:border-yellow-400 hover:bg-yellow-100 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-50 dark:hover:border-yellow-600 dark:hover:bg-yellow-900; /* bg-yellow-100 border border-yellow-400 p-2 rounded-md max-w-xl */ } .ae_container_actions { - @apply container preset-tonal-success border border-success-500 rounded-md flex flex-row items-center my-2 p-2; + @apply preset-tonal-success border-success-500 container my-2 flex flex-row items-center rounded-md border p-2; } .ae_container_results { @apply container; @@ -500,23 +493,11 @@ html.trusted_access #appShell { @apply container; } .ae_container_help { - @apply text-yellow-950 dark:text-yellow-50 - bg-yellow-50 dark:bg-yellow-950 hover:bg-yellow-100 dark:hover:bg-yellow-900 - border border-yellow-200 dark:border-yellow-800 hover:border-yellow-400 dark:hover:border-yellow-600 - rounded-md - max-w-full - p-2 - transition-all; + @apply max-w-full rounded-md border border-yellow-200 bg-yellow-50 p-2 text-yellow-950 transition-all hover:border-yellow-400 hover:bg-yellow-100 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-50 dark:hover:border-yellow-600 dark:hover:bg-yellow-900; /* bg-yellow-100 border border-yellow-400 p-2 rounded-md max-w-xl */ } .ae_container_info { - @apply text-cyan-950 dark:text-cyan-50 - bg-cyan-50 dark:bg-cyan-950 hover:bg-cyan-100 dark:hover:bg-cyan-900 - border border-cyan-200 dark:border-cyan-800 hover:border-cyan-400 dark:hover:border-cyan-600 - rounded-md - max-w-full - p-2 - transition-all; + @apply max-w-full rounded-md border border-cyan-200 bg-cyan-50 p-2 text-cyan-950 transition-all hover:border-cyan-400 hover:bg-cyan-100 dark:border-cyan-800 dark:bg-cyan-950 dark:text-cyan-50 dark:hover:border-cyan-600 dark:hover:bg-cyan-900; } .ae_container_msg { @apply container; diff --git a/src/app.d.ts b/src/app.d.ts index a66acedd..25e7c631 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -14,7 +14,7 @@ declare global { namespace App { interface Platform {} } - + interface Window { native_app: any; } diff --git a/src/app.html b/src/app.html index 7557e1f2..bfd186a1 100644 --- a/src/app.html +++ b/src/app.html @@ -12,16 +12,13 @@ + rel="stylesheet" /> + rel="stylesheet" /> + rel="stylesheet" /> diff --git a/src/lib/ae_api/api_delete_object.ts b/src/lib/ae_api/api_delete_object.ts index fc6f517d..7d37ba98 100644 --- a/src/lib/ae_api/api_delete_object.ts +++ b/src/lib/ae_api/api_delete_object.ts @@ -43,7 +43,9 @@ export const delete_object = async function delete_object({ // Construct the URL with query parameters const url = new URL(endpoint, api_cfg['base_url']); if (params) { - Object.keys(params).forEach((key) => url.searchParams.append(key, params[key])); + Object.keys(params).forEach((key) => + url.searchParams.append(key, params[key]) + ); } // Clean and merge headers without mutating the original api_cfg @@ -70,8 +72,13 @@ export const delete_object = async function delete_object({ } // Auto-inject Authorization header if JWT is present but header is missing - const jwt = headers_cleaned['jwt'] || headers_cleaned['JWT'] || api_cfg['jwt']; - if (jwt && !headers_cleaned['Authorization'] && !headers_cleaned['authorization']) { + const jwt = + headers_cleaned['jwt'] || headers_cleaned['JWT'] || api_cfg['jwt']; + if ( + jwt && + !headers_cleaned['Authorization'] && + !headers_cleaned['authorization'] + ) { headers_cleaned['Authorization'] = `Bearer ${jwt}`; } @@ -93,20 +100,26 @@ export const delete_object = async function delete_object({ try { const controller = new AbortController(); const timeoutId = setTimeout(() => { - console.error(`API DELETE request timed out after ${timeout}ms.`); + console.error( + `API DELETE request timed out after ${timeout}ms.` + ); controller.abort(); }, timeout); const fetchOptions: RequestInit = { method: 'DELETE', headers: headers_cleaned, - body: Object.keys(data).length > 0 ? JSON.stringify(data) : undefined, + body: + Object.keys(data).length > 0 + ? JSON.stringify(data) + : undefined, signal: controller.signal }; - const response = await fetch_method(url.toString(), fetchOptions).catch(function ( - error: any - ) { + const response = await fetch_method( + url.toString(), + fetchOptions + ).catch(function (error: any) { console.log( 'API DELETE Object *fetch* request was aborted or failed in an unexpected way.', error @@ -121,7 +134,9 @@ export const delete_object = async function delete_object({ } if (log_lvl) { - console.log(`Response: status=${response.status} attempt=${attempt}`); + console.log( + `Response: status=${response.status} attempt=${attempt}` + ); } if (!response.ok) { @@ -129,15 +144,20 @@ export const delete_object = async function delete_object({ console.warn('404 Not Found. Returning null.'); return null; } - + const errorBody = await response.text(); - console.error(`HTTP error! status: ${response.status}`, errorBody); + console.error( + `HTTP error! status: ${response.status}`, + errorBody + ); if (response.status >= 400 && response.status < 404) { return false; } - throw new Error(`HTTP error! status: ${response.status} - ${errorBody}`); + throw new Error( + `HTTP error! status: ${response.status} - ${errorBody}` + ); } const json = await response.json(); @@ -148,7 +168,11 @@ export const delete_object = async function delete_object({ // Return the response data or metadata // Robustly handle V3 response envelopes - return return_meta ? json : (json.data !== undefined ? json.data : json); + return return_meta + ? json + : json.data !== undefined + ? json.data + : json; } catch (error) { console.error(`API DELETE error on attempt ${attempt}:`, error); diff --git a/src/lib/ae_api/api_get__crud_obj_id.ts b/src/lib/ae_api/api_get__crud_obj_id.ts index 49181687..ebcd29c0 100644 --- a/src/lib/ae_api/api_get__crud_obj_id.ts +++ b/src/lib/ae_api/api_get__crud_obj_id.ts @@ -44,7 +44,9 @@ export async function get_ae_obj_id_crud({ log_lvl?: number; }) { if (log_lvl) { - console.log(`*** get_ae_obj_id_crud() *** Type: ${obj_type} ID: ${obj_id}`); + console.log( + `*** get_ae_obj_id_crud() *** Type: ${obj_type} ID: ${obj_id}` + ); } // V3 Standard: Unified endpoint for all objects @@ -77,7 +79,10 @@ export async function get_ae_obj_id_crud({ log_lvl: log_lvl, return_meta: return_meta }).catch(function (error: any) { - console.error(`API GET CRUD object ID request failed for ${obj_type}/${obj_id}`, error); + console.error( + `API GET CRUD object ID request failed for ${obj_type}/${obj_id}`, + error + ); return false; }); @@ -86,4 +91,4 @@ export async function get_ae_obj_id_crud({ } return result; -} \ No newline at end of file +} diff --git a/src/lib/ae_api/api_get__crud_obj_li.ts b/src/lib/ae_api/api_get__crud_obj_li.ts index 5c32a7fe..ec9021a5 100644 --- a/src/lib/ae_api/api_get__crud_obj_li.ts +++ b/src/lib/ae_api/api_get__crud_obj_li.ts @@ -95,7 +95,10 @@ interface GetAeObjLiV3Params { view?: string; limit?: number; offset?: number; - order_by_li?: Record | Record[] | null; + order_by_li?: + | Record + | Record[] + | null; delay_ms?: number; params?: key_val; headers?: key_val; @@ -162,7 +165,10 @@ interface GetNestedObjLiV3Params { view?: string; limit?: number; offset?: number; - order_by_li?: Record | Record[] | null; + order_by_li?: + | Record + | Record[] + | null; delay_ms?: number; log_lvl?: number; } @@ -206,4 +212,4 @@ export async function get_nested_obj_li({ params, log_lvl }); -} \ No newline at end of file +} diff --git a/src/lib/ae_api/api_get__data_store.ts b/src/lib/ae_api/api_get__data_store.ts index 07b4d56e..9e56a64e 100644 --- a/src/lib/ae_api/api_get__data_store.ts +++ b/src/lib/ae_api/api_get__data_store.ts @@ -24,7 +24,9 @@ export async function get_data_store({ log_lvl = 0 }: GetDataStoreV3Params): Promise { if (log_lvl) { - console.log(`*** get_data_store() *** code=${code} no_account_id=${no_account_id}`); + console.log( + `*** get_data_store() *** code=${code} no_account_id=${no_account_id}` + ); } const endpoint = `/v3/data_store/code/${code}`; diff --git a/src/lib/ae_api/api_get_object.ts b/src/lib/ae_api/api_get_object.ts index 684f014c..ea5462c5 100644 --- a/src/lib/ae_api/api_get_object.ts +++ b/src/lib/ae_api/api_get_object.ts @@ -41,7 +41,9 @@ export const get_object = async function get_object({ retry_count?: number; }) { if (log_lvl) { - console.log(`*** get_object() *** Endpoint: ${endpoint} AE Task ID: ${task_id}`); + console.log( + `*** get_object() *** Endpoint: ${endpoint} AE Task ID: ${task_id}` + ); console.log('Params:', params); if (log_lvl > 1) { console.log('Data:', data); @@ -55,7 +57,10 @@ export const get_object = async function get_object({ // FAIL FAST: Check if we are explicitly offline to avoid long browser timeouts if (typeof navigator !== 'undefined' && !navigator.onLine) { - if (log_lvl) console.log('get_object: Browser is offline. Failing fast to allow cache fallback.'); + if (log_lvl) + console.log( + 'get_object: Browser is offline. Failing fast to allow cache fallback.' + ); return false; } @@ -64,7 +69,9 @@ export const get_object = async function get_object({ } const url = new URL(endpoint, api_cfg['base_url']); - Object.keys(params).forEach((key) => url.searchParams.append(key, params[key])); + Object.keys(params).forEach((key) => + url.searchParams.append(key, params[key]) + ); const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), timeout); @@ -96,14 +103,19 @@ export const get_object = async function get_object({ } // Handle "Bootstrap Paradox" for unauthenticated requests - const bypass_val = merged_headers['x-no-account-id'] || merged_headers['x_no_account_id']; - const is_valid_bypass = bypass_val === 'bypass' || - bypass_val === 'Nothing to See Here' || - params['key'] || - bypass_val === 'direct-download'; + const bypass_val = + merged_headers['x-no-account-id'] || merged_headers['x_no_account_id']; + const is_valid_bypass = + bypass_val === 'bypass' || + bypass_val === 'Nothing to See Here' || + params['key'] || + bypass_val === 'direct-download'; if (is_valid_bypass) { - if (log_lvl > 1) console.log('api_get_object: Valid bypass detected. Stripping account ID context.'); + if (log_lvl > 1) + console.log( + 'api_get_object: Valid bypass detected. Stripping account ID context.' + ); delete merged_headers['x-account-id']; delete merged_headers['x_account_id']; } else { @@ -126,11 +138,12 @@ export const get_object = async function get_object({ } // Auto-inject Authorization header if JWT is present but header is missing - let jwt = headers_cleaned['jwt'] || - headers_cleaned['JWT'] || - api_cfg['jwt'] || - api_cfg['headers']?.['jwt'] || - api_cfg['headers']?.['JWT']; + let jwt = + headers_cleaned['jwt'] || + headers_cleaned['JWT'] || + api_cfg['jwt'] || + api_cfg['headers']?.['jwt'] || + api_cfg['headers']?.['JWT']; // Final Fallback: Direct check of primary ae_loc key if (!jwt && typeof localStorage !== 'undefined') { @@ -145,7 +158,11 @@ export const get_object = async function get_object({ } } - if (jwt && !headers_cleaned['Authorization'] && !headers_cleaned['authorization']) { + if ( + jwt && + !headers_cleaned['Authorization'] && + !headers_cleaned['authorization'] + ) { headers_cleaned['Authorization'] = `Bearer ${jwt}`; } @@ -174,18 +191,29 @@ export const get_object = async function get_object({ for (let attempt = 1; attempt <= retry_count; attempt++) { // FAIL FAST: Check if we are explicitly offline to avoid long browser timeouts if (typeof navigator !== 'undefined' && !navigator.onLine) { - if (log_lvl) console.log(`get_object: Browser is offline (attempt ${attempt}). Failing fast to allow cache fallback.`); + if (log_lvl) + console.log( + `get_object: Browser is offline (attempt ${attempt}). Failing fast to allow cache fallback.` + ); return false; } try { - const response = await fetch_method(url.toString(), fetchOptions).catch(function ( - error: any - ) { + const response = await fetch_method( + url.toString(), + fetchOptions + ).catch(function (error: any) { // SILENCE NOISE: Aborted requests (common in SWR/Background loads) shouldn't spam logs - if (error.name === 'AbortError' || error.message?.includes('aborted') || error.name === 'TypeError') { + if ( + error.name === 'AbortError' || + error.message?.includes('aborted') || + error.name === 'TypeError' + ) { if (log_lvl > 1) { - console.log('API GET: Request was aborted or terminated by browser. This is expected during navigation.', error); + console.log( + 'API GET: Request was aborted or terminated by browser. This is expected during navigation.', + error + ); } return error; // Return error to be handled below } @@ -199,11 +227,19 @@ export const get_object = async function get_object({ clearTimeout(timeoutId); // Check if we should stop due to abort or network failure - if (response instanceof Error || (response && (response.name === 'TypeError' || response.name === 'AbortError'))) { + if ( + response instanceof Error || + (response && + (response.name === 'TypeError' || + response.name === 'AbortError')) + ) { // If it was an explicit abort, definitely stop if (response.name === 'AbortError') return false; - if (log_lvl > 1) console.log('API GET Object: Detected NetworkError or TypeError. Failing fast.'); + if (log_lvl > 1) + console.log( + 'API GET Object: Detected NetworkError or TypeError. Failing fast.' + ); return false; } @@ -231,24 +267,45 @@ export const get_object = async function get_object({ if (!response.ok) { if (response.status === 404) { if (log_lvl) { - console.log('The response was a 404 not found "error". Returning null.'); + console.log( + 'The response was a 404 not found "error". Returning null.' + ); } return null; } // FAIL FAST (Section 2D): Do not retry on Auth or Client errors (400, 401, 403, 422) - if (response.status === 400 || response.status === 401 || response.status === 403 || response.status === 422) { - if (log_lvl) console.error(`API Client Failure (${response.status}). Failing fast.`); + if ( + response.status === 400 || + response.status === 401 || + response.status === 403 || + response.status === 422 + ) { + if (log_lvl) + console.error( + `API Client Failure (${response.status}). Failing fast.` + ); if (response.status === 401 || response.status === 403) { - console.warn(`AUTH DIAGNOSTICS: Headers sent for ${endpoint}:`, { - has_auth: !!headers_cleaned['Authorization'], - has_api_key: !!headers_cleaned['x-aether-api-key'], - has_account_id: !!headers_cleaned['x-account-id'], - jwt_preview: jwt ? `${jwt.slice(0, 8)}...` : 'MISSING' - }); + console.warn( + `AUTH DIAGNOSTICS: Headers sent for ${endpoint}:`, + { + has_auth: !!headers_cleaned['Authorization'], + has_api_key: + !!headers_cleaned['x-aether-api-key'], + has_account_id: + !!headers_cleaned['x-account-id'], + jwt_preview: jwt + ? `${jwt.slice(0, 8)}...` + : 'MISSING' + } + ); // Signal the root layout to show the session-expired banner. - if (browser) ae_auth_error.set({ type: 'expired', ts: Date.now() }); + if (browser) + ae_auth_error.set({ + type: 'expired', + ts: Date.now() + }); } // Structured Error Handling (V3): Attempt to get rich error metadata @@ -259,7 +316,11 @@ export const get_object = async function get_object({ // Not JSON } - if (log_lvl) console.log('The response was not ok. Structured Error Check:', error_json); + if (log_lvl) + console.log( + 'The response was not ok. Structured Error Check:', + error_json + ); if (error_json?.meta?.details) { return error_json; @@ -273,7 +334,10 @@ export const get_object = async function get_object({ status_code: response.status, details: { category: 'validation', - message: typeof error_json.detail === 'string' ? error_json.detail : JSON.stringify(error_json.detail), + message: + typeof error_json.detail === 'string' + ? error_json.detail + : JSON.stringify(error_json.detail), raw: error_json.detail } } @@ -307,7 +371,9 @@ export const get_object = async function get_object({ chunks.push(value); receivedLength += value.length; - const percent_completed = Math.round((receivedLength * 100) / contentLength); + const percent_completed = Math.round( + (receivedLength * 100) / contentLength + ); if (log_lvl > 1) { console.log( 'GET Blob Progress:', @@ -359,7 +425,10 @@ export const get_object = async function get_object({ } } } catch (error) { - console.log(`API GET object request *fetch* error on attempt ${attempt}:`, error); + console.log( + `API GET object request *fetch* error on attempt ${attempt}:`, + error + ); if (attempt === retry_count) { console.log('Max retry attempts reached. Returning false.'); diff --git a/src/lib/ae_api/api_patch_object.ts b/src/lib/ae_api/api_patch_object.ts index 85d391ff..3c8da66e 100644 --- a/src/lib/ae_api/api_patch_object.ts +++ b/src/lib/ae_api/api_patch_object.ts @@ -45,7 +45,9 @@ export const patch_object = async function patch_object({ // Construct the URL with query parameters const url = new URL(endpoint, api_cfg['base_url']); if (params) { - Object.keys(params).forEach((key) => url.searchParams.append(key, params[key])); + Object.keys(params).forEach((key) => + url.searchParams.append(key, params[key]) + ); } // Clean and merge headers without mutating the original api_cfg @@ -75,14 +77,19 @@ export const patch_object = async function patch_object({ } // Handle "Bootstrap Paradox" for unauthenticated requests - const bypass_val = merged_headers['x-no-account-id'] || merged_headers['x_no_account_id']; - const is_valid_bypass = bypass_val === 'bypass' || - bypass_val === 'Nothing to See Here' || - params['key'] || - bypass_val === 'direct-download'; + const bypass_val = + merged_headers['x-no-account-id'] || merged_headers['x_no_account_id']; + const is_valid_bypass = + bypass_val === 'bypass' || + bypass_val === 'Nothing to See Here' || + params['key'] || + bypass_val === 'direct-download'; if (is_valid_bypass) { - if (log_lvl > 1) console.log('api_patch_object: Valid bypass detected. Stripping account ID context.'); + if (log_lvl > 1) + console.log( + 'api_patch_object: Valid bypass detected. Stripping account ID context.' + ); delete merged_headers['x-account-id']; delete merged_headers['x_account_id']; } else { @@ -104,11 +111,12 @@ export const patch_object = async function patch_object({ } // Auto-inject Authorization header if JWT is present but header is missing - let jwt = headers_cleaned['jwt'] || - headers_cleaned['JWT'] || - api_cfg['jwt'] || - api_cfg['headers']?.['jwt'] || - api_cfg['headers']?.['JWT']; + let jwt = + headers_cleaned['jwt'] || + headers_cleaned['JWT'] || + api_cfg['jwt'] || + api_cfg['headers']?.['jwt'] || + api_cfg['headers']?.['JWT']; // Final Fallback: Direct check of primary ae_loc key if (!jwt && typeof localStorage !== 'undefined') { @@ -123,7 +131,11 @@ export const patch_object = async function patch_object({ } } - if (jwt && !headers_cleaned['Authorization'] && !headers_cleaned['authorization']) { + if ( + jwt && + !headers_cleaned['Authorization'] && + !headers_cleaned['authorization'] + ) { headers_cleaned['Authorization'] = `Bearer ${jwt}`; } @@ -145,7 +157,9 @@ export const patch_object = async function patch_object({ try { const controller = new AbortController(); const timeoutId = setTimeout(() => { - console.error(`API PATCH request timed out after ${timeout}ms.`); + console.error( + `API PATCH request timed out after ${timeout}ms.` + ); controller.abort(); }, timeout); @@ -156,9 +170,10 @@ export const patch_object = async function patch_object({ signal: controller.signal }; - const response = await fetch_method(url.toString(), fetchOptions).catch(function ( - error: any - ) { + const response = await fetch_method( + url.toString(), + fetchOptions + ).catch(function (error: any) { console.log( 'API PATCH Object *fetch* request was aborted or failed in an unexpected way.', error @@ -173,30 +188,53 @@ export const patch_object = async function patch_object({ } if (log_lvl) { - console.log(`Response: status=${response.status} attempt=${attempt}`); + console.log( + `Response: status=${response.status} attempt=${attempt}` + ); } if (!response.ok) { if (response.status === 404) { if (log_lvl) { - console.log('The response was a 404 not found "error". Returning null.'); + console.log( + 'The response was a 404 not found "error". Returning null.' + ); } return null; } // FAIL FAST (Section 2D): Do not retry on Auth or Client errors (400, 401, 403, 422) - if (response.status === 400 || response.status === 401 || response.status === 403 || response.status === 422) { - if (log_lvl) console.error(`API Client Failure (${response.status}). Failing fast.`); + if ( + response.status === 400 || + response.status === 401 || + response.status === 403 || + response.status === 422 + ) { + if (log_lvl) + console.error( + `API Client Failure (${response.status}). Failing fast.` + ); if (response.status === 401 || response.status === 403) { - console.warn(`AUTH DIAGNOSTICS (PATCH): Headers sent for ${endpoint}:`, { - has_auth: !!headers_cleaned['Authorization'], - has_api_key: !!headers_cleaned['x-aether-api-key'], - has_account_id: !!headers_cleaned['x-account-id'], - jwt_preview: jwt ? `${jwt.slice(0, 8)}...` : 'MISSING' - }); + console.warn( + `AUTH DIAGNOSTICS (PATCH): Headers sent for ${endpoint}:`, + { + has_auth: !!headers_cleaned['Authorization'], + has_api_key: + !!headers_cleaned['x-aether-api-key'], + has_account_id: + !!headers_cleaned['x-account-id'], + jwt_preview: jwt + ? `${jwt.slice(0, 8)}...` + : 'MISSING' + } + ); // Signal the root layout to show the session-expired banner. - if (browser) ae_auth_error.set({ type: 'expired', ts: Date.now() }); + if (browser) + ae_auth_error.set({ + type: 'expired', + ts: Date.now() + }); } // Structured Error Handling (V3): Attempt to get rich error metadata @@ -207,7 +245,11 @@ export const patch_object = async function patch_object({ // Not JSON } - if (log_lvl) console.log('The response was not ok. Structured Error Check:', error_json); + if (log_lvl) + console.log( + 'The response was not ok. Structured Error Check:', + error_json + ); if (error_json?.meta?.details) { return error_json; @@ -221,7 +263,10 @@ export const patch_object = async function patch_object({ status_code: response.status, details: { category: 'validation', - message: typeof error_json.detail === 'string' ? error_json.detail : JSON.stringify(error_json.detail), + message: + typeof error_json.detail === 'string' + ? error_json.detail + : JSON.stringify(error_json.detail), raw: error_json.detail } } @@ -242,7 +287,11 @@ export const patch_object = async function patch_object({ // Return the response data or metadata // Robustly handle V3 response envelopes - return return_meta ? json : (json.data !== undefined ? json.data : json); + return return_meta + ? json + : json.data !== undefined + ? json.data + : json; } catch (error) { console.error(`API PATCH error on attempt ${attempt}:`, error); diff --git a/src/lib/ae_api/api_post__crud_obj.ts b/src/lib/ae_api/api_post__crud_obj.ts index 796b6ba6..e9034153 100644 --- a/src/lib/ae_api/api_post__crud_obj.ts +++ b/src/lib/ae_api/api_post__crud_obj.ts @@ -33,7 +33,11 @@ export async function create_ae_obj({ // Standard Aether Pattern: Auto-serialize any key ending in _json const cleaned_fields = { ...fields }; for (const key in cleaned_fields) { - if (key.endsWith('_json') && cleaned_fields[key] !== null && typeof cleaned_fields[key] === 'object') { + if ( + key.endsWith('_json') && + cleaned_fields[key] !== null && + typeof cleaned_fields[key] === 'object' + ) { if (log_lvl) console.log(`Auto-serializing field: ${key}`); cleaned_fields[key] = JSON.stringify(cleaned_fields[key]); } @@ -94,7 +98,11 @@ export async function create_nested_obj({ // Standard Aether Pattern: Auto-serialize any key ending in _json const cleaned_fields = { ...fields }; for (const key in cleaned_fields) { - if (key.endsWith('_json') && cleaned_fields[key] !== null && typeof cleaned_fields[key] === 'object') { + if ( + key.endsWith('_json') && + cleaned_fields[key] !== null && + typeof cleaned_fields[key] === 'object' + ) { cleaned_fields[key] = JSON.stringify(cleaned_fields[key]); } } @@ -140,7 +148,11 @@ export async function update_ae_obj({ // Standard Aether Pattern: Auto-serialize any key ending in _json const cleaned_fields = { ...fields }; for (const key in cleaned_fields) { - if (key.endsWith('_json') && cleaned_fields[key] !== null && typeof cleaned_fields[key] === 'object') { + if ( + key.endsWith('_json') && + cleaned_fields[key] !== null && + typeof cleaned_fields[key] === 'object' + ) { if (log_lvl > 1) console.log(`Auto-serializing field: ${key}`); cleaned_fields[key] = JSON.stringify(cleaned_fields[key]); } @@ -202,7 +214,11 @@ export async function update_nested_obj({ // Standard Aether Pattern: Auto-serialize any key ending in _json const cleaned_fields = { ...fields }; for (const key in cleaned_fields) { - if (key.endsWith('_json') && cleaned_fields[key] !== null && typeof cleaned_fields[key] === 'object') { + if ( + key.endsWith('_json') && + cleaned_fields[key] !== null && + typeof cleaned_fields[key] === 'object' + ) { cleaned_fields[key] = JSON.stringify(cleaned_fields[key]); } } diff --git a/src/lib/ae_api/api_post__crud_search.ts b/src/lib/ae_api/api_post__crud_search.ts index 844e41f2..00bee385 100644 --- a/src/lib/ae_api/api_post__crud_search.ts +++ b/src/lib/ae_api/api_post__crud_search.ts @@ -10,7 +10,10 @@ interface SearchAeObjV3Params { view?: string; for_obj_type?: string; for_obj_id?: string; - order_by_li?: Record | Record[] | null; + order_by_li?: + | Record + | Record[] + | null; limit?: number; offset?: number; delay_ms?: number; @@ -55,7 +58,10 @@ export async function search_ae_obj({ // Serialize any complex objects in the query params (e.g. ft_qry, lk_qry) for (const key in query_params) { - if (typeof query_params[key] === 'object' && query_params[key] !== null) { + if ( + typeof query_params[key] === 'object' && + query_params[key] !== null + ) { query_params[key] = JSON.stringify(query_params[key]); } } @@ -76,4 +82,4 @@ export async function search_ae_obj({ data: search_query, log_lvl }); -} \ No newline at end of file +} diff --git a/src/lib/ae_api/api_post_object.ts b/src/lib/ae_api/api_post_object.ts index 9786f364..9206824f 100644 --- a/src/lib/ae_api/api_post_object.ts +++ b/src/lib/ae_api/api_post_object.ts @@ -41,7 +41,9 @@ export const post_object = async function post_object({ retry_count?: number; }) { if (log_lvl) { - console.log(`*** post_object() *** Endpoint: ${endpoint} Task ID: ${task_id}`); + console.log( + `*** post_object() *** Endpoint: ${endpoint} Task ID: ${task_id}` + ); console.log('Params:', params); if (log_lvl > 1) { console.log('Data:', data); @@ -65,7 +67,9 @@ export const post_object = async function post_object({ // Construct the URL with query parameters const url = new URL(endpoint, api_cfg['base_url']); if (params) { - Object.keys(params).forEach((key) => url.searchParams.append(key, params[key])); + Object.keys(params).forEach((key) => + url.searchParams.append(key, params[key]) + ); } // Clean and merge headers @@ -95,14 +99,19 @@ export const post_object = async function post_object({ } // Handle "Bootstrap Paradox" for unauthenticated requests - const bypass_val = merged_headers['x-no-account-id'] || merged_headers['x_no_account_id']; - const is_valid_bypass = bypass_val === 'bypass' || - bypass_val === 'Nothing to See Here' || - params['key'] || - bypass_val === 'direct-download'; + const bypass_val = + merged_headers['x-no-account-id'] || merged_headers['x_no_account_id']; + const is_valid_bypass = + bypass_val === 'bypass' || + bypass_val === 'Nothing to See Here' || + params['key'] || + bypass_val === 'direct-download'; if (is_valid_bypass) { - if (log_lvl > 1) console.log('api_post_object: Valid bypass detected. Stripping account ID context.'); + if (log_lvl > 1) + console.log( + 'api_post_object: Valid bypass detected. Stripping account ID context.' + ); delete merged_headers['x-account-id']; delete merged_headers['x_account_id']; } else { @@ -124,11 +133,12 @@ export const post_object = async function post_object({ } // Auto-inject Authorization header if JWT is present but header is missing - let jwt = headers_cleaned['jwt'] || - headers_cleaned['JWT'] || - api_cfg['jwt'] || - api_cfg['headers']?.['jwt'] || - api_cfg['headers']?.['JWT']; + let jwt = + headers_cleaned['jwt'] || + headers_cleaned['JWT'] || + api_cfg['jwt'] || + api_cfg['headers']?.['jwt'] || + api_cfg['headers']?.['JWT']; // Final Fallback: Direct check of primary ae_loc key if (!jwt && typeof localStorage !== 'undefined') { @@ -143,7 +153,11 @@ export const post_object = async function post_object({ } } - if (jwt && !headers_cleaned['Authorization'] && !headers_cleaned['authorization']) { + if ( + jwt && + !headers_cleaned['Authorization'] && + !headers_cleaned['authorization'] + ) { headers_cleaned['Authorization'] = `Bearer ${jwt}`; } @@ -186,13 +200,21 @@ export const post_object = async function post_object({ console.log('Fetch Options:', fetchOptions); } - const response = await fetch_method(url.toString(), fetchOptions).catch(function ( - error: any - ) { + const response = await fetch_method( + url.toString(), + fetchOptions + ).catch(function (error: any) { // SILENCE NOISE: Aborted requests shouldn't spam logs at log_lvl 0 - if (error.name === 'AbortError' || error.message?.includes('aborted') || error.name === 'TypeError') { + if ( + error.name === 'AbortError' || + error.message?.includes('aborted') || + error.name === 'TypeError' + ) { if (log_lvl > 1) { - console.log('API POST: Request was aborted or terminated by browser. Expected during navigation.', error); + console.log( + 'API POST: Request was aborted or terminated by browser. Expected during navigation.', + error + ); } return error; } @@ -206,9 +228,17 @@ export const post_object = async function post_object({ clearTimeout(timeoutId); // Check if we should stop due to abort or network failure - if (response instanceof Error || (response && (response.name === 'TypeError' || response.name === 'AbortError'))) { + if ( + response instanceof Error || + (response && + (response.name === 'TypeError' || + response.name === 'AbortError')) + ) { if (response.name === 'AbortError') return false; - if (log_lvl > 1) console.log('API POST Object: Detected NetworkError or TypeError. Failing fast.'); + if (log_lvl > 1) + console.log( + 'API POST Object: Detected NetworkError or TypeError. Failing fast.' + ); return false; } @@ -219,30 +249,53 @@ export const post_object = async function post_object({ } if (log_lvl) { - console.log(`Response: status=${response.status} attempt=${attempt}`); + console.log( + `Response: status=${response.status} attempt=${attempt}` + ); } if (!response.ok) { if (response.status === 404) { if (log_lvl) { - console.log('The response was a 404 not found "error". Returning null.'); + console.log( + 'The response was a 404 not found "error". Returning null.' + ); } return null; } // FAIL FAST (Section 2D): Do not retry on Auth or Client errors (400, 401, 403, 422) - if (response.status === 400 || response.status === 401 || response.status === 403 || response.status === 422) { - if (log_lvl) console.error(`API Client Failure (${response.status}). Failing fast.`); + if ( + response.status === 400 || + response.status === 401 || + response.status === 403 || + response.status === 422 + ) { + if (log_lvl) + console.error( + `API Client Failure (${response.status}). Failing fast.` + ); if (response.status === 401 || response.status === 403) { - console.warn(`AUTH DIAGNOSTICS (POST): Headers sent for ${endpoint}:`, { - has_auth: !!headers_cleaned['Authorization'], - has_api_key: !!headers_cleaned['x-aether-api-key'], - has_account_id: !!headers_cleaned['x-account-id'], - jwt_preview: jwt ? `${jwt.slice(0, 8)}...` : 'MISSING' - }); + console.warn( + `AUTH DIAGNOSTICS (POST): Headers sent for ${endpoint}:`, + { + has_auth: !!headers_cleaned['Authorization'], + has_api_key: + !!headers_cleaned['x-aether-api-key'], + has_account_id: + !!headers_cleaned['x-account-id'], + jwt_preview: jwt + ? `${jwt.slice(0, 8)}...` + : 'MISSING' + } + ); // Signal the root layout to show the session-expired banner. - if (browser) ae_auth_error.set({ type: 'expired', ts: Date.now() }); + if (browser) + ae_auth_error.set({ + type: 'expired', + ts: Date.now() + }); } // Structured Error Handling (V3): Attempt to get rich error metadata @@ -253,7 +306,11 @@ export const post_object = async function post_object({ // Not JSON } - if (log_lvl) console.log('The response was not ok. Structured Error Check:', error_json); + if (log_lvl) + console.log( + 'The response was not ok. Structured Error Check:', + error_json + ); if (error_json?.meta?.details) { return error_json; @@ -267,7 +324,10 @@ export const post_object = async function post_object({ status_code: response.status, details: { category: 'validation', - message: typeof error_json.detail === 'string' ? error_json.detail : JSON.stringify(error_json.detail), + message: + typeof error_json.detail === 'string' + ? error_json.detail + : JSON.stringify(error_json.detail), raw: error_json.detail } } @@ -311,7 +371,11 @@ export const post_object = async function post_object({ // Return the response data or metadata // Robustly handle V3 response envelopes - return return_meta ? json : (json.data !== undefined ? json.data : json); + return return_meta + ? json + : json.data !== undefined + ? json.data + : json; } else { const blob = await response.blob(); diff --git a/src/lib/ae_archives/ae_archives__archive.ts b/src/lib/ae_archives/ae_archives__archive.ts index 768bcfd9..58cbb7c9 100644 --- a/src/lib/ae_archives/ae_archives__archive.ts +++ b/src/lib/ae_archives/ae_archives__archive.ts @@ -36,7 +36,9 @@ export async function load_ae_obj_id__archive({ log_lvl?: number; }): Promise { if (log_lvl) { - console.log(`*** load_ae_obj_id__archive() *** archive_id=${archive_id}`); + console.log( + `*** load_ae_obj_id__archive() *** archive_id=${archive_id}` + ); } ae_promises.load__archive_obj = await api @@ -52,10 +54,11 @@ export async function load_ae_obj_id__archive({ .then(async function (archive_obj_get_result) { if (archive_obj_get_result) { if (try_cache) { - const processed_obj_li = await process_ae_obj__archive_props({ - obj_li: [archive_obj_get_result], - log_lvl: log_lvl - }); + const processed_obj_li = + await process_ae_obj__archive_props({ + obj_li: [archive_obj_get_result], + log_lvl: log_lvl + }); await db_save_ae_obj_li__ae_obj({ db_instance: db_archives, table_name: 'archive', @@ -76,19 +79,21 @@ export async function load_ae_obj_id__archive({ if (inc_content_li && ae_promises.load__archive_obj) { // Load the contents for the archive - const load_archive_content_obj_li = await load_ae_obj_li__archive_content({ - api_cfg: api_cfg, - for_obj_type: 'archive', - for_obj_id: archive_id, - enabled: enabled, - hidden: hidden, - limit: limit, - offset: offset, - params: params, - try_cache: try_cache, - log_lvl: log_lvl - }); - ae_promises.load__archive_obj.archive_content_li = load_archive_content_obj_li; + const load_archive_content_obj_li = + await load_ae_obj_li__archive_content({ + api_cfg: api_cfg, + for_obj_type: 'archive', + for_obj_id: archive_id, + enabled: enabled, + hidden: hidden, + limit: limit, + offset: offset, + params: params, + try_cache: try_cache, + log_lvl: log_lvl + }); + ae_promises.load__archive_obj.archive_content_li = + load_archive_content_obj_li; } return ae_promises.load__archive_obj; @@ -125,7 +130,9 @@ export async function load_ae_obj_li__archive({ view?: string; limit?: number; offset?: number; - order_by_li?: Record | Record[]; + order_by_li?: + | Record + | Record[]; params?: key_val; try_cache?: boolean; log_lvl?: number; @@ -138,7 +145,9 @@ export async function load_ae_obj_li__archive({ // DEBUG: Trace massive content loads if (inc_content_li) { - console.warn(`load_ae_obj_li__archive: Loading content for ALL archives in list! Limit: ${limit}`); + console.warn( + `load_ae_obj_li__archive: Loading content for ALL archives in list! Limit: ${limit}` + ); // console.trace(); } @@ -159,10 +168,11 @@ export async function load_ae_obj_li__archive({ .then(async function (archive_obj_li_get_result) { if (archive_obj_li_get_result) { if (try_cache) { - const processed_obj_li = await process_ae_obj__archive_props({ - obj_li: archive_obj_li_get_result, - log_lvl: log_lvl - }); + const processed_obj_li = + await process_ae_obj__archive_props({ + obj_li: archive_obj_li_get_result, + log_lvl: log_lvl + }); await db_save_ae_obj_li__ae_obj({ db_instance: db_archives, table_name: 'archive', @@ -220,7 +230,9 @@ export async function create_ae_obj__archive({ log_lvl?: number; }): Promise { if (log_lvl) { - console.log(`*** create_ae_obj__archive() *** account_id=${account_id}`); + console.log( + `*** create_ae_obj__archive() *** account_id=${account_id}` + ); } const result = await api.create_ae_obj({ @@ -268,7 +280,9 @@ export async function delete_ae_obj_id__archive({ log_lvl?: number; }) { if (log_lvl) { - console.log(`*** delete_ae_obj_id__archive() *** archive_id=${archive_id}`); + console.log( + `*** delete_ae_obj_id__archive() *** archive_id=${archive_id}` + ); } const result = await api.delete_ae_obj({ @@ -304,7 +318,10 @@ export async function update_ae_obj__archive({ log_lvl?: number; }): Promise { if (log_lvl) { - console.log(`*** update_ae_obj__archive() *** archive_id=${archive_id}`, data_kv); + console.log( + `*** update_ae_obj__archive() *** archive_id=${archive_id}`, + data_kv + ); } const result = await api.update_ae_obj({ @@ -366,7 +383,11 @@ export async function qry__archive({ const search_query: any = { and: [] }; if (account_id) { - search_query.and.push({ field: 'account_id_random', op: 'eq', value: account_id }); + search_query.and.push({ + field: 'account_id_random', + op: 'eq', + value: account_id + }); } if (qry_str) { @@ -452,11 +473,15 @@ async function _process_generic_props>({ const updated = processed_obj.updated_on ?? processed_obj.created_on; const name = processed_obj.name ?? ''; - (processed_obj as any).tmp_sort_1 = `${group}_${priority}_${sort}_${updated}`; - (processed_obj as any).tmp_sort_2 = `${group}_${priority}_${sort}_${name}_${updated}`; + (processed_obj as any).tmp_sort_1 = + `${group}_${priority}_${sort}_${updated}`; + (processed_obj as any).tmp_sort_2 = + `${group}_${priority}_${sort}_${name}_${updated}`; if (specific_processor) { - processed_obj = await Promise.resolve(specific_processor(processed_obj)); + processed_obj = await Promise.resolve( + specific_processor(processed_obj) + ); } processed_obj_li.push(processed_obj as T); @@ -489,4 +514,4 @@ export async function process_ae_obj__archive_props({ return obj; } }); -} \ No newline at end of file +} diff --git a/src/lib/ae_archives/ae_archives__archive_content.ts b/src/lib/ae_archives/ae_archives__archive_content.ts index efd18179..48c9de44 100644 --- a/src/lib/ae_archives/ae_archives__archive_content.ts +++ b/src/lib/ae_archives/ae_archives__archive_content.ts @@ -41,10 +41,11 @@ export async function load_ae_obj_id__archive_content({ .then(async function (archive_content_obj_get_result) { if (archive_content_obj_get_result) { if (try_cache) { - const processed_obj_li = await process_ae_obj__archive_content_props({ - obj_li: [archive_content_obj_get_result], - log_lvl: log_lvl - }); + const processed_obj_li = + await process_ae_obj__archive_content_props({ + obj_li: [archive_content_obj_get_result], + log_lvl: log_lvl + }); await db_save_ae_obj_li__ae_obj({ db_instance: db_archives, table_name: 'content', @@ -96,7 +97,9 @@ export async function load_ae_obj_li__archive_content({ view?: string; limit?: number; offset?: number; - order_by_li?: Record | Record[]; + order_by_li?: + | Record + | Record[]; params?: key_val; try_cache?: boolean; log_lvl?: number; @@ -124,10 +127,11 @@ export async function load_ae_obj_li__archive_content({ .then(async function (archive_content_obj_li_get_result) { if (archive_content_obj_li_get_result) { if (try_cache) { - const processed_obj_li = await process_ae_obj__archive_content_props({ - obj_li: archive_content_obj_li_get_result, - log_lvl: log_lvl - }); + const processed_obj_li = + await process_ae_obj__archive_content_props({ + obj_li: archive_content_obj_li_get_result, + log_lvl: log_lvl + }); await db_save_ae_obj_li__ae_obj({ db_instance: db_archives, table_name: 'content', @@ -162,11 +166,15 @@ export async function create_ae_obj__archive_content({ log_lvl?: number; }): Promise { if (log_lvl) { - console.log(`*** create_ae_obj__archive_content() *** archive_id=${archive_id}`); + console.log( + `*** create_ae_obj__archive_content() *** archive_id=${archive_id}` + ); } if (!archive_id) { - console.log(`ERROR: Archives - Content - archive_id required to create`); + console.log( + `ERROR: Archives - Content - archive_id required to create` + ); return null; } @@ -357,11 +365,15 @@ async function _process_generic_props>({ const updated = processed_obj.updated_on ?? processed_obj.created_on; const name = processed_obj.name ?? ''; - (processed_obj as any).tmp_sort_1 = `${group}_${priority}_${sort}_${updated}`; - (processed_obj as any).tmp_sort_2 = `${group}_${priority}_${sort}_${name}_${updated}`; + (processed_obj as any).tmp_sort_1 = + `${group}_${priority}_${sort}_${updated}`; + (processed_obj as any).tmp_sort_2 = + `${group}_${priority}_${sort}_${name}_${updated}`; if (specific_processor) { - processed_obj = await Promise.resolve(specific_processor(processed_obj)); + processed_obj = await Promise.resolve( + specific_processor(processed_obj) + ); } processed_obj_li.push(processed_obj as T); @@ -399,4 +411,4 @@ export async function process_ae_obj__archive_content_props({ return obj; } }); -} \ No newline at end of file +} diff --git a/src/lib/ae_core/ae_comp__hosted_files_clip_video.svelte b/src/lib/ae_core/ae_comp__hosted_files_clip_video.svelte index 3a22a4e9..f277b4bf 100644 --- a/src/lib/ae_core/ae_comp__hosted_files_clip_video.svelte +++ b/src/lib/ae_core/ae_comp__hosted_files_clip_video.svelte @@ -1,188 +1,191 @@
@@ -191,11 +194,11 @@ {#each Object.entries(hosted_file_obj_kv) as [hosted_file_id, hosted_file_obj] (hosted_file_id)} -
+
+ class="flex w-full flex-row flex-wrap items-center justify-center gap-1"> @@ -234,60 +236,49 @@ variant="tonal" classes="novi_btn btn-sm lg:btn-md min-w-72 lg:min-w-96 !justify-start" show_divider={true} - max_filename={30} - /> + max_filename={30} />
{ae_util.shorten_filename({ filename: hosted_file_obj?.filename, max_length: 30 - })} + })} File ID: - {hosted_file_obj.hosted_file_id} + {hosted_file_obj.hosted_file_id} Type: - {hosted_file_obj.extension} + {hosted_file_obj.extension}
+ class="{class_li_default} {class_li}"> + value={hosted_file_obj.hosted_file_id} />
- New Filename: + class="flex w-full flex-row items-center justify-center gap-1"> + New Filename: + value={hosted_file_obj.filename} />
+ class="flex w-full max-w-(--breakpoint-sm) flex-row items-center justify-center gap-1"> + class="flex flex-col items-center justify-center gap-1" + title="Re-encode the video file? This does cause some minor quality loss. Re-encoding is useful if the audio or video seems to be chopped off at the beginning or end of the clip. It can also help with partially corrupted files."> Re-encode? + class="flex flex-col items-center justify-center gap-1" + title="Scale the video file down to 1920x1080? This does cause some minor quality loss. Re-encoding is useful if the audio or video seems to be chopped off at the beginning or end of the clip. It can also help with partially corrupted files."> Scale down? @@ -382,9 +363,8 @@
diff --git a/src/lib/ae_core/ae_comp__hosted_files_download_button.svelte b/src/lib/ae_core/ae_comp__hosted_files_download_button.svelte index f7cdc0fe..8fa13d01 100644 --- a/src/lib/ae_core/ae_comp__hosted_files_download_button.svelte +++ b/src/lib/ae_core/ae_comp__hosted_files_download_button.svelte @@ -1,243 +1,275 @@ {#snippet content()} - {@const file_id = hosted_file_obj?.id || hosted_file_obj?.hosted_file_id || hosted_file_id} + {@const file_id = + hosted_file_obj?.id || + hosted_file_obj?.hosted_file_id || + hosted_file_id} {#await ae_promises[file_id]} -
+
+ class="flex shrink-0 items-center pr-2 {show_divider + ? 'border-surface-500/30 mr-2 border-r' + : ''}">
-
+
{#if show_filename_view} -
+
{shortened_filename}
{:else} -
+
Downloading: {#if $ae_sess.api_download_kv[file_id]} - {$ae_sess.api_download_kv[file_id].percent_completed}% + {$ae_sess.api_download_kv[file_id] + .percent_completed}% {:else} ... {/if} @@ -250,18 +282,22 @@ {#if label} {@render label()} {:else} - {@const IconComp = ae_util.file_extension_icon_lucide(hosted_file_obj?.extension)} -
+ {@const IconComp = ae_util.file_extension_icon_lucide( + hosted_file_obj?.extension + )} +
+ class="flex shrink-0 items-center pr-2 {show_divider + ? 'border-surface-500/30 mr-2 border-r' + : ''}">
{shortened_filename} {#if hosted_file_obj?.file_purpose || hosted_file_obj?.group} - + {hosted_file_obj.file_purpose || hosted_file_obj.group} {/if} @@ -270,22 +306,25 @@ {/await} {#if download_complete === null} - File not found + File not found {:else if download_complete === false} - Failed! + Failed! {/if} {/snippet} {#if hosted_file_id && hosted_file_obj} - {@const file_id = hosted_file_obj.id || hosted_file_obj.hosted_file_id || hosted_file_id} + {@const file_id = + hosted_file_obj.id || hosted_file_obj.hosted_file_id || hosted_file_id} {#if show_direct_download} + title={`Direct download (V3 Action):\n${final_filename}\n[API] SHA256: ${hosted_file_obj?.hash_sha256?.slice(0, 10)}...\nHosted ID: ${file_id}`}> {@render content()} {:else} @@ -294,20 +333,24 @@ disabled={require_auth && !$ae_loc.authenticated_access} class={variant_classes} onclick={handle_click} - title={`Download this file:\n${final_filename}\n[API] SHA256: ${hosted_file_obj?.hash_sha256?.slice(0, 10)}...\nHosted ID: ${file_id}\n Linked to: ${linked_to_type} ID: ${linked_to_id}`} - > + title={`Download this file:\n${final_filename}\n[API] SHA256: ${hosted_file_obj?.hash_sha256?.slice(0, 10)}...\nHosted ID: ${file_id}\n Linked to: ${linked_to_type} ID: ${linked_to_id}`}> {@render content()} {/if} {:else} - -{/if} \ No newline at end of file +{/if} diff --git a/src/lib/ae_core/ae_comp__hosted_files_upload.svelte b/src/lib/ae_core/ae_comp__hosted_files_upload.svelte index dcfadff4..294f00eb 100644 --- a/src/lib/ae_core/ae_comp__hosted_files_upload.svelte +++ b/src/lib/ae_core/ae_comp__hosted_files_upload.svelte @@ -1,281 +1,286 @@ {#await ae_promises.upload__hosted_file_obj} -
- +
+ Uploading {#if $ae_sess.api_upload_kv[task_id]} @@ -288,14 +293,14 @@
@@ -710,9 +819,8 @@ autoclose={false} placement="top-center" size="md" - class="top-center bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg border-gray-200 dark:border-gray-700 divide-gray-200 dark:divide-gray-700 shadow-md relative mx-auto w-full divide-y" - > -