From 34fb6894e24f8bc04ffa1f23b2596362455c531c Mon Sep 17 00:00:00 2001 From: Elias <36868565+Prodigist@users.noreply.github.com> Date: Wed, 30 Apr 2025 09:16:15 +0100 Subject: [PATCH] Overhauled CSS styling and added Tailwind Support --- main.tsx | 137 ++++- outStyles.css | 1618 +++++++++++++++++++++++++++++++++++++++++++++++++ styles.css | 464 +++++++++++++- 3 files changed, 2178 insertions(+), 41 deletions(-) create mode 100644 outStyles.css diff --git a/main.tsx b/main.tsx index beb1785..cf5cf94 100644 --- a/main.tsx +++ b/main.tsx @@ -3,19 +3,13 @@ import { createRoot } from 'react-dom/client'; import { transform } from '@babel/standalone'; import * as React from 'react'; import postcss from 'postcss'; -import tailwindcss from 'tailwindcss'; import autoprefixer from 'autoprefixer'; import { StorageManager } from 'src/core/storage'; import { useStorage } from 'src/hooks/useStorage'; import { ComponentRegistry } from 'src/components/componentRegistry'; import { ErrorBoundary } from 'src/components/ErrorBoundary'; -//Optional niche market analysis tools -import { useMarketData } from 'src/core/useMarketData'; -import { createMarketDataHook } from 'src/core/useMarketData'; -import { MarketDataService } from 'src/services/marketDataService'; -import { OrderBlockAnalysisService } from 'src/services/OrderBlockAnalysis'; -import { MarketDataStorage } from 'src/services/marketDataStorage'; + class ReactComponentChild extends MarkdownRenderChild { private root: ReturnType; @@ -25,6 +19,7 @@ class ReactComponentChild extends MarkdownRenderChild { private noteFile: TFile; private ctx: MarkdownPostProcessorContext; private app: App; + constructor(containerEl: HTMLElement, plugin: Plugin, ctx: MarkdownPostProcessorContext) { super(containerEl); @@ -34,15 +29,25 @@ class ReactComponentChild extends MarkdownRenderChild { this.app = plugin.app; // Get app from plugin // Get the source file from context if (ctx.sourcePath) { - this.noteFile = plugin.app.vault.getAbstractFileByPath(ctx.sourcePath) as TFile; + const abstractFile = plugin.app.vault.getAbstractFileByPath(ctx.sourcePath); + if (abstractFile instanceof TFile) { + this.noteFile = abstractFile; + } else { + // Handle the case where it's not a TFile + console.warn(`Source path ${ctx.sourcePath} is not a file`); + throw new Error(`Cannot initialize component: Source path "${ctx.sourcePath}" is not a file.`); + } } // Add these classes to the container containerEl.classList.add('react-component-container'); if (document.body.hasClass('theme-dark')) { containerEl.classList.add('theme-dark'); + containerEl.classList.add('dark'); }else { containerEl.classList.add('theme-light'); + containerEl.classList.remove('dark'); } + } private async getFrontmatterData(key: string, defaultValue: T): Promise { @@ -98,6 +103,34 @@ class ReactComponentChild extends MarkdownRenderChild { ); }; + private needsThree(code: string): boolean { + // Check if the code contains any Three.js specific imports or usage + // More comprehensive detection of THREE usage + const hasThreeImports = /import\s+.*?three['"];?\s*$/gm.test(code) || + /import\s*{\s*[^}]*}\s*from\s*['"]three['"];?\s*$/gm.test(code) || + /import\s+.*?\s+as\s+(\w+)\s+from\s+['"]three['"];?\s*$/gm.test(code); + + // Save any custom import name from "import * as CustomName from 'three'" + const threeAliasMatch = code.match(/import\s+\*\s+as\s+(\w+)\s+from\s+['"]three['"];?\s*$/m); + const threeAlias = threeAliasMatch ? threeAliasMatch[1] : null; + + // Check for various THREE usage patterns + let hasThreeUsage = /\bTHREE\.|\bnew\s+THREE\.|\bextends\s+THREE\./.test(code) || // Direct THREE usage + /\bUtilities\.THREE\.|\bnew\s+Utilities\.THREE\./.test(code) || // Utilities.THREE usage + /\bComponentRegistry\.Utilities\.THREE\./.test(code); // Full path usage + + // If there's a custom alias, check for that too + if (threeAlias) { + hasThreeUsage = hasThreeUsage || new RegExp(`\\b${threeAlias}\\.`).test(code); + } + + // Also check for common THREE classes even without the THREE prefix + const commonThreeClasses = /\b(Scene|PerspectiveCamera|WebGLRenderer|Vector3|BoxGeometry|MeshBasicMaterial|Mesh|Object3D|Group|AmbientLight|DirectionalLight)\b/.test(code); + + // Combined check + return hasThreeImports || hasThreeUsage || commonThreeClasses; + } + private preprocessCode(code: string): string { // Replace CDN imports with script loading @@ -143,8 +176,8 @@ class ReactComponentChild extends MarkdownRenderChild { `; // Find the component name - const componentMatch = code.match(/(?:const|function|class)\s+(\w+)\s*=\s*(?:(?:\([^)]*\)|)\s*=>|function\s*\(|React\.memo\(|React\.forwardRef\(|class\s+extends\s+React\.Component)/); - const componentName = componentMatch ? componentMatch[1] : 'EmptyComponent'; + const componentMatch = code.match(/(?:function\s+(\w+)|(?:const|class)\s+(\w+)\s*=\s*(?:(?:\([^)]*\)|)\s*=>|function\s*\(|React\.memo\(|React\.forwardRef\(|class\s+extends\s+React\.Component))/); + const componentName = componentMatch ? (componentMatch[1] || componentMatch[2]) : 'EmptyComponent'; console.log('Found component:', componentName); // Debug info if (!componentMatch) { throw new Error('No React component found'); @@ -181,20 +214,51 @@ class ReactComponentChild extends MarkdownRenderChild { `; } + // Helper to get THREE.js directly +private getThreeJs() { + // Check if THREE exists in window + if (typeof window !== 'undefined' && 'THREE' in window) { + return window.THREE; + } + + // Fall back to require - only execute if needed + try { + return require('three'); + } catch (error) { + console.warn('Failed to load THREE.js:', error); + return undefined; + } +} + async render(code: string) { console.time('component-render'); try { + + // Add container classes for styling isolation + this.containerEl.classList.add('react-component-container'); + + // Apply theme class for dark mode + /* + if (document.body.classList.contains('theme-dark')) { + this.containerEl.classList.add('dark'); + } else { + this.containerEl.classList.remove('dark'); + }*/ + //console.log('Original code:', code); console.time('preprocess'); // Preprocess code + const needsThree=this.needsThree(code); const processedCode = this.preprocessCode(code); //console.log('Processed code:', processedCode); console.timeEnd('preprocess'); console.time('tailwind'); // Process Tailwind + //Could potentially generate tailwind css based on specific user code using build:css script defined in config + // This would let it work with any user defined tailwind classes //await this.processTailwind(processedCode); - console.timeEnd('tailwind'); + //console.timeEnd('tailwind'); console.time('babel'); const isTypeScript = code.includes(':') || code.includes('interface') || code.includes('<'); @@ -235,15 +299,10 @@ class ReactComponentChild extends MarkdownRenderChild { return [value, updateValue] as const; }; // Create scoped market data hook - const useMarketData = createMarketDataHook(this.storage, this.noteFile); // Create scope with all required dependencies const scope = { ...ComponentRegistry, useStorage: boundUseStorage, - useMarketData, - MarketDataStorage, - OrderBlockAnalysisService, - MarketDataService, getTheme: () => document.body.hasClass('theme-dark') ? 'dark' : 'light', // Add note context noteContext: { @@ -260,6 +319,8 @@ class ReactComponentChild extends MarkdownRenderChild { color: document.body.hasClass('theme-dark') ? '#ffffff' : '#000000' } }), + //lazy load THREE if needed + ...needsThree ? this.getThreeJs() : undefined, }; // Execute the code and get the component @@ -282,6 +343,7 @@ class ReactComponentChild extends MarkdownRenderChild { } onunload() { + this.root.unmount(); } @@ -305,10 +367,26 @@ class ReactComponentChild extends MarkdownRenderChild { } export default class ReactNotesPlugin extends Plugin { + private tailwindStyles: HTMLStyleElement | null = null; // Tailwind styles reference async onload() { + try { + // Read the CSS file using Obsidian's API + const css = await this.app.vault.adapter.read(`${this.manifest.dir}/outStyles.css`); + + // Inject the CSS + const style = document.createElement('style'); + style.id = 'tailwind-styles'; + style.textContent = css; + document.head.appendChild(style); + this.tailwindStyles = style; + } catch (error) { + console.error("Failed to load CSS file:", error); + } // Listen for theme changes this.registerEvent( - this.app.workspace.on('css-change', this.updateTheme) + this.app.workspace.on('css-change', () => { + this.updateTheme(); + }) ); // Register markdown processor this.registerMarkdownCodeBlockProcessor( @@ -326,14 +404,23 @@ export default class ReactNotesPlugin extends Plugin { // Initial theme setup this.updateTheme(); } + + onunload() { + // Clean up styles + if (this.tailwindStyles) { + this.tailwindStyles.remove(); + } + } private updateTheme = () => { // Update theme class on all react component containers document.querySelectorAll('.react-component-container').forEach(el => { if (document.body.hasClass('theme-dark')) { el.classList.add('theme-dark'); + el.classList.add('dark'); el.classList.remove('theme-light'); } else { el.classList.add('theme-light'); + el.classList.remove('dark'); el.classList.remove('theme-dark'); } }); @@ -349,11 +436,25 @@ export default class ReactNotesPlugin extends Plugin { // Render Markdown for the inner content of each block await MarkdownRenderer.renderMarkdown( - block.innerHTML, // Raw HTML content + block.textContent || "", // // Get text content block, // Target container for rendered Markdown '', // Path (optional, current file path if needed) this // Plugin context ); + /* + // Alternative if more control is needed: +// Create a temporary div to safely extract text +const tempDiv = document.createElement('div'); +tempDiv.appendChild(block.cloneNode(true)); +const safeContent = tempDiv.textContent || ""; + +await MarkdownRenderer.renderMarkdown( + safeContent, + block, + '', + this +); +*/ // After rendering, mark the block to avoid double processing block.classList.add('markdown-rendered'); diff --git a/outStyles.css b/outStyles.css new file mode 100644 index 0000000..5b6a4d3 --- /dev/null +++ b/outStyles.css @@ -0,0 +1,1618 @@ +/*! tailwindcss v4.1.4 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --color-red-50: oklch(97.1% 0.013 17.38); + --color-red-100: oklch(93.6% 0.032 17.717); + --color-red-200: oklch(88.5% 0.062 18.334); + --color-red-300: oklch(80.8% 0.114 19.571); + --color-red-400: oklch(70.4% 0.191 22.216); + --color-red-500: oklch(63.7% 0.237 25.331); + --color-red-600: oklch(57.7% 0.245 27.325); + --color-red-700: oklch(50.5% 0.213 27.518); + --color-red-800: oklch(44.4% 0.177 26.899); + --color-red-900: oklch(39.6% 0.141 25.723); + --color-red-950: oklch(25.8% 0.092 26.042); + --color-green-500: oklch(72.3% 0.219 149.579); + --color-blue-50: oklch(97% 0.014 254.604); + --color-blue-200: oklch(88.2% 0.059 254.128); + --color-blue-400: oklch(70.7% 0.165 254.624); + --color-blue-500: oklch(62.3% 0.214 259.815); + --color-blue-600: oklch(54.6% 0.245 262.881); + --color-blue-700: oklch(48.8% 0.243 264.376); + --color-blue-900: oklch(37.9% 0.146 265.522); + --color-slate-50: oklch(98.4% 0.003 247.858); + --color-slate-100: oklch(96.8% 0.007 247.896); + --color-slate-200: oklch(92.9% 0.013 255.508); + --color-slate-300: oklch(86.9% 0.022 252.894); + --color-slate-400: oklch(70.4% 0.04 256.788); + --color-slate-500: oklch(55.4% 0.046 257.417); + --color-slate-600: oklch(44.6% 0.043 257.281); + --color-slate-700: oklch(37.2% 0.044 257.287); + --color-slate-800: oklch(27.9% 0.041 260.031); + --color-slate-900: oklch(20.8% 0.042 265.755); + --color-slate-950: oklch(12.9% 0.042 264.695); + --color-white: #fff; + --spacing: 0.25rem; + --container-xl: 36rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --tracking-tight: -0.025em; + --leading-relaxed: 1.625; + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --ease-out: cubic-bezier(0, 0, 0.2, 1); + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --animate-spin: spin 1s linear infinite; + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; + --blur-sm: 8px; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::-moz-placeholder { + opacity: 1; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::-moz-placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + -webkit-appearance: button; + -moz-appearance: button; + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} +@layer utilities { + .pointer-events-auto { + pointer-events: auto; + } + .pointer-events-none { + pointer-events: none; + } + .absolute { + position: absolute; + } + .relative { + position: relative; + } + .static { + position: static; + } + .inset-0 { + inset: calc(var(--spacing) * 0); + } + .inset-y-0 { + inset-block: calc(var(--spacing) * 0); + } + .right-0 { + right: calc(var(--spacing) * 0); + } + .left-0 { + left: calc(var(--spacing) * 0); + } + .-z-10 { + z-index: calc(10 * -1); + } + .-z-20 { + z-index: calc(20 * -1); + } + .z-0 { + z-index: 0; + } + .z-10 { + z-index: 10; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .mx-auto { + margin-inline: auto; + } + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + .mt-6 { + margin-top: calc(var(--spacing) * 6); + } + .mr-2 { + margin-right: calc(var(--spacing) * 2); + } + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .ml-auto { + margin-left: auto; + } + .block { + display: block; + } + .contents { + display: contents; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .inline-flex { + display: inline-flex; + } + .h-2 { + height: calc(var(--spacing) * 2); + } + .h-4 { + height: calc(var(--spacing) * 4); + } + .h-5 { + height: calc(var(--spacing) * 5); + } + .h-6 { + height: calc(var(--spacing) * 6); + } + .h-10 { + height: calc(var(--spacing) * 10); + } + .h-12 { + height: calc(var(--spacing) * 12); + } + .h-14 { + height: calc(var(--spacing) * 14); + } + .h-64 { + height: calc(var(--spacing) * 64); + } + .h-auto { + height: auto; + } + .h-full { + height: 100%; + } + .w-4 { + width: calc(var(--spacing) * 4); + } + .w-6 { + width: calc(var(--spacing) * 6); + } + .w-9 { + width: calc(var(--spacing) * 9); + } + .w-10 { + width: calc(var(--spacing) * 10); + } + .w-12 { + width: calc(var(--spacing) * 12); + } + .w-14 { + width: calc(var(--spacing) * 14); + } + .w-full { + width: 100%; + } + .max-w-xl { + max-width: var(--container-xl); + } + .flex-shrink-0 { + flex-shrink: 0; + } + .shrink { + flex-shrink: 1; + } + .shrink-0 { + flex-shrink: 0; + } + .-translate-x-6 { + --tw-translate-x: calc(var(--spacing) * -6); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .translate-x-6 { + --tw-translate-x: calc(var(--spacing) * 6); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .animate-pulse { + animation: var(--animate-pulse); + } + .animate-spin { + animation: var(--animate-spin); + } + .cursor-pointer { + cursor: pointer; + } + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .flex-col { + flex-direction: column; + } + .items-center { + align-items: center; + } + .justify-between { + justify-content: space-between; + } + .justify-center { + justify-content: center; + } + .gap-1 { + gap: calc(var(--spacing) * 1); + } + .gap-2 { + gap: calc(var(--spacing) * 2); + } + .gap-3 { + gap: calc(var(--spacing) * 3); + } + .gap-4 { + gap: calc(var(--spacing) * 4); + } + .space-y-1\.5 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-4 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-6 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); + } + } + .overflow-auto { + overflow: auto; + } + .overflow-hidden { + overflow: hidden; + } + .rounded { + border-radius: 0.25rem; + } + .rounded-full { + border-radius: calc(infinity * 1px); + } + .rounded-lg { + border-radius: var(--radius-lg); + } + .rounded-md { + border-radius: var(--radius-md); + } + .rounded-sm { + border-radius: var(--radius-sm); + } + .rounded-xl { + border-radius: var(--radius-xl); + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + .border-4 { + border-style: var(--tw-border-style); + border-width: 4px; + } + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + .border-blue-200 { + border-color: var(--color-blue-200); + } + .border-blue-500 { + border-color: var(--color-blue-500); + } + .border-red-200 { + border-color: var(--color-red-200); + } + .border-red-500 { + border-color: var(--color-red-500); + } + .border-slate-100 { + border-color: var(--color-slate-100); + } + .border-slate-200 { + border-color: var(--color-slate-200); + } + .border-slate-300 { + border-color: var(--color-slate-300); + } + .border-transparent { + border-color: transparent; + } + .border-t-red-500 { + border-top-color: var(--color-red-500); + } + .bg-blue-500 { + background-color: var(--color-blue-500); + } + .bg-red-50 { + background-color: var(--color-red-50); + } + .bg-red-100 { + background-color: var(--color-red-100); + } + .bg-red-100\/50 { + background-color: color-mix(in srgb, oklch(93.6% 0.032 17.717) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-100) 50%, transparent); + } + } + .bg-red-600 { + background-color: var(--color-red-600); + } + .bg-slate-50 { + background-color: var(--color-slate-50); + } + .bg-slate-100 { + background-color: var(--color-slate-100); + } + .bg-slate-200 { + background-color: var(--color-slate-200); + } + .bg-white { + background-color: var(--color-white); + } + .bg-white\/80 { + background-color: color-mix(in srgb, #fff 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 80%, transparent); + } + } + .bg-gradient-to-br { + --tw-gradient-position: to bottom right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .bg-gradient-to-r { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .from-blue-50 { + --tw-gradient-from: var(--color-blue-50); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .from-red-100 { + --tw-gradient-from: var(--color-red-100); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .from-red-600 { + --tw-gradient-from: var(--color-red-600); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .from-slate-50 { + --tw-gradient-from: var(--color-slate-50); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-red-200 { + --tw-gradient-to: var(--color-red-200); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-red-500 { + --tw-gradient-to: var(--color-red-500); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-red-700 { + --tw-gradient-to: var(--color-red-700); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-slate-100 { + --tw-gradient-to: var(--color-slate-100); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-white { + --tw-gradient-to: var(--color-white); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .object-cover { + -o-object-fit: cover; + object-fit: cover; + } + .p-1 { + padding: calc(var(--spacing) * 1); + } + .p-2 { + padding: calc(var(--spacing) * 2); + } + .p-4 { + padding: calc(var(--spacing) * 4); + } + .p-5 { + padding: calc(var(--spacing) * 5); + } + .p-6 { + padding: calc(var(--spacing) * 6); + } + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + .px-6 { + padding-inline: calc(var(--spacing) * 6); + } + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .pt-0 { + padding-top: calc(var(--spacing) * 0); + } + .pt-6 { + padding-top: calc(var(--spacing) * 6); + } + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); + } + .pb-6 { + padding-bottom: calc(var(--spacing) * 6); + } + .text-center { + text-align: center; + } + .text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + .text-5xl { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + .text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + .text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .leading-none { + --tw-leading: 1; + line-height: 1; + } + .leading-relaxed { + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + .tracking-tight { + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + .break-all { + word-break: break-all; + } + .whitespace-nowrap { + white-space: nowrap; + } + .whitespace-pre-wrap { + white-space: pre-wrap; + } + .text-blue-500 { + color: var(--color-blue-500); + } + .text-blue-600 { + color: var(--color-blue-600); + } + .text-green-500 { + color: var(--color-green-500); + } + .text-red-500 { + color: var(--color-red-500); + } + .text-red-600 { + color: var(--color-red-600); + } + .text-red-700 { + color: var(--color-red-700); + } + .text-red-700\/80 { + color: color-mix(in srgb, oklch(50.5% 0.213 27.518) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, var(--color-red-700) 80%, transparent); + } + } + .text-red-800 { + color: var(--color-red-800); + } + .text-slate-500 { + color: var(--color-slate-500); + } + .text-slate-600 { + color: var(--color-slate-600); + } + .text-slate-700 { + color: var(--color-slate-700); + } + .text-slate-800 { + color: var(--color-slate-800); + } + .text-slate-900 { + color: var(--color-slate-900); + } + .text-white { + color: var(--color-white); + } + .opacity-0 { + opacity: 0%; + } + .opacity-30 { + opacity: 30%; + } + .opacity-50 { + opacity: 50%; + } + .opacity-100 { + opacity: 100%; + } + .shadow { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-inner { + --tw-shadow: inset 0 2px 4px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-lg { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-md { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-sm { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-xl { + --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .ring-0 { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .backdrop-blur-sm { + --tw-backdrop-blur: blur(var(--blur-sm)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-opacity { + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-200 { + --tw-duration: 200ms; + transition-duration: 200ms; + } + .duration-300 { + --tw-duration: 300ms; + transition-duration: 300ms; + } + .duration-500 { + --tw-duration: 500ms; + transition-duration: 500ms; + } + .ease-in-out { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + .ease-out { + --tw-ease: var(--ease-out); + transition-timing-function: var(--ease-out); + } + .group-hover\:translate-x-1 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-translate-x: calc(var(--spacing) * 1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .group-hover\:scale-105 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-scale-x: 105%; + --tw-scale-y: 105%; + --tw-scale-z: 105%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + } + .last\:mb-0 { + &:last-child { + margin-bottom: calc(var(--spacing) * 0); + } + } + .hover\:translate-x-0 { + &:hover { + @media (hover: hover) { + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .hover\:border-blue-400 { + &:hover { + @media (hover: hover) { + border-color: var(--color-blue-400); + } + } + } + .hover\:bg-red-200 { + &:hover { + @media (hover: hover) { + background-color: var(--color-red-200); + } + } + } + .hover\:text-blue-600 { + &:hover { + @media (hover: hover) { + color: var(--color-blue-600); + } + } + } + .hover\:underline { + &:hover { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } + .hover\:shadow-lg { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .hover\:shadow-md { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .focus\:ring-2 { + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:ring-blue-500 { + &:focus { + --tw-ring-color: var(--color-blue-500); + } + } + .focus\:outline-none { + &:focus { + --tw-outline-style: none; + outline-style: none; + } + } + .focus-visible\:ring-2 { + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus-visible\:ring-offset-2 { + &:focus-visible { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + } + .focus-visible\:outline-none { + &:focus-visible { + --tw-outline-style: none; + outline-style: none; + } + } + .disabled\:pointer-events-none { + &:disabled { + pointer-events: none; + } + } + .disabled\:cursor-not-allowed { + &:disabled { + cursor: not-allowed; + } + } + .disabled\:opacity-30 { + &:disabled { + opacity: 30%; + } + } + .disabled\:opacity-50 { + &:disabled { + opacity: 50%; + } + } + .data-\[state\=active\]\:shadow-sm { + &[data-state="active"] { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .data-\[state\=checked\]\:translate-x-4 { + &[data-state="checked"] { + --tw-translate-x: calc(var(--spacing) * 4); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .data-\[state\=unchecked\]\:translate-x-0 { + &[data-state="unchecked"] { + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .sm\:grid-cols-2 { + @media (width >= 40rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .dark\:border-blue-400 { + &:where(.dark, .dark *) { + border-color: var(--color-blue-400); + } + } + .dark\:border-blue-700 { + &:where(.dark, .dark *) { + border-color: var(--color-blue-700); + } + } + .dark\:border-red-700 { + &:where(.dark, .dark *) { + border-color: var(--color-red-700); + } + } + .dark\:border-slate-600 { + &:where(.dark, .dark *) { + border-color: var(--color-slate-600); + } + } + .dark\:border-slate-700 { + &:where(.dark, .dark *) { + border-color: var(--color-slate-700); + } + } + .dark\:border-slate-800 { + &:where(.dark, .dark *) { + border-color: var(--color-slate-800); + } + } + .dark\:border-t-red-400 { + &:where(.dark, .dark *) { + border-top-color: var(--color-red-400); + } + } + .dark\:bg-blue-600 { + &:where(.dark, .dark *) { + background-color: var(--color-blue-600); + } + } + .dark\:bg-red-700 { + &:where(.dark, .dark *) { + background-color: var(--color-red-700); + } + } + .dark\:bg-red-800\/30 { + &:where(.dark, .dark *) { + background-color: color-mix(in srgb, oklch(44.4% 0.177 26.899) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-800) 30%, transparent); + } + } + } + .dark\:bg-red-900\/10 { + &:where(.dark, .dark *) { + background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-900) 10%, transparent); + } + } + } + .dark\:bg-red-950\/50 { + &:where(.dark, .dark *) { + background-color: color-mix(in srgb, oklch(25.8% 0.092 26.042) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-950) 50%, transparent); + } + } + } + .dark\:bg-slate-700 { + &:where(.dark, .dark *) { + background-color: var(--color-slate-700); + } + } + .dark\:bg-slate-800 { + &:where(.dark, .dark *) { + background-color: var(--color-slate-800); + } + } + .dark\:bg-slate-800\/30 { + &:where(.dark, .dark *) { + background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-slate-800) 30%, transparent); + } + } + } + .dark\:bg-slate-800\/50 { + &:where(.dark, .dark *) { + background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-slate-800) 50%, transparent); + } + } + } + .dark\:bg-slate-900 { + &:where(.dark, .dark *) { + background-color: var(--color-slate-900); + } + } + .dark\:bg-slate-900\/80 { + &:where(.dark, .dark *) { + background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-slate-900) 80%, transparent); + } + } + } + .dark\:from-blue-900\/20 { + &:where(.dark, .dark *) { + --tw-gradient-from: color-mix(in srgb, oklch(37.9% 0.146 265.522) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-gradient-from: color-mix(in oklab, var(--color-blue-900) 20%, transparent); + } + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:from-red-900\/30 { + &:where(.dark, .dark *) { + --tw-gradient-from: color-mix(in srgb, oklch(39.6% 0.141 25.723) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-gradient-from: color-mix(in oklab, var(--color-red-900) 30%, transparent); + } + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:from-slate-950 { + &:where(.dark, .dark *) { + --tw-gradient-from: var(--color-slate-950); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:to-blue-900\/30 { + &:where(.dark, .dark *) { + --tw-gradient-to: color-mix(in srgb, oklch(37.9% 0.146 265.522) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-gradient-to: color-mix(in oklab, var(--color-blue-900) 30%, transparent); + } + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:to-red-900\/40 { + &:where(.dark, .dark *) { + --tw-gradient-to: color-mix(in srgb, oklch(39.6% 0.141 25.723) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-gradient-to: color-mix(in oklab, var(--color-red-900) 40%, transparent); + } + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:to-slate-900 { + &:where(.dark, .dark *) { + --tw-gradient-to: var(--color-slate-900); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + } + .dark\:text-blue-400 { + &:where(.dark, .dark *) { + color: var(--color-blue-400); + } + } + .dark\:text-red-200 { + &:where(.dark, .dark *) { + color: var(--color-red-200); + } + } + .dark\:text-red-300 { + &:where(.dark, .dark *) { + color: var(--color-red-300); + } + } + .dark\:text-red-300\/80 { + &:where(.dark, .dark *) { + color: color-mix(in srgb, oklch(80.8% 0.114 19.571) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, var(--color-red-300) 80%, transparent); + } + } + } + .dark\:text-red-400 { + &:where(.dark, .dark *) { + color: var(--color-red-400); + } + } + .dark\:text-slate-100 { + &:where(.dark, .dark *) { + color: var(--color-slate-100); + } + } + .dark\:text-slate-200 { + &:where(.dark, .dark *) { + color: var(--color-slate-200); + } + } + .dark\:text-slate-300 { + &:where(.dark, .dark *) { + color: var(--color-slate-300); + } + } + .dark\:text-slate-400 { + &:where(.dark, .dark *) { + color: var(--color-slate-400); + } + } + .dark\:hover\:border-blue-500 { + &:where(.dark, .dark *) { + &:hover { + @media (hover: hover) { + border-color: var(--color-blue-500); + } + } + } + } + .dark\:hover\:bg-red-800\/50 { + &:where(.dark, .dark *) { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(44.4% 0.177 26.899) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-800) 50%, transparent); + } + } + } + } + } + .dark\:hover\:text-blue-400 { + &:where(.dark, .dark *) { + &:hover { + @media (hover: hover) { + color: var(--color-blue-400); + } + } + } + } +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; +} +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-gradient-position { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-stops { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-leading { + syntax: "*"; + inherits: false; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false; +} +@property --tw-tracking { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@property --tw-ease { + syntax: "*"; + inherits: false; +} +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@keyframes spin { + to { + transform: rotate(360deg); + } +} +@keyframes pulse { + 50% { + opacity: 0.5; + } +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-y-reverse: 0; + --tw-border-style: solid; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-tracking: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-duration: initial; + --tw-ease: initial; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + } + } +} diff --git a/styles.css b/styles.css index 8657e6a..c693160 100644 --- a/styles.css +++ b/styles.css @@ -1,19 +1,6 @@ /* styles.css */ -/* Spacing utilities */ -.mt-1 { margin-top: 0.25rem; } -.mt-2 { margin-top: 0.5rem; } -.mt-4 { margin-top: 1rem; } -.mb-2 { margin-bottom: 0.5rem; } -.p-2 { padding: 0.5rem; } -.p-4 { padding: 1rem; } -/* Layout utilities */ -.flex { display: flex; } -.grid { display: grid; } -.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } -.gap-2 { gap: 0.5rem; } -.gap-4 { gap: 1rem; } .w-full { width: 100%; } .space-y-2 > * + * { margin-top: 0.5rem; } @@ -28,7 +15,6 @@ .text-sm { font-size: 0.875rem; } .text-lg { font-size: 1.125rem; } - /* Border utilities */ .rounded { border-radius: 4px; } .border { border: 1px solid var(--background-modifier-border); } @@ -92,6 +78,7 @@ } + /* List styles */ .list-content { margin: 0; @@ -120,7 +107,13 @@ word-break: break-word; } - +.react-component-container svg { + display: inline-block !important; + vertical-align: middle !important; + height: 16px !important; + width: 16px !important; + margin-right: 4px !important; + } /* Dark mode adjustments are handled by Tailwind classes */ /* @@ -234,18 +227,41 @@ If your plugin does not need CSS, delete this file. .space-y-4 > * + * { margin-top: 1rem; } .space-y-2 > * + * { margin-top: 0.5rem; } -/* Container styles - ensures proper rendering in Obsidian */ -.react-component-container { - width: 100%; - margin: 1rem 0; - font-family: var(--font-interface); - color: var(--text-normal); -} + .theme-dark .react-component-container { color-scheme: dark; } + + +/* Ensure buttons display properly */ +.react-component-container button { + cursor: pointer; + font-family: inherit; + box-shadow: none; +} + +/* Color variables for icons */ +.react-component-container .icon-like { + color: var(--text-error) ; +} + +.react-component-container .icon-comment { + color: var(--text-accent) ; +} + +/* Stats styling for post metrics */ +.react-component-container .stats-item { + display: flex; + align-items: center; + margin-right: 12px; +} + +.react-component-container * { + box-sizing: border-box; + } + /* Card styles */ .card { background-color: var(--background-primary); @@ -332,4 +348,406 @@ If your plugin does not need CSS, delete this file. /* Ensure proper spacing */ .nested-block + .nested-block { margin-top: 2rem; -} \ No newline at end of file +} + +/* Add these styles to the existing styles.css file */ + +/* ===== Component UI Framework ===== */ +/* These styles directly map Tailwind-like classes to CSS properties */ + +/* Layout */ +.w-full { width: 100% !important; } +.max-w-3xl { max-width: 48rem !important; } +.mx-auto { margin-left: auto !important; margin-right: auto !important; } +.overflow-hidden { overflow: hidden !important; } + +/* Borders */ +.border { border-width: 1px !important; border-style: solid !important; } +.border-t { border-top-width: 1px !important; border-top-style: solid !important; } +.border-b { border-bottom-width: 1px !important; border-bottom-style: solid !important; } +.border-b-2 { border-bottom-width: 2px !important; border-bottom-style: solid !important; } +.rounded-md { border-radius: 0.375rem !important; } +.rounded-lg { border-radius: 0.5rem !important; } + +/* Spacing */ +.p-2 { padding: 0.5rem !important; } +.p-4 { padding: 1rem !important; } +.p-6 { padding: 1.5rem !important; } +.px-2 { padding-left: 0.5rem !important; padding-right: 0.5rem !important; } +.px-4 { padding-left: 1rem !important; padding-right: 1rem !important; } +.px-6 { padding-left: 1.5rem !important; padding-right: 1.5rem !important; } +.py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } +.py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } +.py-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } +.py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } +.m-4 { margin: 1rem !important; } +.mt-2 { margin-top: 0.5rem !important; } +.mb-2 { margin-bottom: 0.5rem !important; } +.mb-4 { margin-bottom: 1rem !important; } +.mr-4 { margin-right: 1rem !important; } +.gap-1 { gap: 0.25rem !important; } +.gap-2 { gap: 0.5rem !important; } +.gap-4 { gap: 1rem !important; } +.space-y-2 > * + * { margin-top: 0.5rem !important; } +.space-y-3 > * + * { margin-top: 0.75rem !important; } +.space-y-4 > * + * { margin-top: 1rem !important; } + +/* Typography */ +.text-sm { font-size: 0.875rem !important; } +.text-lg { font-size: 1.125rem !important; } +.text-xl { font-size: 1.25rem !important; } +.font-medium { font-weight: 500 !important; } +.font-semibold { font-weight: 600 !important; } + +/* Flex */ +.flex { display: flex !important; } +.flex-col { flex-direction: column !important; } +.items-center { align-items: center !important; } +.justify-between { justify-content: space-between !important; } + +/* Grid */ +.grid { display: grid !important; } + +/* ===== Component Styling - Light Theme ===== */ + +/* Card & Container */ +.react-component-container { + background-color: white; + color: rgb(31, 41, 55); + border-radius: 0.5rem; + border: 1px solid rgb(229, 231, 235); + width: 100%; + overflow: hidden; +} + +/* Header */ +.react-component-container [class*="header"], +.react-component-container .bg-gray-50, +.react-component-container .bg-gray-100 { + background-color: rgb(249, 250, 251); + border-color: rgb(229, 231, 235); +} + +/* Dark background areas */ +.react-component-container .bg-gray-700 { + background-color: rgb(55, 65, 81); + color: rgb(243, 244, 246); +} + +/* Tabs */ +.react-component-container .border-blue-600 { + border-color: rgb(37, 99, 235); + color: rgb(37, 99, 235); +} + +.react-component-container .text-blue-600, +.react-component-container .text-blue-500 { + color: rgb(37, 99, 235); +} + +.react-component-container .text-red-500, +.react-component-container .text-red-400 { + color: rgb(239, 68, 68); +} + +.react-component-container .text-green-600, +.react-component-container .text-green-400 { + color: rgb(22, 163, 74); +} + +.react-component-container .text-gray-500, +.react-component-container .text-gray-400 { + color: rgb(107, 114, 128); +} + +/* Button styles */ +.react-component-container button { + cursor: pointer; + transition: background-color 0.2s, color 0.2s; +} + +.react-component-container button.bg-gray-200, +.react-component-container .bg-gray-200 { + background-color: rgb(229, 231, 235); +} + +.react-component-container button.hover\:bg-gray-300:hover { + background-color: rgb(209, 213, 219); +} + +.react-component-container button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* ===== Dark Theme Overrides ===== */ +.theme-dark .react-component-container { + background-color: rgb(17, 24, 39); + color: rgb(243, 244, 246); + border-color: rgb(55, 65, 81); +} +/* +.theme-dark .react-component-container > div > div { + background-color: #0800f8 ; + border: 1px solid #3e4c5a; + border-radius: 0.5rem; + margin-bottom: 0.75rem; + padding: 1rem; + }*/ +.theme-dark .react-component-container [class*="header"]{ + background-color: rgb(31, 41, 55); + border-color: rgb(55, 65, 81); +} + +.theme-dark .react-component-container button.bg-gray-700, +.theme-dark .react-component-container .bg-gray-700 { + background-color: rgb(55, 65, 81); +} + +.theme-dark .react-component-container button.hover\:bg-gray-600:hover { + background-color: rgb(75, 85, 99); +} + +/* Tailwind Color System - Properly Scoped for Obsidian */ + +/* Base color variables in light mode */ +:root { + /* Gray scale */ + --gray-50: rgb(249, 250, 251); + --gray-100: rgb(243, 244, 246); + --gray-200: rgb(229, 231, 235); + --gray-300: rgb(209, 213, 219); + --gray-400: rgb(156, 163, 175); + --gray-500: rgb(107, 114, 128); + --gray-600: rgb(75, 85, 99); + --gray-700: rgb(55, 65, 81); + --gray-800: rgb(31, 41, 55); + --gray-900: rgb(17, 24, 39); + + /* Blue scale */ + --blue-50: rgb(239, 246, 255); + --blue-100: rgb(219, 234, 254); + --blue-200: rgb(191, 219, 254); + --blue-300: rgb(147, 197, 253); + --blue-400: rgb(96, 165, 250); + --blue-500: rgb(59, 130, 246); + --blue-600: rgb(37, 99, 235); + --blue-700: rgb(29, 78, 216); + --blue-800: rgb(30, 64, 175); + --blue-900: rgb(30, 58, 138); + + /* Red scale */ + --red-50: rgb(254, 242, 242); + --red-100: rgb(254, 226, 226); + --red-200: rgb(254, 202, 202); + --red-300: rgb(252, 165, 165); + --red-400: rgb(248, 113, 113); + --red-500: rgb(239, 68, 68); + --red-600: rgb(220, 38, 38); + --red-700: rgb(185, 28, 28); + --red-800: rgb(153, 27, 27); + --red-900: rgb(127, 29, 29); + + /* Green scale */ + --green-50: rgb(240, 253, 244); + --green-100: rgb(220, 252, 231); + --green-200: rgb(187, 247, 208); + --green-300: rgb(134, 239, 172); + --green-400: rgb(74, 222, 128); + --green-500: rgb(34, 197, 94); + --green-600: rgb(22, 163, 74); + --green-700: rgb(21, 128, 61); + --green-800: rgb(22, 101, 52); + --green-900: rgb(20, 83, 45); + } + + /* Dark mode color overrides - properly scoped */ + .theme-dark .react-component-container { + /* Invert gray scale for dark mode */ + --gray-50: rgb(17, 24, 39); + --gray-100: rgb(31, 41, 55); + --gray-200: rgb(55, 65, 81); + --gray-300: rgb(75, 85, 99); + --gray-400: rgb(107, 114, 128); + --gray-500: rgb(156, 163, 175); + --gray-600: rgb(209, 213, 219); + --gray-700: rgb(229, 231, 235); + --gray-800: rgb(243, 244, 246); + --gray-900: rgb(249, 250, 251); + + /* Adjust other colors for better visibility in dark mode */ + --blue-400: rgb(129, 182, 245); + --blue-500: rgb(96, 165, 250); + --blue-600: rgb(59, 130, 246); + + --red-400: rgb(252, 165, 165); + --red-500: rgb(248, 113, 113); + + --green-400: rgb(134, 239, 172); + --green-600: rgb(74, 222, 128); + } + + /* Background colors - keep these at root level */ + .react-component-container .bg-gray-50 { background-color: var(--gray-50); } + .react-component-container .bg-gray-100 { background-color: var(--gray-100); } + .react-component-container .bg-gray-200 { background-color: var(--gray-200); } + .react-component-container .bg-gray-300 { background-color: var(--gray-300); } + .react-component-container .bg-gray-400 { background-color: var(--gray-400); } + .react-component-container .bg-gray-500 { background-color: var(--gray-500); } + .react-component-container .bg-gray-600 { background-color: var(--gray-600); } + .react-component-container .bg-gray-700 { background-color: var(--gray-700); } + .react-component-container .bg-gray-800 { background-color: var(--gray-800); } + .react-component-container .bg-gray-900 { background-color: var(--gray-900); } + + .react-component-container .bg-blue-50 { background-color: var(--blue-50); } + .react-component-container .bg-blue-100 { background-color: var(--blue-100); } + .react-component-container .bg-blue-200 { background-color: var(--blue-200); } + .react-component-container .bg-blue-300 { background-color: var(--blue-300); } + .react-component-container .bg-blue-400 { background-color: var(--blue-400); } + .react-component-container .bg-blue-500 { background-color: var(--blue-500); } + .react-component-container .bg-blue-600 { background-color: var(--blue-600); } + .react-component-container .bg-blue-700 { background-color: var(--blue-700); } + .react-component-container .bg-blue-800 { background-color: var(--blue-800); } + .react-component-container .bg-blue-900 { background-color: var(--blue-900); } + + .react-component-container .bg-red-50 { background-color: var(--red-50); } + .react-component-container .bg-red-100 { background-color: var(--red-100); } + .react-component-container .bg-red-200 { background-color: var(--red-200); } + .react-component-container .bg-red-300 { background-color: var(--red-300); } + .react-component-container .bg-red-400 { background-color: var(--red-400); } + .react-component-container .bg-red-500 { background-color: var(--red-500); } + .react-component-container .bg-red-600 { background-color: var(--red-600); } + .react-component-container .bg-red-700 { background-color: var(--red-700); } + .react-component-container .bg-red-800 { background-color: var(--red-800); } + .react-component-container .bg-red-900 { background-color: var(--red-900); } + + .react-component-container .bg-green-50 { background-color: var(--green-50); } + .react-component-container .bg-green-100 { background-color: var(--green-100); } + .react-component-container .bg-green-200 { background-color: var(--green-200); } + .react-component-container .bg-green-300 { background-color: var(--green-300); } + .react-component-container .bg-green-400 { background-color: var(--green-400); } + .react-component-container .bg-green-500 { background-color: var(--green-500); } + .react-component-container .bg-green-600 { background-color: var(--green-600); } + .react-component-container .bg-green-700 { background-color: var(--green-700); } + .react-component-container .bg-green-800 { background-color: var(--green-800); } + .react-component-container .bg-green-900 { background-color: var(--green-900); } + + /* Text colors - all scoped to react-component-container */ + .react-component-container .text-gray-50 { color: var(--gray-50); } + .react-component-container .text-gray-100 { color: var(--gray-100); } + .react-component-container .text-gray-200 { color: var(--gray-200); } + .react-component-container .text-gray-300 { color: var(--gray-300); } + .react-component-container .text-gray-400 { color: var(--gray-400); } + .react-component-container .text-gray-500 { color: var(--gray-500); } + .react-component-container .text-gray-600 { color: var(--gray-600); } + .react-component-container .text-gray-700 { color: var(--gray-700); } + .react-component-container .text-gray-800 { color: var(--gray-800); } + .react-component-container .text-gray-900 { color: var(--gray-900); } + + .react-component-container .text-blue-50 { color: var(--blue-50); } + .react-component-container .text-blue-100 { color: var(--blue-100); } + .react-component-container .text-blue-200 { color: var(--blue-200); } + .react-component-container .text-blue-300 { color: var(--blue-300); } + .react-component-container .text-blue-400 { color: var(--blue-400); } + .react-component-container .text-blue-500 { color: var(--blue-500); } + .react-component-container .text-blue-600 { color: var(--blue-600); } + .react-component-container .text-blue-700 { color: var(--blue-700); } + .react-component-container .text-blue-800 { color: var(--blue-800); } + .react-component-container .text-blue-900 { color: var(--blue-900); } + + .react-component-container .text-red-50 { color: var(--red-50); } + .react-component-container .text-red-100 { color: var(--red-100); } + .react-component-container .text-red-200 { color: var(--red-200); } + .react-component-container .text-red-300 { color: var(--red-300); } + .react-component-container .text-red-400 { color: var(--red-400); } + .react-component-container .text-red-500 { color: var(--red-500); } + .react-component-container .text-red-600 { color: var(--red-600); } + .react-component-container .text-red-700 { color: var(--red-700); } + .react-component-container .text-red-800 { color: var(--red-800); } + .react-component-container .text-red-900 { color: var(--red-900); } + + .react-component-container .text-green-50 { color: var(--green-50); } + .react-component-container .text-green-100 { color: var(--green-100); } + .react-component-container .text-green-200 { color: var(--green-200); } + .react-component-container .text-green-300 { color: var(--green-300); } + .react-component-container .text-green-400 { color: var(--green-400); } + .react-component-container .text-green-500 { color: var(--green-500); } + .react-component-container .text-green-600 { color: var(--green-600); } + .react-component-container .text-green-700 { color: var(--green-700); } + .react-component-container .text-green-800 { color: var(--green-800); } + .react-component-container .text-green-900 { color: var(--green-900); } + + /* Border colors */ + .react-component-container .border-gray-50 { border-color: var(--gray-50); } + .react-component-container .border-gray-100 { border-color: var(--gray-100); } + .react-component-container .border-gray-200 { border-color: var(--gray-200); } + .react-component-container .border-gray-300 { border-color: var(--gray-300); } + .react-component-container .border-gray-400 { border-color: var(--gray-400); } + .react-component-container .border-gray-500 { border-color: var(--gray-500); } + .react-component-container .border-gray-600 { border-color: var(--gray-600); } + .react-component-container .border-gray-700 { border-color: var(--gray-700); } + .react-component-container .border-gray-800 { border-color: var(--gray-800); } + .react-component-container .border-gray-900 { border-color: var(--gray-900); } + + .react-component-container .border-blue-400 { border-color: var(--blue-400); } + .react-component-container .border-blue-500 { border-color: var(--blue-500); } + .react-component-container .border-blue-600 { border-color: var(--blue-600); } + + .react-component-container .border-red-400 { border-color: var(--red-400); } + .react-component-container .border-red-500 { border-color: var(--red-500); } + + .react-component-container .border-green-400 { border-color: var(--green-400); } + .react-component-container .border-green-600 { border-color: var(--green-600); } + + + /* General tab button reset*/ + .react-component-container [role="tab"], + .react-component-container [class*="tab-trigger"], + .react-component-container div[class*="flex"][class*="border-b"] > button { + /* Reset background to transparent by default */ + background-color: transparent !important; + transition: background-color 0.2s, color 0.2s, border-color 0.2s !important; + } + + /* Target all elements that might have background color issues */ + .react-component-container pre, + .react-component-container code, + .react-component-container [class*="code-"], + .react-component-container [class*="cm-"] { + /* Force inheritance and override Obsidian's Code Styler */ + all: inherit; + display: block; + white-space: inherit; + background-color: inherit !important; + color: inherit !important; + padding: inherit !important; + margin: inherit !important; + border: inherit !important; + border-radius: inherit !important; + box-shadow: none !important; + font-family: inherit !important; + } + + /* Restore code-specific properties after inheritance */ + .react-component-container pre, + .react-component-container code { + font-family: monospace; + white-space: pre; + } + .react-component-container .code-styler-pre, + .react-component-container .code-styler-pre * { + background-color: inherit !important; + color: inherit !important; + } + +/* Navigation buttons */ +.react-component-container .w-14 {width: 3.5rem !important;} +.react-component-container .h-14 {height: 3.5rem !important;} +.react-component-container .rounded-full {border-radius: 9999px !important;} +.react-component-container .border {border-width: 1px !important; border-style: solid !important;} +.react-component-container .shadow-xl {box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1) !important;} +.react-component-container .backdrop-blur-sm {backdrop-filter: blur(4px) !important;} +.react-component-container .disabled\:opacity-30:disabled {opacity: 0.3 !important;} +.react-component-container .disabled\:cursor-not-allowed:disabled {cursor: not-allowed !important;} + +/* Add more component-specific styles as needed */ \ No newline at end of file