mirror of
https://github.com/backnotprop/plannotator.git
synced 2026-09-14 14:17:26 +08:00
92d4f73b66
A React-based annotation tool that intercepts Claude Code's ExitPlanMode to provide visual plan review with collaborative features. Features: - Markdown plan rendering with syntax highlighting - Text selection annotations (delete, replace, insert, comment) - Redline mode for quick deletion marking - URL-based sharing via compressed hash (no server storage) - Tater identity system for anonymous collaboration - Export to diff format - Dark/light theme support - Tater sprite easter egg 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
214 lines
5.6 KiB
CSS
214 lines
5.6 KiB
CSS
@import "tailwindcss";
|
|
|
|
:root {
|
|
--background: oklch(0.13 0.02 260);
|
|
--foreground: oklch(0.95 0.01 260);
|
|
--card: oklch(0.16 0.02 260);
|
|
--card-foreground: oklch(0.95 0.01 260);
|
|
--popover: oklch(0.18 0.025 260);
|
|
--popover-foreground: oklch(0.95 0.01 260);
|
|
--primary: oklch(0.75 0.18 280);
|
|
--primary-foreground: oklch(0.13 0.02 260);
|
|
--secondary: oklch(0.65 0.15 180);
|
|
--secondary-foreground: oklch(0.13 0.02 260);
|
|
--muted: oklch(0.22 0.02 260);
|
|
--muted-foreground: oklch(0.65 0.02 260);
|
|
--accent: oklch(0.70 0.20 60);
|
|
--accent-foreground: oklch(0.13 0.02 260);
|
|
--destructive: oklch(0.65 0.22 25);
|
|
--destructive-foreground: oklch(0.98 0 0);
|
|
--border: oklch(0.28 0.02 260);
|
|
--input: oklch(0.22 0.02 260);
|
|
--ring: oklch(0.75 0.18 280);
|
|
|
|
--font-sans: 'Inter', system-ui, sans-serif;
|
|
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
|
|
--radius: 0.75rem;
|
|
}
|
|
|
|
.light {
|
|
--background: oklch(0.97 0.005 260);
|
|
--foreground: oklch(0.18 0.02 260);
|
|
--card: oklch(1 0 0);
|
|
--card-foreground: oklch(0.18 0.02 260);
|
|
--popover: oklch(1 0 0);
|
|
--popover-foreground: oklch(0.18 0.02 260);
|
|
--primary: oklch(0.50 0.25 280);
|
|
--primary-foreground: oklch(1 0 0);
|
|
--secondary: oklch(0.50 0.18 180);
|
|
--secondary-foreground: oklch(1 0 0);
|
|
--muted: oklch(0.92 0.01 260);
|
|
--muted-foreground: oklch(0.40 0.02 260);
|
|
--accent: oklch(0.60 0.22 50);
|
|
--accent-foreground: oklch(0.18 0.02 260);
|
|
--destructive: oklch(0.50 0.25 25);
|
|
--destructive-foreground: oklch(1 0 0);
|
|
--border: oklch(0.88 0.01 260);
|
|
--input: oklch(0.92 0.01 260);
|
|
--ring: oklch(0.50 0.25 280);
|
|
}
|
|
|
|
@theme inline {
|
|
--color-background: var(--background);
|
|
--color-foreground: var(--foreground);
|
|
--color-card: var(--card);
|
|
--color-card-foreground: var(--card-foreground);
|
|
--color-popover: var(--popover);
|
|
--color-popover-foreground: var(--popover-foreground);
|
|
--color-primary: var(--primary);
|
|
--color-primary-foreground: var(--primary-foreground);
|
|
--color-secondary: var(--secondary);
|
|
--color-secondary-foreground: var(--secondary-foreground);
|
|
--color-muted: var(--muted);
|
|
--color-muted-foreground: var(--muted-foreground);
|
|
--color-accent: var(--accent);
|
|
--color-accent-foreground: var(--accent-foreground);
|
|
--color-destructive: var(--destructive);
|
|
--color-destructive-foreground: var(--destructive-foreground);
|
|
--color-border: var(--border);
|
|
--color-input: var(--input);
|
|
--color-ring: var(--ring);
|
|
--font-sans: var(--font-sans);
|
|
--font-mono: var(--font-mono);
|
|
--radius-sm: calc(var(--radius) - 4px);
|
|
--radius-md: calc(var(--radius) - 2px);
|
|
--radius-lg: var(--radius);
|
|
--radius-xl: calc(var(--radius) + 4px);
|
|
}
|
|
|
|
* {
|
|
border-color: var(--border);
|
|
}
|
|
|
|
body {
|
|
font-family: var(--font-sans);
|
|
background: var(--background);
|
|
color: var(--foreground);
|
|
font-feature-settings: "ss01", "ss02", "cv01";
|
|
}
|
|
|
|
/* Subtle grid background */
|
|
.bg-grid {
|
|
background-image:
|
|
linear-gradient(to right, oklch(0.25 0.02 260 / 0.5) 1px, transparent 1px),
|
|
linear-gradient(to bottom, oklch(0.25 0.02 260 / 0.5) 1px, transparent 1px);
|
|
background-size: 24px 24px;
|
|
}
|
|
|
|
.light .bg-grid {
|
|
background-image:
|
|
linear-gradient(to right, oklch(0.90 0.01 260 / 0.6) 1px, transparent 1px),
|
|
linear-gradient(to bottom, oklch(0.90 0.01 260 / 0.6) 1px, transparent 1px);
|
|
}
|
|
|
|
/* Glow effects */
|
|
.glow-primary {
|
|
box-shadow: 0 0 20px oklch(0.75 0.18 280 / 0.15), 0 0 40px oklch(0.75 0.18 280 / 0.05);
|
|
}
|
|
|
|
.glow-sm {
|
|
box-shadow: 0 0 10px oklch(0.75 0.18 280 / 0.1);
|
|
}
|
|
|
|
/* Custom scrollbar */
|
|
::-webkit-scrollbar { width: 6px; height: 6px; }
|
|
::-webkit-scrollbar-track { background: transparent; }
|
|
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
|
|
::-webkit-scrollbar-thumb:hover { background: var(--muted-foreground); }
|
|
|
|
/* Code blocks */
|
|
pre code.hljs {
|
|
display: block;
|
|
padding: 1rem;
|
|
border-radius: var(--radius);
|
|
background: var(--muted) !important;
|
|
font-size: 0.8125rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
/* Light mode code - override hljs dark theme */
|
|
.light pre code.hljs {
|
|
color: oklch(0.25 0.02 260) !important;
|
|
}
|
|
|
|
.light .hljs-keyword,
|
|
.light .hljs-selector-tag,
|
|
.light .hljs-built_in,
|
|
.light .hljs-name,
|
|
.light .hljs-tag {
|
|
color: oklch(0.45 0.25 280) !important;
|
|
}
|
|
|
|
.light .hljs-string,
|
|
.light .hljs-title,
|
|
.light .hljs-section,
|
|
.light .hljs-attribute,
|
|
.light .hljs-literal,
|
|
.light .hljs-template-tag,
|
|
.light .hljs-template-variable,
|
|
.light .hljs-type {
|
|
color: oklch(0.45 0.18 150) !important;
|
|
}
|
|
|
|
.light .hljs-comment,
|
|
.light .hljs-quote {
|
|
color: oklch(0.55 0.02 260) !important;
|
|
font-style: italic;
|
|
}
|
|
|
|
.light .hljs-number,
|
|
.light .hljs-symbol,
|
|
.light .hljs-bullet {
|
|
color: oklch(0.50 0.20 50) !important;
|
|
}
|
|
|
|
.light .hljs-attr,
|
|
.light .hljs-variable,
|
|
.light .hljs-template-variable,
|
|
.light .hljs-class .hljs-title,
|
|
.light .hljs-function {
|
|
color: oklch(0.45 0.20 280) !important;
|
|
}
|
|
|
|
/* Selection */
|
|
::selection {
|
|
background: oklch(0.75 0.18 280 / 0.3);
|
|
}
|
|
|
|
/* Smooth transitions */
|
|
* {
|
|
transition-property: color, background-color, border-color, box-shadow, opacity, transform;
|
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
transition-duration: 150ms;
|
|
}
|
|
|
|
/* Focus states */
|
|
:focus-visible {
|
|
outline: 2px solid var(--ring);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* Annotation highlights */
|
|
.annotation-highlight {
|
|
border-radius: 2px;
|
|
padding: 0 2px;
|
|
margin: 0 -2px;
|
|
}
|
|
|
|
.annotation-highlight.deletion {
|
|
background: oklch(0.65 0.22 25 / 0.25);
|
|
text-decoration: line-through;
|
|
text-decoration-color: var(--destructive);
|
|
text-decoration-thickness: 2px;
|
|
}
|
|
|
|
.annotation-highlight.comment {
|
|
background: oklch(0.70 0.20 60 / 0.2);
|
|
border-bottom: 2px solid var(--accent);
|
|
}
|
|
|
|
.annotation-highlight:hover {
|
|
filter: brightness(1.2);
|
|
cursor: pointer;
|
|
}
|