:root {
/* Primitive Color Tokens */
--color-white: rgba(255, 255, 255, 1);
--color-black: rgba(0, 0, 0, 1);
--color-cream-50: rgba(252, 252, 249, 1);
--color-cream-100: rgba(255, 255, 253, 1);
--color-gray-200: rgba(245, 245, 245, 1);
--color-gray-300: rgba(167, 169, 169, 1);
--color-gray-400: rgba(119, 124, 124, 1);
--color-slate-500: rgba(98, 108, 113, 1);
--color-brown-600: rgba(94, 82, 64, 1);
--color-charcoal-700: rgba(31, 33, 33, 1);
--color-charcoal-800: rgba(38, 40, 40, 1);
--color-slate-900: rgba(19, 52, 59, 1);
--color-teal-300: rgba(50, 184, 198, 1);
--color-teal-400: rgba(45, 166, 178, 1);
--color-teal-500: rgba(33, 128, 141, 1);
--color-teal-600: rgba(29, 116, 128, 1);
--color-teal-700: rgba(26, 104, 115, 1);
--color-teal-800: rgba(41, 150, 161, 1);
--color-red-400: rgba(255, 84, 89, 1);
--color-red-500: rgba(192, 21, 47, 1);
--color-orange-400: rgba(230, 129, 97, 1);
--color-orange-500: rgba(168, 75, 47, 1);
/* RGB versions for opacity control */
--color-brown-600-rgb: 94, 82, 64;
--color-teal-500-rgb: 33, 128, 141;
--color-slate-900-rgb: 19, 52, 59;
--color-slate-500-rgb: 98, 108, 113;
--color-red-500-rgb: 192, 21, 47;
--color-red-400-rgb: 255, 84, 89;
--color-orange-500-rgb: 168, 75, 47;
--color-orange-400-rgb: 230, 129, 97;
/* Background color tokens (Light Mode) */
--color-bg-1: rgba(59, 130, 246, 0.08); /* Light blue */
--color-bg-2: rgba(245, 158, 11, 0.08); /* Light yellow */
--color-bg-3: rgba(34, 197, 94, 0.08); /* Light green */
--color-bg-4: rgba(239, 68, 68, 0.08); /* Light red */
--color-bg-5: rgba(147, 51, 234, 0.08); /* Light purple */
--color-bg-6: rgba(249, 115, 22, 0.08); /* Light orange */
--color-bg-7: rgba(236, 72, 153, 0.08); /* Light pink */
--color-bg-8: rgba(6, 182, 212, 0.08); /* Light cyan */
/* Semantic Color Tokens (Light Mode) */
--color-background: var(--color-cream-50);
--color-surface: var(--color-cream-100);
--color-text: var(--color-slate-900);
--color-text-secondary: var(--color-slate-500);
--color-primary: var(--color-teal-500);
--color-primary-hover: var(--color-teal-600);
--color-primary-active: var(--color-teal-700);
--color-secondary: rgba(var(--color-brown-600-rgb), 0.12);
--color-secondary-hover: rgba(var(--color-brown-600-rgb), 0.2);
--color-secondary-active: rgba(var(--color-brown-600-rgb), 0.25);
--color-border: rgba(var(--color-brown-600-rgb), 0.2);
--color-btn-primary-text: var(--color-cream-50);
--color-card-border: rgba(var(--color-brown-600-rgb), 0.12);
--color-card-border-inner: rgba(var(--color-brown-600-rgb), 0.12);
--color-error: var(--color-red-500);
--color-success: var(--color-teal-500);
--color-warning: var(--color-orange-500);
--color-info: var(--color-slate-500);
--color-focus-ring: rgba(var(--color-teal-500-rgb), 0.4);
--color-select-caret: rgba(var(--color-slate-900-rgb), 0.8);
/* Common style patterns */
--focus-ring: 0 0 0 3px var(--color-focus-ring);
--focus-outline: 2px solid var(--color-primary);
--status-bg-opacity: 0.15;
--status-border-opacity: 0.25;
--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
/* RGB versions for opacity control */
--color-success-rgb: 33, 128, 141;
--color-error-rgb: 192, 21, 47;
--color-warning-rgb: 168, 75, 47;
--color-info-rgb: 98, 108, 113;
/* Typography */
--font-family-base: "FKGroteskNeue", "Geist", "Inter", -apple-system,
BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--font-family-mono: "Berkeley Mono", ui-monospace, SFMono-Regular, Menlo,
Monaco, Consolas, monospace;
--font-size-xs: 11px;
--font-size-sm: 12px;
--font-size-base: 14px;
--font-size-md: 14px;
--font-size-lg: 16px;
--font-size-xl: 18px;
--font-size-2xl: 20px;
--font-size-3xl: 24px;
--font-size-4xl: 30px;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 550;
--font-weight-bold: 600;
--line-height-tight: 1.2;
--line-height-normal: 1.5;
--letter-spacing-tight: -0.01em;
/* Spacing */
--space-0: 0;
--space-1: 1px;
--space-2: 2px;
--space-4: 4px;
--space-6: 6px;
--space-8: 8px;
--space-10: 10px;
--space-12: 12px;
--space-16: 16px;
--space-20: 20px;
--space-24: 24px;
--space-32: 32px;
/* Border Radius */
--radius-sm: 6px;
--radius-base: 8px;
--radius-md: 10px;
--radius-lg: 12px;
--radius-full: 9999px;
/* Shadows */
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.02);
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.02);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.04),
0 2px 4px -1px rgba(0, 0, 0, 0.02);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.04),
0 4px 6px -2px rgba(0, 0, 0, 0.02);
--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.15),
inset 0 -1px 0 rgba(0, 0, 0, 0.03);
/* Animation */
--duration-fast: 150ms;
--duration-normal: 250ms;
--ease-standard: cubic-bezier(0.16, 1, 0.3, 1);
/* Layout */
--container-sm: 640px;
--container-md: 768px;
--container-lg: 1024px;
--container-xl: 1280px;
}
/* Dark mode colors */
@media (prefers-color-scheme: dark) {
:root {
/* RGB versions for opacity control (Dark Mode) */
--color-gray-400-rgb: 119, 124, 124;
--color-teal-300-rgb: 50, 184, 198;
--color-gray-300-rgb: 167, 169, 169;
--color-gray-200-rgb: 245, 245, 245;
/* Background color tokens (Dark Mode) */
--color-bg-1: rgba(29, 78, 216, 0.15); /* Dark blue */
--color-bg-2: rgba(180, 83, 9, 0.15); /* Dark yellow */
--color-bg-3: rgba(21, 128, 61, 0.15); /* Dark green */
--color-bg-4: rgba(185, 28, 28, 0.15); /* Dark red */
--color-bg-5: rgba(107, 33, 168, 0.15); /* Dark purple */
--color-bg-6: rgba(194, 65, 12, 0.15); /* Dark orange */
--color-bg-7: rgba(190, 24, 93, 0.15); /* Dark pink */
--color-bg-8: rgba(8, 145, 178, 0.15); /* Dark cyan */
/* Semantic Color Tokens (Dark Mode) */
--color-background: var(--color-charcoal-700);
--color-surface: var(--color-charcoal-800);
--color-text: var(--color-gray-200);
--color-text-secondary: rgba(var(--color-gray-300-rgb), 0.7);
--color-primary: var(--color-teal-300);
--color-primary-hover: var(--color-teal-400);
--color-primary-active: var(--color-teal-800);
--color-secondary: rgba(var(--color-gray-400-rgb), 0.15);
--color-secondary-hover: rgba(var(--color-gray-400-rgb), 0.25);
--color-secondary-active: rgba(var(--color-gray-400-rgb), 0.3);
--color-border: rgba(var(--color-gray-400-rgb), 0.3);
--color-error: var(--color-red-400);
--color-success: var(--color-teal-300);
--color-warning: var(--color-orange-400);
--color-info: var(--color-gray-300);
--color-focus-ring: rgba(var(--color-teal-300-rgb), 0.4);
--color-btn-primary-text: var(--color-slate-900);
--color-card-border: rgba(var(--color-gray-400-rgb), 0.2);
--color-card-border-inner: rgba(var(--color-gray-400-rgb), 0.15);
--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -1px 0 rgba(0, 0, 0, 0.15);
--button-border-secondary: rgba(var(--color-gray-400-rgb), 0.2);
--color-border-secondary: rgba(var(--color-gray-400-rgb), 0.2);
--color-select-caret: rgba(var(--color-gray-200-rgb), 0.8);
/* Common style patterns - updated for dark mode */
--focus-ring: 0 0 0 3px var(--color-focus-ring);
--focus-outline: 2px solid var(--color-primary);
--status-bg-opacity: 0.15;
--status-border-opacity: 0.25;
--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
/* RGB versions for dark mode */
--color-success-rgb: var(--color-teal-300-rgb);
--color-error-rgb: var(--color-red-400-rgb);
--color-warning-rgb: var(--color-orange-400-rgb);
--color-info-rgb: var(--color-gray-300-rgb);
}
}
/* Data attribute for manual theme switching */
[data-color-scheme="dark"] {
/* RGB versions for opacity control (dark mode) */
--color-gray-400-rgb: 119, 124, 124;
--color-teal-300-rgb: 50, 184, 198;
--color-gray-300-rgb: 167, 169, 169;
--color-gray-200-rgb: 245, 245, 245;
/* Colorful background palette - Dark Mode */
--color-bg-1: rgba(29, 78, 216, 0.15); /* Dark blue */
--color-bg-2: rgba(180, 83, 9, 0.15); /* Dark yellow */
--color-bg-3: rgba(21, 128, 61, 0.15); /* Dark green */
--color-bg-4: rgba(185, 28, 28, 0.15); /* Dark red */
--color-bg-5: rgba(107, 33, 168, 0.15); /* Dark purple */
--color-bg-6: rgba(194, 65, 12, 0.15); /* Dark orange */
--color-bg-7: rgba(190, 24, 93, 0.15); /* Dark pink */
--color-bg-8: rgba(8, 145, 178, 0.15); /* Dark cyan */
/* Semantic Color Tokens (Dark Mode) */
--color-background: var(--color-charcoal-700);
--color-surface: var(--color-charcoal-800);
--color-text: var(--color-gray-200);
--color-text-secondary: rgba(var(--color-gray-300-rgb), 0.7);
--color-primary: var(--color-teal-300);
--color-primary-hover: var(--color-teal-400);
--color-primary-active: var(--color-teal-800);
--color-secondary: rgba(var(--color-gray-400-rgb), 0.15);
--color-secondary-hover: rgba(var(--color-gray-400-rgb), 0.25);
--color-secondary-active: rgba(var(--color-gray-400-rgb), 0.3);
--color-border: rgba(var(--color-gray-400-rgb), 0.3);
--color-error: var(--color-red-400);
--color-success: var(--color-teal-300);
--color-warning: var(--color-orange-400);
--color-info: var(--color-gray-300);
--color-focus-ring: rgba(var(--color-teal-300-rgb), 0.4);
--color-btn-primary-text: var(--color-slate-900);
--color-card-border: rgba(var(--color-gray-400-rgb), 0.15);
--color-card-border-inner: rgba(var(--color-gray-400-rgb), 0.15);
--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -1px 0 rgba(0, 0, 0, 0.15);
--color-border-secondary: rgba(var(--color-gray-400-rgb), 0.2);
--color-select-caret: rgba(var(--color-gray-200-rgb), 0.8);
/* Common style patterns - updated for dark mode */
--focus-ring: 0 0 0 3px var(--color-focus-ring);
--focus-outline: 2px solid var(--color-primary);
--status-bg-opacity: 0.15;
--status-border-opacity: 0.25;
--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
/* RGB versions for dark mode */
--color-success-rgb: var(--color-teal-300-rgb);
--color-error-rgb: var(--color-red-400-rgb);
--color-warning-rgb: var(--color-orange-400-rgb);
--color-info-rgb: var(--color-gray-300-rgb);
}
[data-color-scheme="light"] {
/* RGB versions for opacity control (light mode) */
--color-brown-600-rgb: 94, 82, 64;
--color-teal-500-rgb: 33, 128, 141;
--color-slate-900-rgb: 19, 52, 59;
/* Semantic Color Tokens (Light Mode) */
--color-background: var(--color-cream-50);
--color-surface: var(--color-cream-100);
--color-text: var(--color-slate-900);
--color-text-secondary: var(--color-slate-500);
--color-primary: var(--color-teal-500);
--color-primary-hover: var(--color-teal-600);
--color-primary-active: var(--color-teal-700);
--color-secondary: rgba(var(--color-brown-600-rgb), 0.12);
--color-secondary-hover: rgba(var(--color-brown-600-rgb), 0.2);
--color-secondary-active: rgba(var(--color-brown-600-rgb), 0.25);
--color-border: rgba(var(--color-brown-600-rgb), 0.2);
--color-btn-primary-text: var(--color-cream-50);
--color-card-border: rgba(var(--color-brown-600-rgb), 0.12);
--color-card-border-inner: rgba(var(--color-brown-600-rgb), 0.12);
--color-error: var(--color-red-500);
--color-success: var(--color-teal-500);
--color-warning: var(--color-orange-500);
--color-info: var(--color-slate-500);
--color-focus-ring: rgba(var(--color-teal-500-rgb), 0.4);
/* RGB versions for light mode */
--color-success-rgb: var(--color-teal-500-rgb);
--color-error-rgb: var(--color-red-500-rgb);
--color-warning-rgb: var(--color-orange-500-rgb);
--color-info-rgb: var(--color-slate-500-rgb);
}
/* Base styles */
html {
font-size: var(--font-size-base);
font-family: var(--font-family-base);
line-height: var(--line-height-normal);
color: var(--color-text);
background-color: var(--color-background);
-webkit-font-smoothing: antialiased;
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
/* Typography */
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
font-weight: var(--font-weight-semibold);
line-height: var(--line-height-tight);
color: var(--color-text);
letter-spacing: var(--letter-spacing-tight);
}
h1 {
font-size: var(--font-size-4xl);
}
h2 {
font-size: var(--font-size-3xl);
}
h3 {
font-size: var(--font-size-2xl);
}
h4 {
font-size: var(--font-size-xl);
}
h5 {
font-size: var(--font-size-lg);
}
h6 {
font-size: var(--font-size-md);
}
p {
margin: 0 0 var(--space-16) 0;
}
a {
color: var(--color-primary);
text-decoration: none;
transition: color var(--duration-fast) var(--ease-standard);
}
a:hover {
color: var(--color-primary-hover);
}
code,
pre {
font-family: var(--font-family-mono);
font-size: calc(var(--font-size-base) * 0.95);
background-color: var(--color-secondary);
border-radius: var(--radius-sm);
}
code {
padding: var(--space-1) var(--space-4);
}
pre {
padding: var(--space-16);
margin: var(--space-16) 0;
overflow: auto;
border: 1px solid var(--color-border);
}
pre code {
background: none;
padding: 0;
}
/* Buttons */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--space-8) var(--space-16);
border-radius: var(--radius-base);
font-size: var(--font-size-base);
font-weight: 500;
line-height: 1.5;
cursor: pointer;
transition: all var(--duration-normal) var(--ease-standard);
border: none;
text-decoration: none;
position: relative;
}
.btn:focus-visible {
outline: none;
box-shadow: var(--focus-ring);
}
.btn--primary {
background: var(--color-primary);
color: var(--color-btn-primary-text);
}
.btn--primary:hover {
background: var(--color-primary-hover);
}
.btn--primary:active {
background: var(--color-primary-active);
}
.btn--secondary {
background: var(--color-secondary);
color: var(--color-text);
}
.btn--secondary:hover {
background: var(--color-secondary-hover);
}
.btn--secondary:active {
background: var(--color-secondary-active);
}
.btn--outline {
background: transparent;
border: 1px solid var(--color-border);
color: var(--color-text);
}
.btn--outline:hover {
background: var(--color-secondary);
}
.btn--sm {
padding: var(--space-4) var(--space-12);
font-size: var(--font-size-sm);
border-radius: var(--radius-sm);
}
.btn--lg {
padding: var(--space-10) var(--space-20);
font-size: var(--font-size-lg);
border-radius: var(--radius-md);
}
.btn--full-width {
width: 100%;
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* Form elements */
.form-control {
display: block;
width: 100%;
padding: var(--space-8) var(--space-12);
font-size: var(--font-size-md);
line-height: 1.5;
color: var(--color-text);
background-color: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-base);
transition: border-color var(--duration-fast) var(--ease-standard),
box-shadow var(--duration-fast) var(--ease-standard);
}
textarea.form-control {
font-family: var(--font-family-base);
font-size: var(--font-size-base);
}
select.form-control {
padding: var(--space-8) var(--space-12);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-image: var(--select-caret-light);
background-repeat: no-repeat;
background-position: right var(--space-12) center;
background-size: 16px;
padding-right: var(--space-32);
}
/* Add a dark mode specific caret */
@media (prefers-color-scheme: dark) {
select.form-control {
background-image: var(--select-caret-dark);
}
}
/* Also handle data-color-scheme */
[data-color-scheme="dark"] select.form-control {
background-image: var(--select-caret-dark);
}
[data-color-scheme="light"] select.form-control {
background-image: var(--select-caret-light);
}
.form-control:focus {
border-color: var(--color-primary);
outline: var(--focus-outline);
}
.form-label {
display: block;
margin-bottom: var(--space-8);
font-weight: var(--font-weight-medium);
font-size: var(--font-size-sm);
}
.form-group {
margin-bottom: var(--space-16);
}
/* Card component */
.card {
background-color: var(--color-surface);
border-radius: var(--radius-lg);
border: 1px solid var(--color-card-border);
box-shadow: var(--shadow-sm);
overflow: hidden;
transition: box-shadow var(--duration-normal) var(--ease-standard);
}
.card:hover {
box-shadow: var(--shadow-md);
}
.card__body {
padding: var(--space-16);
}
.card__header,
.card__footer {
padding: var(--space-16);
border-bottom: 1px solid var(--color-card-border-inner);
}
/* Status indicators - simplified with CSS variables */
.status {
display: inline-flex;
align-items: center;
padding: var(--space-6) var(--space-12);
border-radius: var(--radius-full);
font-weight: var(--font-weight-medium);
font-size: var(--font-size-sm);
}
.status--success {
background-color: rgba(
var(--color-success-rgb, 33, 128, 141),
var(--status-bg-opacity)
);
color: var(--color-success);
border: 1px solid
rgba(var(--color-success-rgb, 33, 128, 141), var(--status-border-opacity));
}
.status--error {
background-color: rgba(
var(--color-error-rgb, 192, 21, 47),
var(--status-bg-opacity)
);
color: var(--color-error);
border: 1px solid
rgba(var(--color-error-rgb, 192, 21, 47), var(--status-border-opacity));
}
.status--warning {
background-color: rgba(
var(--color-warning-rgb, 168, 75, 47),
var(--status-bg-opacity)
);
color: var(--color-warning);
border: 1px solid
rgba(var(--color-warning-rgb, 168, 75, 47), var(--status-border-opacity));
}
.status--info {
background-color: rgba(
var(--color-info-rgb, 98, 108, 113),
var(--status-bg-opacity)
);
color: var(--color-info);
border: 1px solid
rgba(var(--color-info-rgb, 98, 108, 113), var(--status-border-opacity));
}
/* Container layout */
.container {
width: 100%;
margin-right: auto;
margin-left: auto;
padding-right: var(--space-16);
padding-left: var(--space-16);
}
@media (min-width: 640px) {
.container {
max-width: var(--container-sm);
}
}
@media (min-width: 768px) {
.container {
max-width: var(--container-md);
}
}
@media (min-width: 1024px) {
.container {
max-width: var(--container-lg);
}
}
@media (min-width: 1280px) {
.container {
max-width: var(--container-xl);
}
}
/* Utility classes */
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.items-center {
align-items: center;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.gap-4 {
gap: var(--space-4);
}
.gap-8 {
gap: var(--space-8);
}
.gap-16 {
gap: var(--space-16);
}
.m-0 {
margin: 0;
}
.mt-8 {
margin-top: var(--space-8);
}
.mb-8 {
margin-bottom: var(--space-8);
}
.mx-8 {
margin-left: var(--space-8);
margin-right: var(--space-8);
}
.my-8 {
margin-top: var(--space-8);
margin-bottom: var(--space-8);
}
.p-0 {
padding: 0;
}
.py-8 {
padding-top: var(--space-8);
padding-bottom: var(--space-8);
}
.px-8 {
padding-left: var(--space-8);
padding-right: var(--space-8);
}
.py-16 {
padding-top: var(--space-16);
padding-bottom: var(--space-16);
}
.px-16 {
padding-left: var(--space-16);
padding-right: var(--space-16);
}
.block {
display: block;
}
.hidden {
display: none;
}
/* Accessibility */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
:focus-visible {
outline: var(--focus-outline);
outline-offset: 2px;
}
/* Dark mode specifics */
[data-color-scheme="dark"] .btn--outline {
border: 1px solid var(--color-border-secondary);
}
@font-face {
font-family: 'FKGroteskNeue';
src: url('https://r2cdn.perplexity.ai/fonts/FKGroteskNeue.woff2')
format('woff2');
}
/* END PERPLEXITY DESIGN SYSTEM */
/* Custom properties for Blubooks brand */
:root {
--blubooks-dark-1: #090F14;
--blubooks-dark-2: #0D1720;
--blubooks-light-1: #82B5C1;
--blubooks-light-2: #BCE6F5;
--blubooks-white: #FFFFFF;
--blubooks-gray: #F8F9FA;
--blubooks-text-light: rgba(255, 255, 255, 0.9);
/* Override design system colors with brand colors */
--color-primary: var(--blubooks-light-1);
--color-primary-hover: #6BA4B1;
--color-primary-active: #5A93A0;
--color-text: var(--blubooks-dark-1);
--color-background: var(--blubooks-white);
--color-surface: var(--blubooks-gray);
}
/* Header Styles */
.header {
background: linear-gradient(135deg, var(--blubooks-dark-1) 0%, var(--blubooks-dark-2) 100%);
color: var(--blubooks-white);
padding: var(--space-16) 0;
position: sticky;
top: 0;
z-index: 100;
box-shadow: var(--shadow-md);
}
.header__content {
display: flex;
justify-content: space-between;
align-items: center;
}
.header__logo .logo {
font-size: var(--font-size-3xl);
font-weight: var(--font-weight-bold);
color: var(--blubooks-light-2);
margin: 0;
letter-spacing: -0.02em;
cursor: pointer;
}
.header__logo .tagline {
font-size: var(--font-size-sm);
color: rgba(188, 230, 245, 0.8);
margin: var(--space-4) 0 0 0;
font-weight: var(--font-weight-normal);
}
.nav__list {
display: flex;
list-style: none;
margin: 0;
padding: 0;
gap: var(--space-32);
}
.nav__link {
color: var(--blubooks-text-light);
text-decoration: none;
font-weight: var(--font-weight-medium);
font-size: var(--font-size-md);
transition: color var(--duration-fast) var(--ease-standard);
}
.nav__link:hover {
color: var(--blubooks-light-2);
}
.nav__toggle {
display: none;
flex-direction: column;
gap: var(--space-4);
background: none;
border: none;
cursor: pointer;
padding: var(--space-8);
z-index: 101;
}
.nav__toggle span {
width: 24px;
height: 2px;
background: var(--blubooks-white);
transition: all var(--duration-normal) var(--ease-standard);
border-radius: 2px;
}
/* Hero Section */
.hero {
background: linear-gradient(135deg, var(--blubooks-light-2) 0%, rgba(188, 230, 245, 0.3) 100%);
padding: var(--space-32) 0;
}
.hero__content {
max-width: 800px;
margin: 0 auto;
text-align: center;
}
.hero__meta {
display: flex;
justify-content: center;
gap: var(--space-16);
margin-bottom: var(--space-24);
font-size: var(--font-size-sm);
color: var(--color-text-secondary);
}
.hero__title {
font-size: var(--font-size-4xl);
line-height: var(--line-height-tight);
margin-bottom: var(--space-24);
color: var(--blubooks-dark-1);
font-weight: var(--font-weight-bold);
}
.hero__subtitle {
font-size: var(--font-size-xl);
color: var(--color-text-secondary);
line-height: var(--line-height-normal);
margin: 0;
}
/* Featured Image */
.featured-image {
padding: var(--space-32) 0;
background: var(--color-surface);
}
.featured-image__container {
max-width: 900px;
margin: 0 auto;
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-lg);
}
.featured-image__img {
width: 100%;
height: auto;
display: block;
}
/* Blog Content */
.blog-content {
padding: var(--space-32) 0;
}
.blog-content__wrapper {
max-width: 750px;
margin: 0 auto;
}
.blog-content__text {
font-size: var(--font-size-lg);
line-height: 1.7;
color: var(--color-text);
}
.blog-content__text p {
margin-bottom: var(--space-24);
}
.blog-content__text h2 {
font-size: var(--font-size-2xl);
color: var(--blubooks-dark-1);
margin: var(--space-32) 0 var(--space-16) 0;
border-left: 4px solid var(--blubooks-light-1);
padding-left: var(--space-16);
}
.blog-content__text h3 {
font-size: var(--font-size-xl);
color: var(--blubooks-dark-1);
margin: var(--space-24) 0 var(--space-12) 0;
}
.intro-text {
font-size: var(--font-size-xl);
font-weight: var(--font-weight-medium);
color: var(--blubooks-dark-1);
border-left: 4px solid var(--blubooks-light-1);
padding-left: var(--space-20);
margin-bottom: var(--space-32) !important;
background: rgba(188, 230, 245, 0.1);
padding: var(--space-20);
border-radius: var(--radius-base);
}
.services-list {
list-style: none;
padding: 0;
margin: var(--space-24) 0;
}
.services-list li {
padding: var(--space-16);
margin-bottom: var(--space-12);
background: var(--color-surface);
border-radius: var(--radius-base);
border-left: 4px solid var(--blubooks-light-1);
}
/* CTA Sections */
.cta-section {
background: linear-gradient(135deg, var(--blubooks-light-1) 0%, var(--blubooks-light-2) 100%);
padding: var(--space-32);
border-radius: var(--radius-lg);
text-align: center;
margin: var(--space-32) 0;
color: var(--blubooks-white);
}
.cta-section h3 {
color: var(--blubooks-white);
margin-bottom: var(--space-16);
font-size: var(--font-size-2xl);
}
.cta-section p {
font-size: var(--font-size-lg);
margin-bottom: var(--space-24);
color: rgba(255, 255, 255, 0.9);
}
.final-cta {
background: var(--blubooks-gray);
padding: var(--space-32);
border-radius: var(--radius-lg);
text-align: center;
margin: var(--space-32) 0;
border: 2px solid var(--blubooks-light-2);
}
.final-cta h2 {
color: var(--blubooks-dark-1);
margin-bottom: var(--space-16);
border: none;
padding: 0;
}
.cta-buttons {
display: flex;
gap: var(--space-16);
justify-content: center;
margin-top: var(--space-24);
flex-wrap: wrap;
}
/* Content Images */
.content-image {
margin: var(--space-32) 0;
text-align: center;
}
.content-image__img {
width: 100%;
max-width: 600px;
height: auto;
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
}
.content-image__caption {
font-size: var(--font-size-sm);
color: var(--color-text-secondary);
font-style: italic;
margin-top: var(--space-12);
}
/* About Section */
.about {
background: var(--color-surface);
padding: var(--space-32) 0;
}
.about__content {
max-width: 800px;
margin: 0 auto;
text-align: center;
}
.about__content h2 {
font-size: var(--font-size-3xl);
color: var(--blubooks-dark-1);
margin-bottom: var(--space-24);
}
.about__content p {
font-size: var(--font-size-lg);
line-height: var(--line-height-normal);
color: var(--color-text-secondary);
margin-bottom: var(--space-16);
}
/* Button Overrides */
.btn {
font-weight: var(--font-weight-semibold);
text-transform: none;
letter-spacing: normal;
transition: all var(--duration-normal) var(--ease-standard);
}
.btn--primary {
background: var(--blubooks-light-1);
color: var(--blubooks-white);
}
.btn--primary:hover {
background: var(--color-primary-hover);
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.btn--outline {
border-color: var(--blubooks-light-1);
color: var(--blubooks-light-1);
}
.btn--outline:hover {
background: var(--blubooks-light-1);
color: var(--blubooks-white);
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
/* Services Section */
.services {
background: var(--blubooks-white);
padding: var(--space-32) 0;
}
.services__header {
text-align: center;
margin-bottom: var(--space-32);
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.services__header h2 {
font-size: var(--font-size-3xl);
color: var(--blubooks-dark-1);
margin-bottom: var(--space-16);
}
.services__header p {
font-size: var(--font-size-lg);
color: var(--color-text-secondary);
}
.services__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: var(--space-24);
max-width: 1200px;
margin: 0 auto;
}
.service-card {
background: var(--blubooks-white);
padding: var(--space-24);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
transition: all var(--duration-normal) var(--ease-standard);
border-top: 4px solid var(--blubooks-light-1);
border: 1px solid rgba(130, 181, 193, 0.2);
}
.service-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-lg);
border-color: var(--blubooks-light-1);
}
.service-card h3 {
color: var(--blubooks-dark-1);
font-size: var(--font-size-xl);
margin-bottom: var(--space-12);
}
.service-card p {
color: var(--color-text-secondary);
line-height: var(--line-height-normal);
margin: 0;
}
/* Footer */
.footer {
background: linear-gradient(135deg, var(--blubooks-dark-1) 0%, var(--blubooks-dark-2) 100%);
color: var(--blubooks-white);
padding: var(--space-32) 0 var(--space-16) 0;
}
.footer__content {
display: grid;
grid-template-columns: 2fr 1fr;
gap: var(--space-32);
margin-bottom: var(--space-32);
}
.footer__logo {
font-size: var(--font-size-2xl);
color: var(--blubooks-light-2);
margin-bottom: var(--space-8);
}
.footer__tagline {
font-size: var(--font-size-md);
color: rgba(188, 230, 245, 0.8);
margin-bottom: var(--space-16);
font-weight: var(--font-weight-medium);
}
.footer__brand p {
color: var(--blubooks-text-light);
line-height: var(--line-height-normal);
}
.footer__contact h4 {
color: var(--blubooks-light-2);
margin-bottom: var(--space-16);
}
.contact-info p {
margin-bottom: var(--space-8);
color: var(--blubooks-text-light);
}
.contact-info a {
color: var(--blubooks-light-2);
text-decoration: none;
}
.contact-info a:hover {
color: var(--blubooks-white);
text-decoration: underline;
}
.footer__bottom {
text-align: center;
padding-top: var(--space-16);
border-top: 1px solid rgba(130, 181, 193, 0.3);
color: rgba(255, 255, 255, 0.7);
font-size: var(--font-size-sm);
}
/* Responsive Design */
@media (max-width: 768px) {
.nav__list {
display: none;
position: absolute;
top: 100%;
left: 0;
right: 0;
background: var(--blubooks-dark-2);
flex-direction: column;
padding: var(--space-16);
gap: var(--space-16);
box-shadow: var(--shadow-lg);
}
.nav__list.active {
display: flex;
}
.nav__toggle {
display: flex;
}
.hero__title {
font-size: var(--font-size-3xl);
}
.hero__subtitle {
font-size: var(--font-size-lg);
}
.blog-content__text {
font-size: var(--font-size-md);
}
.intro-text {
font-size: var(--font-size-lg);
}
.cta-buttons {
flex-direction: column;
align-items: center;
}
.footer__content {
grid-template-columns: 1fr;
gap: var(--space-24);
}
.services__grid {
grid-template-columns: 1fr;
}
.hero__meta {
flex-direction: column;
gap: var(--space-8);
}
}
@media (max-width: 480px) {
.hero {
padding: var(--space-24) 0;
}
.hero__title {
font-size: var(--font-size-2xl);
}
.cta-section {
padding: var(--space-24);
}
.final-cta {
padding: var(--space-24);
}
.service-card {
padding: var(--space-16);
}
.blog-content {
padding: var(--space-24) 0;
}
.featured-image {
padding: var(--space-24) 0;
}
.services {
padding: var(--space-24) 0;
}
.about {
padding: var(--space-24) 0;
}
}
/* Smooth scrolling */
html {
scroll-behavior: smooth;
}
/* Focus styles for accessibility */
.btn:focus-visible {
box-shadow: var(--focus-ring);
}
.nav__link:focus-visible {
outline: 2px solid var(--blubooks-light-2);
outline-offset: 2px;
border-radius: var(--radius-sm);
}
/* Progress bar for scroll indicator */
.scroll-progress {
position: fixed;
top: 0;
left: 0;
width: 0%;
height: 3px;
background: linear-gradient(90deg, var(--blubooks-light-1), var(--blubooks-light-2));
z-index: 9999;
transition: width 0.3s ease;
}
/* Loading animation for images */
img {
transition: opacity 0.3s ease;
}

All articles
eCommerce
From Followers to Finances: A Creator's Guide to Keeping Those Books Beautiful
Blubooks author
%201.png)
July 31, 2025

Hey there, amazing creators! 👋 You've mastered the art of engaging your audience, crafting killer content, and building your personal brand. Your subscriber count is growing, the views are rolling in, and those brand deals are finally starting to land in your inbox. But here's the million-dollar question (hopefully literally, one day): Do you understand the importance of keeping your books in order now that you have an income from creating content?
Let me break this down in creator-speak. Remember that feeling when you first hit 1,000 subscribers? That's the same thrill we accountants get when everything balances perfectly at the end of the month. (Okay, maybe we need to get out more, but stay with me here!)
You see, content creation isn't just about the perfect lighting or nailing that trending audio. As your channel grows, you're essentially running a small business. Those sponsorship payments, affiliate commissions, platform revenues, and merchandise sales? They're all part of your growing empire, and they need proper management.
Think of accounting like post-production for your finances. Just as you wouldn't upload raw, unedited footage, you shouldn't leave your finances unorganized and unoptimized. Our accounting services are specifically designed for content creators like you, because we understand that your income sources are as diverse as your content strategy.
Here's what we bring to your creator journey:
We'll help you understand which expenses are tax-deductible (yes, that ring light and editing software count!). We'll organize your multiple revenue streams so you can clearly see what's working and what's not - think of it as analytics, but for your money. Plus, we'll ensure you're prepared for tax season, so you can focus on creating content instead of cramming receipts into a shoebox on April 14th.
The best part? We speak your language. We understand the unique challenges of creator economics, from handling TikTok revenues to managing international brand collaboration payments. Think of us as your financial co-creators, working behind the scenes to make your business as polished as your content.
Remember how overwhelming it felt when you first started creating content? But you learned, adapted, and thrived. Managing your finances might feel the same way now, but that's exactly why we're here. We'll handle the numbers while you handle the narratives.
Ready to level up your creator business? Let's collaborate on making your finances as engaging as your content (well, almost). Because while you're busy building your community, someone needs to make sure your business foundation is just as strong as your engagement rates.
Contact the Blubooks team today, and let's start writing your financial success story. After all, the only numbers you should be worried about are your view counts and subscriber growth - leave the rest to us!
Your Business is Global. Your Accounting should be too.
Sign up today to speak with one of our accountants and learn how we can take take care of your financials.
Get started