dragonflight/services/editor/apps/image/src/index.css
Zac b68f0c6aba feat(editor): integrate openreel-video as services/editor with MAM hooks
Vendored Augani/openreel-video (MIT) into services/editor and wired it to the MAM. Editor runs as its own container on port 47435. Library assets pull in via ?asset=<uuid>; render exports route back via POST /api/v1/upload/simple. Sidebar Editor link on every page; Edit button on every preview modal. See services/editor/INTEGRATION.md for the patch map.
2026-05-17 21:44:37 -04:00

188 lines
4.8 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 142.1 76.2% 36.3%;
--primary-foreground: 355.7 100% 97.3%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--muted: 240 4.8% 95.9%;
--muted-foreground: 240 3.8% 46.1%;
--accent: 240 4.8% 95.9%;
--accent-foreground: 240 5.9% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 240 5.9% 90%;
--input: 240 5.9% 90%;
--ring: 142.1 76.2% 36.3%;
--radius: 0.5rem;
--color-background-secondary: 250 250 250;
--color-background-tertiary: 245 245 245;
--color-background-elevated: 255 255 255;
--color-text-primary: 10 10 10;
--color-text-secondary: 115 115 115;
--color-text-muted: 163 163 163;
--color-border-hover: 212 212 212;
--color-border-active: 163 163 163;
}
.dark {
--background: 0 0% 7%;
--foreground: 0 0% 95%;
--card: 0 0% 9%;
--card-foreground: 0 0% 95%;
--popover: 0 0% 9%;
--popover-foreground: 0 0% 95%;
--primary: 142.1 70.6% 45.3%;
--primary-foreground: 144.9 80.4% 10%;
--secondary: 240 3.7% 15.9%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 15%;
--muted-foreground: 240 5% 64.9%;
--accent: 0 0% 15%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 50.6%;
--destructive-foreground: 0 0% 98%;
--border: 240 3.7% 20%;
--input: 240 3.7% 20%;
--ring: 142.1 70.6% 45.3%;
--color-background-secondary: 23 23 23;
--color-background-tertiary: 38 38 38;
--color-background-elevated: 32 32 32;
--color-text-primary: 250 250 250;
--color-text-secondary: 163 163 163;
--color-text-muted: 115 115 115;
--color-border-hover: 64 64 64;
--color-border-active: 82 82 82;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
font-feature-settings: "rlig" 1, "calt" 1;
}
}
html, body, #root {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: hsl(var(--muted-foreground) / 0.3);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: hsl(var(--muted-foreground) / 0.5);
}
::selection {
background: hsl(var(--primary) / 0.3);
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type="number"] {
-moz-appearance: textfield;
}
.canvas-container {
background-image:
linear-gradient(45deg, hsl(var(--muted)) 25%, transparent 25%),
linear-gradient(-45deg, hsl(var(--muted)) 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, hsl(var(--muted)) 75%),
linear-gradient(-45deg, transparent 75%, hsl(var(--muted)) 75%);
background-size: 20px 20px;
background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
}
.layer-drag-ghost {
opacity: 0.8;
background: hsl(var(--primary) / 0.2);
border: 2px dashed hsl(var(--primary));
border-radius: var(--radius);
}
.resize-handle {
width: 10px;
height: 10px;
background: white;
border: 2px solid hsl(var(--primary));
border-radius: 2px;
position: absolute;
cursor: pointer;
}
.resize-handle-nw { top: -5px; left: -5px; cursor: nwse-resize; }
.resize-handle-n { top: -5px; left: 50%; transform: translateX(-50%); cursor: ns-resize; }
.resize-handle-ne { top: -5px; right: -5px; cursor: nesw-resize; }
.resize-handle-e { top: 50%; right: -5px; transform: translateY(-50%); cursor: ew-resize; }
.resize-handle-se { bottom: -5px; right: -5px; cursor: nwse-resize; }
.resize-handle-s { bottom: -5px; left: 50%; transform: translateX(-50%); cursor: ns-resize; }
.resize-handle-sw { bottom: -5px; left: -5px; cursor: nesw-resize; }
.resize-handle-w { top: 50%; left: -5px; transform: translateY(-50%); cursor: ew-resize; }
.rotation-handle {
width: 12px;
height: 12px;
background: white;
border: 2px solid hsl(var(--primary));
border-radius: 50%;
position: absolute;
top: -30px;
left: 50%;
transform: translateX(-50%);
cursor: grab;
}
.rotation-handle:active {
cursor: grabbing;
}
@keyframes pulse-selection {
0%, 100% { box-shadow: 0 0 0 2px hsl(var(--primary)); }
50% { box-shadow: 0 0 0 4px hsl(var(--primary) / 0.5); }
}
.selection-box {
border: 2px solid hsl(var(--primary));
animation: pulse-selection 2s ease-in-out infinite;
}