first
This commit is contained in:
@@ -0,0 +1,526 @@
|
||||
@import "tailwindcss";
|
||||
@plugin 'tailwindcss-animate';
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@utility container {
|
||||
margin-inline: auto;
|
||||
padding-inline: 2rem;
|
||||
@media (width >= --theme(--breakpoint-sm)) {
|
||||
max-width: none;
|
||||
}
|
||||
@media (width >= 1400px) {
|
||||
max-width: 1400px;
|
||||
}
|
||||
}
|
||||
|
||||
@theme {
|
||||
/* Duck Landing Page Colors */
|
||||
--color-duck-yellow: #F4C430;
|
||||
--color-duck-orange: #EA580C;
|
||||
--color-duck-teal: #0891B2;
|
||||
--color-duck-forest: #166534;
|
||||
--color-duck-dark: #14532D;
|
||||
--color-duck-beige: #E7D4B5;
|
||||
|
||||
--color-border: hsl(var(--border));
|
||||
--color-input: hsl(var(--input));
|
||||
--color-ring: hsl(var(--ring));
|
||||
--color-background: hsl(var(--background));
|
||||
--color-foreground: hsl(var(--foreground));
|
||||
|
||||
--color-brand: hsl(var(--brand));
|
||||
--color-brand-foreground: hsl(var(--brand-foreground));
|
||||
--color-brand-muted: hsl(var(--brand-muted));
|
||||
|
||||
--color-primary: hsl(var(--primary));
|
||||
--color-primary-foreground: hsl(var(--primary-foreground));
|
||||
|
||||
--color-secondary: hsl(var(--secondary));
|
||||
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
||||
|
||||
--color-destructive: hsl(var(--destructive));
|
||||
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
||||
|
||||
--color-success: hsl(var(--success));
|
||||
--color-success-foreground: hsl(var(--success-foreground));
|
||||
|
||||
--color-warning: hsl(var(--warning));
|
||||
--color-warning-foreground: hsl(var(--warning-foreground));
|
||||
|
||||
--color-muted: hsl(var(--muted));
|
||||
--color-muted-foreground: hsl(var(--muted-foreground));
|
||||
|
||||
--color-accent: hsl(var(--accent));
|
||||
--color-accent-foreground: hsl(var(--accent-foreground));
|
||||
|
||||
--color-popover: hsl(var(--popover));
|
||||
--color-popover-foreground: hsl(var(--popover-foreground));
|
||||
|
||||
--color-card: hsl(var(--card));
|
||||
--color-card-foreground: hsl(var(--card-foreground));
|
||||
|
||||
--color-sidebar: hsl(var(--sidebar-background));
|
||||
--color-sidebar-foreground: hsl(var(--sidebar-foreground));
|
||||
--color-sidebar-primary: hsl(var(--sidebar-primary));
|
||||
--color-sidebar-primary-foreground: hsl(var(--sidebar-primary-foreground));
|
||||
--color-sidebar-accent: hsl(var(--sidebar-accent));
|
||||
--color-sidebar-accent-foreground: hsl(var(--sidebar-accent-foreground));
|
||||
--color-sidebar-border: hsl(var(--sidebar-border));
|
||||
--color-sidebar-ring: hsl(var(--sidebar-ring));
|
||||
|
||||
--color-cta: hsl(var(--cta));
|
||||
--color-cta-foreground: hsl(var(--cta-foreground));
|
||||
|
||||
--color-ctahover: hsl(var(--ctahover));
|
||||
|
||||
--color-naturegreen: hsl(var(--naturegreen));
|
||||
--color-naturegreen-foreground: hsl(var(--naturegreen-foreground));
|
||||
|
||||
--radius-lg: var(--radius);
|
||||
--radius-md: calc(var(--radius) - 2px);
|
||||
--radius-sm: calc(var(--radius) - 4px);
|
||||
|
||||
--animate-accordion-down: accordion-down 0.2s ease-out forwards;
|
||||
--animate-accordion-up: accordion-up 0.2s ease-out forwards;
|
||||
|
||||
@keyframes accordion-down {
|
||||
from {
|
||||
height: 0;
|
||||
}
|
||||
to {
|
||||
height: var(--radix-accordion-content-height);
|
||||
}
|
||||
}
|
||||
@keyframes accordion-up {
|
||||
from {
|
||||
height: var(--radix-accordion-content-height);
|
||||
}
|
||||
to {
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
The default border color has changed to `currentcolor` in Tailwind CSS v4,
|
||||
so we've added these compatibility styles to make sure everything still
|
||||
looks the same as it did with Tailwind CSS v3.
|
||||
|
||||
If we ever want to remove these styles, we need to add an explicit border
|
||||
color utility to any element that depends on these defaults.
|
||||
*/
|
||||
@layer base {
|
||||
*,
|
||||
::after,
|
||||
::before,
|
||||
::backdrop,
|
||||
::file-selector-button {
|
||||
border-color: var(--color-gray-200, currentcolor);
|
||||
}
|
||||
}
|
||||
|
||||
/* Definition of the design system. All colors, gradients, fonts, etc should be defined here.
|
||||
All colors MUST be HSL.
|
||||
*/
|
||||
|
||||
@layer base {
|
||||
:root {
|
||||
--cta: 211 74.77% 45.58%;
|
||||
--cta-foreground: 0 0% 100%;
|
||||
|
||||
--naturegreen: 145 79% 38%;
|
||||
--naturegreen-foreground: 0 0% 100%;
|
||||
|
||||
--background: 0 0% 100%;
|
||||
--foreground: 222.2 84% 4.9%;
|
||||
|
||||
--card: 0 0% 100%;
|
||||
--card-foreground: 222.2 84% 4.9%;
|
||||
|
||||
--popover: 0 0% 100%;
|
||||
--popover-foreground: 222.2 84% 4.9%;
|
||||
|
||||
--primary: 222.2 47.4% 11.2%;
|
||||
--primary-foreground: 210 40% 98%;
|
||||
|
||||
--secondary: 210 40% 96.1%;
|
||||
--secondary-foreground: 222.2 47.4% 11.2%;
|
||||
|
||||
--muted: 210 40% 96.1%;
|
||||
--muted-foreground: 215.4 16.3% 46.9%;
|
||||
|
||||
--accent: 211 74.77% 45.58%;
|
||||
--accent-foreground: 0 0% 0%;
|
||||
|
||||
--destructive: 0 84.2% 60.2%;
|
||||
--destructive-foreground: 210 40% 98%;
|
||||
|
||||
--border: 214.3 31.8% 91.4%;
|
||||
--input: 214.3 31.8% 91.4%;
|
||||
--ring: 222.2 84% 4.9%;
|
||||
|
||||
--radius: 0.5rem;
|
||||
|
||||
/* Chart gradients */
|
||||
--chart-primary: 211 82% 64%;
|
||||
--chart-secondary: 211 82% 84%;
|
||||
|
||||
/* Status colors */
|
||||
--status-success: 142 76% 36%;
|
||||
--status-warning: 43 96% 56%;
|
||||
--status-in-progress: 211 82% 64%;
|
||||
|
||||
--sidebar-background: 0 0% 98%;
|
||||
--sidebar-foreground: 240 5.3% 26.1%;
|
||||
--sidebar-primary: 240 5.9% 10%;
|
||||
--sidebar-primary-foreground: 0 0% 98%;
|
||||
--sidebar-accent: 240 4.8% 95.9%;
|
||||
--sidebar-accent-foreground: 240 5.9% 10%;
|
||||
--sidebar-border: 220 13% 91%;
|
||||
--sidebar-ring: 217.2 91.2% 59.8%;
|
||||
|
||||
/* Hover Effect */
|
||||
--ctahover: 211 91.53% 34.82%;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: 222.2 84% 4.9%;
|
||||
--foreground: 210 40% 98%;
|
||||
|
||||
--card: 222.2 84% 4.9%;
|
||||
--card-foreground: 210 40% 98%;
|
||||
|
||||
--popover: 222.2 84% 4.9%;
|
||||
--popover-foreground: 210 40% 98%;
|
||||
|
||||
--primary: 210 40% 98%;
|
||||
--primary-foreground: 222.2 47.4% 11.2%;
|
||||
|
||||
--secondary: 217.2 32.6% 17.5%;
|
||||
--secondary-foreground: 210 40% 98%;
|
||||
|
||||
--muted: 217.2 32.6% 17.5%;
|
||||
--muted-foreground: 215 20.2% 65.1%;
|
||||
|
||||
--accent: 211 82% 64%;
|
||||
--accent-foreground: 0 0% 0%;
|
||||
|
||||
--destructive: 0 62.8% 30.6%;
|
||||
--destructive-foreground: 210 40% 98%;
|
||||
|
||||
--border: 217.2 32.6% 17.5%;
|
||||
--input: 217.2 32.6% 17.5%;
|
||||
--ring: 212.7 26.8% 83.9%;
|
||||
|
||||
/* Chart gradients */
|
||||
--chart-primary: 211 82% 64%;
|
||||
--chart-secondary: 211 82% 84%;
|
||||
|
||||
/* Status colors */
|
||||
--status-success: 142 76% 36%;
|
||||
--status-warning: 43 96% 56%;
|
||||
--status-in-progress: 211 82% 64%;
|
||||
|
||||
--sidebar-background: 240 5.9% 10%;
|
||||
--sidebar-foreground: 240 4.8% 95.9%;
|
||||
--sidebar-primary: 224.3 76.3% 48%;
|
||||
--sidebar-primary-foreground: 0 0% 100%;
|
||||
--sidebar-accent: 240 3.7% 15.9%;
|
||||
--sidebar-accent-foreground: 240 4.8% 95.9%;
|
||||
--sidebar-border: 240 3.7% 15.9%;
|
||||
--sidebar-ring: 217.2 91.2% 59.8%;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border;
|
||||
}
|
||||
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
||||
|
||||
[data-sonner-toaster] {
|
||||
z-index: 700 !important;
|
||||
}
|
||||
|
||||
/* File Browser — Context menu hover behavior */
|
||||
.file-grid:has([data-state="open"]) [data-file-item]:not([data-state="open"]) {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.file-grid:has([data-state="open"]) [data-file-item]:not([data-state="open"]) .file-item-ellipsis {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
.file-grid [data-file-item][data-state="open"] .file-item-ellipsis {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* File Viewer — Markdown Prose */
|
||||
.file-viewer-md {
|
||||
color: #14532d;
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.75;
|
||||
}
|
||||
|
||||
.file-viewer-md h1 {
|
||||
font-size: 2em;
|
||||
font-weight: 700;
|
||||
margin: 1.5em 0 0.5em;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 2px solid rgba(20, 83, 45, 0.12);
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.file-viewer-md h2 {
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
margin: 1.4em 0 0.4em;
|
||||
padding-bottom: 0.25em;
|
||||
border-bottom: 1px solid rgba(20, 83, 45, 0.08);
|
||||
}
|
||||
|
||||
.file-viewer-md h3 {
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
margin: 1.2em 0 0.4em;
|
||||
}
|
||||
|
||||
.file-viewer-md h4, .file-viewer-md h5, .file-viewer-md h6 {
|
||||
font-size: 1.05em;
|
||||
font-weight: 600;
|
||||
margin: 1em 0 0.3em;
|
||||
}
|
||||
|
||||
.file-viewer-md p {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
|
||||
.file-viewer-md a {
|
||||
color: #0891b2;
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
|
||||
.file-viewer-md a:hover {
|
||||
color: #0e7490;
|
||||
}
|
||||
|
||||
.file-viewer-md strong {
|
||||
font-weight: 600;
|
||||
color: #14532d;
|
||||
}
|
||||
|
||||
.file-viewer-md blockquote {
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
border-left: 3px solid #0891b2;
|
||||
background: rgba(8, 145, 178, 0.05);
|
||||
border-radius: 0 0.5rem 0.5rem 0;
|
||||
color: #166534;
|
||||
}
|
||||
|
||||
.file-viewer-md ul, .file-viewer-md ol {
|
||||
margin: 0.75em 0;
|
||||
padding-left: 1.75em;
|
||||
}
|
||||
|
||||
.file-viewer-md li {
|
||||
margin: 0.25em 0;
|
||||
}
|
||||
|
||||
.file-viewer-md li::marker {
|
||||
color: #0891b2;
|
||||
}
|
||||
|
||||
.file-viewer-md hr {
|
||||
border: none;
|
||||
height: 1px;
|
||||
background: rgba(20, 83, 45, 0.12);
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
.file-viewer-md table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.file-viewer-md th {
|
||||
background: rgba(8, 145, 178, 0.08);
|
||||
font-weight: 600;
|
||||
text-align: left;
|
||||
padding: 0.5em 0.75em;
|
||||
border: 1px solid rgba(20, 83, 45, 0.12);
|
||||
}
|
||||
|
||||
.file-viewer-md td {
|
||||
padding: 0.5em 0.75em;
|
||||
border: 1px solid rgba(20, 83, 45, 0.08);
|
||||
}
|
||||
|
||||
.file-viewer-md tr:nth-child(even) {
|
||||
background: rgba(20, 83, 45, 0.02);
|
||||
}
|
||||
|
||||
.file-viewer-md img {
|
||||
max-width: 100%;
|
||||
border-radius: 0.5rem;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.file-viewer-md input[type="checkbox"] {
|
||||
accent-color: #0891b2;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
/* Skills — Markdown Prose */
|
||||
.skill-md {
|
||||
color: #14532d;
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.75;
|
||||
}
|
||||
|
||||
.skill-md h1 {
|
||||
font-size: 2em;
|
||||
font-weight: 700;
|
||||
margin: 1.5em 0 0.5em;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 2px solid rgba(20, 83, 45, 0.12);
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.skill-md h2 {
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
margin: 1.4em 0 0.4em;
|
||||
padding-bottom: 0.25em;
|
||||
border-bottom: 1px solid rgba(20, 83, 45, 0.08);
|
||||
}
|
||||
|
||||
.skill-md h3 {
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
margin: 1.2em 0 0.4em;
|
||||
}
|
||||
|
||||
.skill-md h4, .skill-md h5, .skill-md h6 {
|
||||
font-size: 1.05em;
|
||||
font-weight: 600;
|
||||
margin: 1em 0 0.3em;
|
||||
}
|
||||
|
||||
.skill-md p {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
|
||||
.skill-md a {
|
||||
color: #0891b2;
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
|
||||
.skill-md a:hover {
|
||||
color: #0e7490;
|
||||
}
|
||||
|
||||
.skill-md strong {
|
||||
font-weight: 600;
|
||||
color: #14532d;
|
||||
}
|
||||
|
||||
.skill-md blockquote {
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
border-left: 3px solid #0891b2;
|
||||
background: rgba(8, 145, 178, 0.05);
|
||||
border-radius: 0 0.5rem 0.5rem 0;
|
||||
color: #166534;
|
||||
}
|
||||
|
||||
.skill-md ul, .skill-md ol {
|
||||
margin: 0.75em 0;
|
||||
padding-left: 1.75em;
|
||||
}
|
||||
|
||||
.skill-md li {
|
||||
margin: 0.25em 0;
|
||||
}
|
||||
|
||||
.skill-md li::marker {
|
||||
color: #0891b2;
|
||||
}
|
||||
|
||||
.skill-md code {
|
||||
padding: 0.15em 0.4em;
|
||||
border-radius: 0.25rem;
|
||||
background: rgba(8, 145, 178, 0.1);
|
||||
color: #0891b2;
|
||||
font-size: 0.85em;
|
||||
font-family: ui-monospace, monospace;
|
||||
}
|
||||
|
||||
.skill-md pre {
|
||||
margin: 1em 0;
|
||||
padding: 1em;
|
||||
border-radius: 0.5rem;
|
||||
background: #0d1117;
|
||||
overflow-x: auto;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.skill-md pre code {
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
background: none;
|
||||
color: #e6edf3;
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.skill-md hr {
|
||||
border: none;
|
||||
height: 1px;
|
||||
background: rgba(20, 83, 45, 0.12);
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
.skill-md table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.skill-md th {
|
||||
background: rgba(8, 145, 178, 0.08);
|
||||
font-weight: 600;
|
||||
text-align: left;
|
||||
padding: 0.5em 0.75em;
|
||||
border: 1px solid rgba(20, 83, 45, 0.12);
|
||||
}
|
||||
|
||||
.skill-md td {
|
||||
padding: 0.5em 0.75em;
|
||||
border: 1px solid rgba(20, 83, 45, 0.08);
|
||||
}
|
||||
|
||||
.skill-md tr:nth-child(even) {
|
||||
background: rgba(20, 83, 45, 0.02);
|
||||
}
|
||||
|
||||
.skill-md img {
|
||||
max-width: 100%;
|
||||
border-radius: 0.5rem;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.skill-md input[type="checkbox"] {
|
||||
accent-color: #0891b2;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
Reference in New Issue
Block a user