Alaguraj0361 df5f593369
Some checks failed
CI / ci (push) Has been cancelled
CI / docker-build (push) Has been cancelled
Publish Docker image / docker (push) Has been cancelled
Upload sourcemaps / upload (push) Has been cancelled
add billing and subscription management system with Stripe integration
2026-10-17 19:40:15 +05:30

391 lines
10 KiB
CSS

@import url("https://fonts.googleapis.com/css2?family=Caveat:wght@400;600;700&family=Inter:wght@400;500;600;700&display=swap");
@import "tailwindcss";
@theme {
--container-8xl: 88rem;
--font-sans:
"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
"Helvetica Neue", Arial, sans-serif;
}
/* CrawlerX brand gradient (MetatronCube blue → deep black), used on the
sign-in surface and the sidebar header. */
:root {
--brand-gradient: linear-gradient(
135deg,
#3779b9 0%,
#0f1d34 70%,
#00060c 100%
);
}
.brand-gradient {
background-image: var(--brand-gradient);
}
:root {
--trend-grid-color: oklch(56% 0.01 255 / 0.28);
--trend-axis-color: oklch(42% 0.01 255 / 0.85);
--trend-fill-start-opacity: 0.32;
--trend-fill-end-opacity: 0.05;
--trend-tooltip-bg: oklch(99% 0.005 255 / 0.96);
--trend-tooltip-border: oklch(84% 0.01 255 / 0.7);
--trend-tooltip-shadow: oklch(0% 0 0 / 0.1);
}
@plugin "daisyui" {
/* @property isn't supported by some browsers and gives a noisy warning https://github.com/saadeghi/daisyui/issues/3882 */
exclude: properties;
}
/* Light theme — CrawlerX / MetatronCube brand (primary #3779b9) */
@plugin "daisyui/theme" {
name: "crawlerx";
default: true;
prefersdark: false;
color-scheme: light;
--color-base-100: #ffffff;
--color-base-200: #f6f8fa;
--color-base-300: #e6eaef;
--color-base-content: #151515;
--color-primary: #3779b9;
--color-primary-content: #ffffff;
--color-secondary: #0f1d34;
--color-secondary-content: #ffffff;
--color-accent: #4faede;
--color-accent-content: #06263a;
--color-neutral: #151515;
--color-neutral-content: #ffffff;
--color-info: #3779b9;
--color-info-content: #ffffff;
--color-success: oklch(65% 0.18 145);
--color-success-content: oklch(100% 0 0);
--color-warning: oklch(80% 0.15 80);
--color-warning-content: oklch(100% 0 0);
--color-error: oklch(65% 0.2 25);
--color-error-content: oklch(100% 0 0);
--radius-selector: 0.5rem;
--radius-field: 0.5rem;
--radius-box: 0.75rem;
--size-selector: 0.25rem;
--size-field: 0.25rem;
--border: 1px;
--depth: 0;
--noise: 0;
}
/* Dark theme - auto-activates via prefers-color-scheme */
@plugin "daisyui/theme" {
name: "crawlerx-dark";
prefersdark: true;
color-scheme: dark;
--color-base-100: #141821;
--color-base-200: #0e121b;
--color-base-300: #232a37;
--color-base-content: #e8ebf0;
--color-primary: #3f8ad4;
--color-primary-content: #ffffff;
--color-secondary: #9fb3c8;
--color-secondary-content: #0e121b;
--color-accent: #4faede;
--color-accent-content: #06263a;
--color-neutral: #e8ebf0;
--color-neutral-content: #141821;
--color-info: #3f8ad4;
--color-info-content: #ffffff;
--color-success: oklch(65% 0.18 145);
--color-success-content: oklch(100% 0 0);
--color-warning: oklch(80% 0.15 80);
--color-warning-content: oklch(100% 0 0);
--color-error: oklch(65% 0.2 25);
--color-error-content: oklch(100% 0 0);
--radius-selector: 0.5rem;
--radius-field: 0.5rem;
--radius-box: 0.75rem;
--size-selector: 0.25rem;
--size-field: 0.25rem;
--border: 1px;
--depth: 0;
--noise: 0;
}
html,
body {
@apply m-0 bg-base-200;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
min-height: 100%;
}
/* Prevent Safari mobile from zooming on input focus (requires 16px minimum) */
input,
textarea,
select {
@apply text-base;
}
/* Global input focus styling - use primary color instead of default ring */
.input:focus,
.input:focus-visible,
.textarea:focus,
.textarea:focus-visible {
outline: none;
border-color: var(--color-primary);
background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);
}
/* Safe area utilities for mobile devices */
@layer utilities {
.pb-safe {
padding-bottom: calc(env(safe-area-inset-bottom, 0.5rem) + 0.5rem);
}
.pt-safe {
padding-top: max(env(safe-area-inset-top, 0), 12px);
}
}
/* Override DaisyUI dock's fixed positioning to use flex layout instead */
/* This allows the TabBar to work correctly with Safari's browser toolbar */
.dock {
position: relative;
bottom: auto;
left: auto;
right: auto;
border-top: none;
height: 4rem;
padding-bottom: 0;
}
/* Touch device optimizations */
@media (pointer: coarse) {
html {
touch-action: none;
}
body {
touch-action: pan-x pan-y;
}
}
/* Dark mode: neutral interactive surfaces should lift above the panel, not
sink below it. DaisyUI derives default buttons and the tabs-box well from
base-200, which is darker than the base-100 content panel in dark mode,
so they read as sunken/disabled. Colored variants (primary, error, ...)
set their own --btn-color and are excluded. */
html[data-theme="crawlerx-dark"]
.btn:not(
.btn-primary,
.btn-error,
.btn-neutral,
.btn-ghost,
.btn-outline,
.btn-soft
) {
--btn-color: oklch(25% 0 0);
}
/* Light mode: the base-200 default button is nearly invisible on the
base-100 content panel; use a white surface with a visible border,
matching inputs/selects. */
html[data-theme="crawlerx"]
.btn:not(
.btn-primary,
.btn-error,
.btn-neutral,
.btn-ghost,
.btn-outline,
.btn-soft
) {
--btn-color: var(--color-base-100);
--btn-border: var(--color-base-300);
}
/* Underline tabs: DaisyUI's tabs-border underlines the active tab with
currentColor; use the primary accent instead (PostHog-style). */
.tabs-border > .tab.tab-active::before {
--tab-border-color: var(--color-primary);
}
/* Custom alert styling with darker borders and transparent background */
.alert {
@apply flex gap-3 rounded-lg border p-4 text-base-content/70;
}
.alert-warning {
@apply border-warning/70 bg-warning/40 text-base-content/90;
}
.alert-info {
@apply border-info/70 bg-info/40 text-base-content/90;
}
.alert-success {
@apply border-success/70 bg-success/40 text-base-content/90;
}
.alert-error {
@apply border-error/70 bg-error/40 text-base-content/90;
}
/* Tag chip colors — muted background + readable text in both themes.
Text uses darker shades on light theme for contrast, lighter on dark. */
.tag-chip-slate {
background-color: color-mix(in oklab, #64748b 14%, transparent);
color: #334155;
--tw-ring-color: color-mix(in oklab, #64748b 30%, transparent);
}
.tag-chip-rose {
background-color: color-mix(in oklab, #f43f5e 14%, transparent);
color: #9f1239;
--tw-ring-color: color-mix(in oklab, #f43f5e 30%, transparent);
}
.tag-chip-amber {
background-color: color-mix(in oklab, #f59e0b 16%, transparent);
color: #92400e;
--tw-ring-color: color-mix(in oklab, #f59e0b 32%, transparent);
}
.tag-chip-lime {
background-color: color-mix(in oklab, #84cc16 16%, transparent);
color: #3f6212;
--tw-ring-color: color-mix(in oklab, #84cc16 32%, transparent);
}
.tag-chip-emerald {
background-color: color-mix(in oklab, #10b981 14%, transparent);
color: #065f46;
--tw-ring-color: color-mix(in oklab, #10b981 30%, transparent);
}
.tag-chip-sky {
background-color: color-mix(in oklab, #0ea5e9 14%, transparent);
color: #075985;
--tw-ring-color: color-mix(in oklab, #0ea5e9 30%, transparent);
}
.tag-chip-violet {
background-color: color-mix(in oklab, #8b5cf6 16%, transparent);
color: #5b21b6;
--tw-ring-color: color-mix(in oklab, #8b5cf6 32%, transparent);
}
.tag-chip-fuchsia {
background-color: color-mix(in oklab, #d946ef 14%, transparent);
color: #86198f;
--tw-ring-color: color-mix(in oklab, #d946ef 30%, transparent);
}
html[data-theme="crawlerx-dark"] .tag-chip-slate {
color: #cbd5e1;
}
html[data-theme="crawlerx-dark"] .tag-chip-rose {
color: #fda4af;
}
html[data-theme="crawlerx-dark"] .tag-chip-amber {
color: #fcd34d;
}
html[data-theme="crawlerx-dark"] .tag-chip-lime {
color: #d9f99d;
}
html[data-theme="crawlerx-dark"] .tag-chip-emerald {
color: #6ee7b7;
}
html[data-theme="crawlerx-dark"] .tag-chip-sky {
color: #7dd3fc;
}
html[data-theme="crawlerx-dark"] .tag-chip-violet {
color: #c4b5fd;
}
html[data-theme="crawlerx-dark"] .tag-chip-fuchsia {
color: #f5d0fe;
}
/* Keyword difficulty score badges — muted/transparent style to match tag chips */
.score-badge {
@apply ring-1 ring-inset;
}
.score-tier-na {
background-color: color-mix(in oklab, #94a3b8 12%, transparent);
color: #475569;
--tw-ring-color: color-mix(in oklab, #94a3b8 28%, transparent);
}
.score-tier-1 {
background-color: color-mix(in oklab, #10b981 15%, transparent);
color: #065f46;
--tw-ring-color: color-mix(in oklab, #10b981 30%, transparent);
}
.score-tier-2 {
background-color: color-mix(in oklab, #84cc16 15%, transparent);
color: #3f6212;
--tw-ring-color: color-mix(in oklab, #84cc16 30%, transparent);
}
.score-tier-3 {
background-color: color-mix(in oklab, #eab308 16%, transparent);
color: #854d0e;
--tw-ring-color: color-mix(in oklab, #eab308 32%, transparent);
}
.score-tier-4 {
background-color: color-mix(in oklab, #f97316 16%, transparent);
color: #9a3412;
--tw-ring-color: color-mix(in oklab, #f97316 32%, transparent);
}
.score-tier-5 {
background-color: color-mix(in oklab, #ef4444 15%, transparent);
color: #991b1b;
--tw-ring-color: color-mix(in oklab, #ef4444 30%, transparent);
}
.score-tier-6 {
background-color: color-mix(in oklab, #b91c1c 18%, transparent);
color: #7f1d1d;
--tw-ring-color: color-mix(in oklab, #b91c1c 32%, transparent);
}
html[data-theme="crawlerx-dark"] .score-tier-na {
color: #cbd5e1;
}
html[data-theme="crawlerx-dark"] .score-tier-1 {
color: #6ee7b7;
}
html[data-theme="crawlerx-dark"] .score-tier-2 {
color: #bef264;
}
html[data-theme="crawlerx-dark"] .score-tier-3 {
color: #fde047;
}
html[data-theme="crawlerx-dark"] .score-tier-4 {
color: #fdba74;
}
html[data-theme="crawlerx-dark"] .score-tier-5 {
color: #fca5a5;
}
html[data-theme="crawlerx-dark"] .score-tier-6 {
color: #fda4af;
}
html[data-theme="crawlerx-dark"] {
--trend-grid-color: oklch(78% 0.01 255 / 0.22);
--trend-axis-color: oklch(84% 0.01 255 / 0.62);
--trend-fill-start-opacity: 0.24;
--trend-fill-end-opacity: 0.03;
--trend-tooltip-bg: oklch(21% 0.01 255 / 0.95);
--trend-tooltip-border: oklch(40% 0.01 255 / 0.65);
--trend-tooltip-shadow: oklch(0% 0 0 / 0.35);
}
html[data-theme="crawlerx-dark"] .alert-warning {
@apply border-warning/60 bg-warning/20;
}
html[data-theme="crawlerx-dark"] .alert-info {
@apply border-info/60 bg-info/20;
}
html[data-theme="crawlerx-dark"] .alert-success {
@apply border-success/60 bg-success/20;
}
html[data-theme="crawlerx-dark"] .alert-error {
@apply border-error/60 bg-error/20;
}