@import "tailwindcss"; @import "tw-animate-css"; @custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); } :root { --radius: 0.125rem; /* ---------- Base background (warm light) ---------- */ --background: oklch(0.97 0.01 95); --foreground: oklch(0.22 0.02 30); /* ---------- Surfaces ---------- */ --card: oklch(0.99 0.005 95); --card-foreground: oklch(0.22 0.02 30); --popover: oklch(1 0.004 95); --popover-foreground: oklch(0.22 0.02 30); /* ---------- Ubuntu orange primary ---------- */ --primary: oklch(0.62 0.2 45); --primary-foreground: oklch(0.99 0.005 95); /* ---------- Secondary / muted warm grays ---------- */ --secondary: oklch(0.92 0.01 90); --secondary-foreground: oklch(0.3 0.02 35); --muted: oklch(0.94 0.008 90); --muted-foreground: oklch(0.45 0.015 35); --accent: oklch(0.9 0.015 85); --accent-foreground: oklch(0.3 0.02 35); /* ---------- Destructive ---------- */ --destructive: oklch(0.58 0.23 25); /* ---------- Borders / inputs ---------- */ --border: oklch(0.85 0.01 90); --input: oklch(0.88 0.01 90); --ring: oklch(0.62 0.2 45 / 0.5); /* ---------- Charts ---------- */ --chart-1: oklch(0.62 0.2 45); /* orange */ --chart-2: oklch(0.55 0.16 150); /* green */ --chart-3: oklch(0.7 0.17 85); /* yellow */ --chart-4: oklch(0.6 0.18 300); /* purple */ --chart-5: oklch(0.6 0.2 20); /* red */ /* ---------- Sidebar ---------- */ --sidebar: oklch(0.95 0.01 90); --sidebar-foreground: oklch(0.28 0.02 30); --sidebar-primary: oklch(0.62 0.2 45); --sidebar-primary-foreground: oklch(0.99 0.005 95); --sidebar-accent: oklch(0.9 0.015 85); --sidebar-accent-foreground: oklch(0.3 0.02 35); --sidebar-border: oklch(0.85 0.01 90); --sidebar-ring: oklch(0.62 0.2 45 / 0.5); } .dark { /* ---------- Base background (warm charcoal) ---------- */ --background: oklch(0.11 0.015 30); --foreground: oklch(0.97 0.01 95); /* ---------- Surfaces ---------- */ --card: oklch(0.16 0.018 32); --card-foreground: oklch(0.97 0.01 95); --popover: oklch(0.18 0.02 32); --popover-foreground: oklch(0.97 0.01 95); /* ---------- Ubuntu orange primary ---------- */ --primary: oklch(0.68 0.19 45); --primary-foreground: oklch(0.98 0.01 95); /* ---------- Secondary / muted warm grays ---------- */ --secondary: oklch(0.22 0.02 30); --secondary-foreground: oklch(0.92 0.015 95); --muted: oklch(0.22 0.02 30); --muted-foreground: oklch(0.68 0.02 90); --accent: oklch(0.26 0.025 35); --accent-foreground: oklch(0.95 0.01 95); /* ---------- Destructive (Ubuntu red tone) ---------- */ --destructive: oklch(0.62 0.22 25); /* ---------- Borders / inputs ---------- */ --border: oklch(0.3 0.015 35 / 0.6); --input: oklch(0.3 0.015 35 / 0.8); --ring: oklch(0.68 0.19 45 / 0.6); /* ---------- Charts ---------- */ --chart-1: oklch(0.68 0.19 45); /* orange */ --chart-2: oklch(0.7 0.15 150); /* green */ --chart-3: oklch(0.78 0.16 85); /* yellow */ --chart-4: oklch(0.66 0.18 300); /* purple */ --chart-5: oklch(0.7 0.18 20); /* red */ /* ---------- Sidebar (slightly darker & warmer) ---------- */ --sidebar: oklch(0.14 0.018 30); --sidebar-foreground: oklch(0.95 0.01 95); --sidebar-primary: oklch(0.68 0.19 45); --sidebar-primary-foreground: oklch(0.98 0.01 95); --sidebar-accent: oklch(0.24 0.02 32); --sidebar-accent-foreground: oklch(0.95 0.01 95); --sidebar-border: oklch(0.3 0.015 35 / 0.5); --sidebar-ring: oklch(0.68 0.19 45 / 0.6); } /* === CUSTOM COLOR THEME === */ @theme { /* Extended Gray Scale */ --color-gray-900: #050505; --color-gray-800: #141414; --color-gray-700: #212328; --color-gray-600: #30333a; --color-gray-500: #9095a1; --color-gray-400: #ccdadc; --color-gray-100: #fafafa; /* Vibrant Colors */ --color-blue-600: #5862ff; --color-yellow-400: #fdd458; --color-yellow-500: #e8ba40; --color-teal-400: #0fedbe; --color-red-500: #ff495b; --color-orange-500: #ff8243; --color-purple-500: #d13bff; } @layer base { * { @apply border-border outline-ring/50; } body { @apply text-foreground bg-gray-900; } } @layer utilities { .dashboard { @apply min-h-screen bg-gray-100 dark:bg-gray-900; } .container { @apply mx-auto max-w-screen-2xl px-4 md:px-6 lg:px-8; } .yellow-btn { @apply h-12 cursor-pointer rounded-lg bg-gradient-to-b from-yellow-400 to-yellow-500 text-base font-medium text-gray-950 shadow-lg hover:from-yellow-500 hover:to-yellow-400 disabled:opacity-50; } .home-wrapper { @apply flex-col items-center gap-4 text-gray-400 sm:items-start md:gap-10; } .home-section { @apply w-full grid-cols-1 gap-8 md:grid-cols-2 xl:grid-cols-3; } .header { @apply z-50 bg-white dark:bg-gray-800; } .side-bar { @apply z-50 bg-white dark:bg-gray-800; } .header-wrapper { @apply flex items-center justify-between px-6 py-4 text-gray-500; } .auth-layout { @apply relative flex h-screen flex-col justify-between overflow-hidden bg-gray-900 lg:flex-row; } .auth-logo { @apply mb-8 pt-6 lg:mb-12 lg:pt-8; } .auth-left-section { @apply flex w-full flex-col overflow-y-auto px-6 lg:h-screen lg:w-[45%] lg:px-16; } .auth-right-section { @apply flex w-full flex-col justify-start bg-gray-800 px-6 py-4 max-lg:border-t max-lg:border-gray-600 md:p-6 lg:h-screen lg:w-[55%] lg:px-18 lg:py-12; } .auth-blockquote { @apply mb-1 text-sm font-medium text-gray-400 md:mb-6 md:text-xl lg:mb-8 lg:text-2xl; } .auth-testimonial-author { @apply text-xs font-bold text-gray-400 not-italic md:text-lg; } .auth-dashboard-preview { @apply left-0 hidden h-auto w-[1024px] max-w-none rounded-xl border-6 border-gray-800 shadow-2xl lg:block; } .form-title { @apply mb-10 text-4xl font-bold text-gray-400; } .form-label { @apply text-sm font-medium text-gray-400; } .form-input { @apply rounded-lg !border-yellow-500 border-gray-600 bg-gray-800 px-3 py-3 text-base text-white placeholder:text-gray-500 focus:h-12 focus:ring-0; } .select-trigger { @apply w-full rounded-lg !border-yellow-500 border-gray-600 bg-gray-800 px-3 py-3 text-base text-white focus:!h-12 focus:ring-0; } .country-select-trigger { @apply w-full justify-between rounded-lg !border-yellow-500 border-gray-600 bg-gray-800 px-3 py-3 text-base font-normal text-gray-400 focus:h-12 focus:ring-0; } .country-select-input { @apply rounded-none border-0 border-b border-gray-600 !bg-gray-800 text-gray-400 placeholder:text-gray-500 focus:ring-0; } .country-select-empty { @apply !bg-gray-800 py-6 text-center text-gray-500; } .country-select-item { @apply rounded-sm !bg-gray-600 bg-gray-800 px-3 py-2 text-white hover:cursor-pointer; } .footer-link { @apply font-medium text-gray-400 transition-colors hover:text-yellow-400 hover:underline; } .search-text { @apply cursor-pointer hover:text-yellow-500; } .search-btn { @apply flex w-fit cursor-pointer items-center gap-2 rounded bg-yellow-500 px-4 py-2 text-sm font-medium text-black hover:bg-yellow-500 md:text-base; } .search-dialog { @apply fixed top-10 left-1/2 -translate-x-1/2 translate-y-10 border-gray-600 !bg-gray-800 lg:min-w-[800px]; } .search-field { @apply relative border-b border-gray-600 !bg-gray-800; } .search-list { @apply max-h-[400px] !bg-gray-800; } .search-list-indicator { @apply px-5 py-2; } .search-list-empty { @apply !bg-transparent py-6 text-center text-gray-500; } .search-input { @apply h-14 border-0 !bg-gray-800 pr-10 text-base text-gray-400 placeholder:text-gray-500 focus:ring-0; } .search-loader { @apply absolute top-1/2 right-12 h-4 w-4 -translate-y-1/2 animate-spin text-gray-500; } .search-count { @apply border-b border-gray-700 bg-gray-700 px-4 py-2 text-sm font-medium text-gray-400; } .search-item { @apply my-3 w-full rounded-none px-1 data-[selected=true]:bg-gray-600; } .search-item-link { @apply flex w-full cursor-pointer items-center gap-3 border-b border-gray-600 px-2 transition-colors last:border-b-0; } .search-item-name { @apply text-base font-medium text-gray-400; } .nav-list { @apply flex flex-col gap-3 p-2 font-medium sm:flex-row sm:gap-10; } .stock-details-container { @apply w-full grid-cols-1 gap-6 space-y-6 sm:space-y-8 xl:grid-cols-3; } .watchlist-btn { @apply h-11 w-full cursor-pointer rounded bg-yellow-500 text-base font-semibold text-gray-900 hover:bg-yellow-500; } .watchlist-remove { @apply bg-red-500! text-gray-900! hover:bg-red-500!; } .watchlist-empty-container { @apply container flex-col items-center gap-8 p-6 text-center md:mt-10; } .watchlist-empty { @apply flex flex-col items-center justify-center text-center; } .watchlist-star { @apply mb-4 h-16 w-16 text-gray-500; } .empty-title { @apply mb-2 text-xl font-semibold text-gray-400; } .empty-description { @apply mb-6 max-w-md text-gray-500; } .watchlist-container { @apply flex flex-col-reverse gap-8 lg:grid lg:grid-cols-3; } .watchlist { @apply space-y-8 lg:col-span-2; } .watchlist-alerts { @apply h-full w-full flex-col items-start gap-6 lg:col-span-1; } .watchlist-icon-btn { @apply w-fit cursor-pointer text-gray-400 hover:bg-transparent! hover:text-yellow-500; } .watchlist-icon-added { @apply !text-yellow-600 hover:!text-yellow-500; } .watchlist-icon { @apply flex h-8 w-8 items-center justify-center rounded-full bg-gray-700/50; } .trash-icon { @apply h-4 w-4 text-gray-400 hover:text-red-400; } .star-icon { @apply h-4 w-4; } .watchlist-title { @apply text-xl font-bold text-gray-100 md:text-2xl; } .watchlist-table { @apply !relative !w-full overflow-hidden !rounded-lg border !border-gray-600 bg-gray-800; } .table-header-row { @apply border-b border-gray-600 bg-gray-700 font-medium text-gray-400 hover:bg-gray-700; } .table-header:first-child { @apply pl-4; } .table-row { @apply cursor-pointer border-b border-gray-600 text-gray-100 transition-colors hover:bg-gray-700/50; } .table-cell { @apply text-base font-medium; } .add-alert { @apply flex w-fit cursor-pointer items-center gap-1.5 rounded border border-yellow-600/20 bg-transparent px-3 py-2 text-sm font-medium whitespace-nowrap text-yellow-600 transition-colors hover:bg-transparent; } .watchlist-news { @apply grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3; } .news-item { @apply w-full cursor-pointer rounded-lg border border-gray-600 bg-gray-800 p-4 duration-200 hover:border-gray-600; } .news-tag { @apply mb-5 inline-block w-fit rounded bg-gray-600/60 px-2 py-1 font-mono text-sm font-medium text-green-500; } .news-title { @apply mb-3 line-clamp-2 text-lg leading-tight font-semibold text-gray-100; } .news-meta { @apply mb-1 flex items-center text-sm text-gray-500; } .news-summary { @apply mb-3 line-clamp-3 flex-1 text-base leading-relaxed text-gray-400; } .news-cta { @apply align-bottom text-sm text-yellow-500 hover:text-gray-400; } .alert-dialog { @apply max-w-md border-gray-600 bg-gray-800 text-gray-400; } .alert-title { @apply text-xl font-semibold text-gray-100; } .alert-list { @apply flex max-h-[911px] w-full flex-1 flex-col gap-4 overflow-y-auto rounded-lg border border-gray-600 bg-gray-800 p-3; } .alert-empty { @apply px-6 py-8 text-center text-gray-500/50; } .alert-item { @apply rounded-lg border border-gray-600 bg-gray-700 p-4; } .alert-name { @apply mb-2 text-lg font-semibold text-yellow-500; } .alert-details { @apply mb-2 flex items-center justify-between gap-3 border-b pb-3; } .alert-company { @apply text-base text-gray-400; } .alert-price { @apply font-bold text-gray-100; } .alert-actions { @apply flex items-end justify-between; } .alert-update-btn { @apply cursor-pointer rounded-full bg-transparent text-gray-400 hover:bg-green-500/15; } .alert-delete-btn { @apply cursor-pointer rounded-full bg-transparent text-gray-400 transition-colors hover:bg-red-600/15; } } /* Market News Component Styles */ .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; } .scrollbar-hide::-webkit-scrollbar { display: none; } /* TradingView Advanced Chart Widget Styles */ .tradingview-widget-container { position: relative; background-color: #141414 !important; border-radius: 8px !important; overflow: hidden !important; } .tv-embed-widget-wrapper__body { background-color: #141414 !important; } .tradingview-widget-container__widget { background-color: #141414 !important; height: 100% !important; } .widget-stock-heatmap-container .screenerMapWrapper-BBVfGP0b { overflow: hidden !important; background: #141414 !important; background-color: #141414 !important; } .canvasContainer-tyaAU8aH { background: #141414 !important; background-color: #141414 !important; } .tv-site-widget--bg_none { background-color: transparent !important; } .tradingview-widget-copyright { font-size: 11px; color: #9ca3af; text-align: center; padding: 4px 0; background-color: transparent; } .tradingview-widget-copyright a { color: #60a5fa; text-decoration: none; transition: color 0.2s ease; } .tradingview-widget-copyright a:hover { color: #93c5fd; text-decoration: underline; } .tv-embed-widget-wrapper .tv-embed-widget-wrapper__body { background: #141414 !important; background-color: #141414 !important; } .tradingview-widget-container iframe { background-color: #141414 !important; width: 100% !important; } .custom-chart.tradingview-widget-container iframe { border: 1px solid #30333a; border-radius: 8px !important; overflow: hidden !important; } /* Custom scrollbar that shows on hover */ .scrollbar-hide-default { scrollbar-width: thin; scrollbar-color: transparent transparent; } .scrollbar-hide-default::-webkit-scrollbar { width: 8px; } .scrollbar-hide-default::-webkit-scrollbar-track { background: transparent; } .scrollbar-hide-default::-webkit-scrollbar-thumb { background-color: transparent; border-radius: 4px; transition: background-color 0.3s ease; } .scrollbar-hide-default:hover { scrollbar-color: #30333a transparent; } .scrollbar-hide-default:hover::-webkit-scrollbar-thumb { background-color: #30333a; } .scrollbar-hide-default::-webkit-scrollbar-thumb:hover { background-color: #9095a1; }