42861ea7fa
Multi-adapter mobile UI for AI coding assistants. Supports Claude Code, Codex CLI, and Gemini CLI through one interface. Features: - Real-time bidirectional sync via tmux + WebSocket - Cross-AI review (send one AI's output to another for review) - Multi-review tabs with minimize/expand - Push notifications (PWA) with smart session-aware filtering - Three-channel event system (hooks, file watcher, pane monitor) - Voice input, image paste, draft persistence - Terminal-native design (JetBrains Mono, dark theme, pixel art claw) - CLI with --adapter flag on every command - Zero-overhead fire-and-forget hooks
160 lines
3.7 KiB
CSS
160 lines
3.7 KiB
CSS
@import 'tailwindcss';
|
|
@plugin '@tailwindcss/typography';
|
|
|
|
@theme {
|
|
--color-bg: #09090b;
|
|
--color-surface: #18181b;
|
|
--color-surface-light: #27272a;
|
|
--color-border: #3f3f46;
|
|
--color-accent: #22c55e;
|
|
--color-accent-light: #4ade80;
|
|
--color-accent-glow: rgba(34, 197, 94, 0.15);
|
|
--color-user-bubble: rgba(5, 46, 22, 0.8);
|
|
--color-user-bubble-text: #4ade80;
|
|
--color-text: #fafafa;
|
|
--color-text-secondary: #a1a1aa;
|
|
--color-text-dim: #71717a;
|
|
--color-success: #22c55e;
|
|
--color-danger: #ef4444;
|
|
--color-warning: #eab308;
|
|
--color-surface-hover: #1f1f23;
|
|
--font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
background: var(--color-bg);
|
|
color: var(--color-text);
|
|
font-family: var(--font-mono);
|
|
font-size: 14px;
|
|
-webkit-font-smoothing: antialiased;
|
|
overscroll-behavior: none;
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% { background-position: 200% center; }
|
|
100% { background-position: -200% center; }
|
|
}
|
|
|
|
@keyframes blink {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0; }
|
|
}
|
|
|
|
@keyframes pulse-dot {
|
|
0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
|
|
40% { transform: scale(1); opacity: 1; }
|
|
}
|
|
|
|
.shimmer-text {
|
|
background: linear-gradient(90deg, #22c55e, #22d3ee, #a78bfa, #22c55e);
|
|
background-size: 200% auto;
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
background-clip: text;
|
|
animation: shimmer 2s linear infinite;
|
|
}
|
|
|
|
.cursor-blink::after {
|
|
content: '\258b';
|
|
animation: blink 1s step-end infinite;
|
|
color: var(--color-accent);
|
|
}
|
|
|
|
.typing-dot {
|
|
animation: pulse-dot 1.4s infinite ease-in-out both;
|
|
}
|
|
.typing-dot:nth-child(2) { animation-delay: 0.16s; }
|
|
.typing-dot:nth-child(3) { animation-delay: 0.32s; }
|
|
|
|
.safe-bottom {
|
|
padding-bottom: max(12px, env(safe-area-inset-bottom));
|
|
}
|
|
|
|
.safe-top {
|
|
padding-top: env(safe-area-inset-top);
|
|
}
|
|
|
|
.safe-x {
|
|
padding-left: env(safe-area-inset-left);
|
|
padding-right: env(safe-area-inset-right);
|
|
}
|
|
|
|
input, textarea, select {
|
|
font-size: 16px;
|
|
}
|
|
|
|
/* Review panel uses smaller text to fit the compact layout.
|
|
16px stays on main input to prevent iOS Safari auto-zoom. */
|
|
.review-panel-compact textarea {
|
|
font-size: 14px;
|
|
}
|
|
|
|
::-webkit-scrollbar { width: 4px; }
|
|
::-webkit-scrollbar-track { background: transparent; }
|
|
::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 2px; }
|
|
|
|
/* ClawTap loading — SVG pixel claw walks right, pincers pivot from root */
|
|
.claw-svg {
|
|
filter: drop-shadow(0 0 4px rgba(34, 197, 94, 0.3));
|
|
}
|
|
|
|
.claw-pincer-top {
|
|
transform-origin: 3px 2px;
|
|
animation: claw-pivot-top 0.4s ease-in-out infinite;
|
|
}
|
|
.claw-pincer-bot {
|
|
transform-origin: 3px 4px;
|
|
animation: claw-pivot-bot 0.4s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes claw-pivot-top {
|
|
0%, 100% { transform: rotate(-12deg); }
|
|
50% { transform: rotate(0deg); }
|
|
}
|
|
@keyframes claw-pivot-bot {
|
|
0%, 100% { transform: rotate(12deg); }
|
|
50% { transform: rotate(0deg); }
|
|
}
|
|
|
|
.claw-walk {
|
|
animation: claw-walk 2.2s linear infinite;
|
|
}
|
|
@keyframes claw-walk {
|
|
0% { transform: translateX(-24px); }
|
|
100% { transform: translateX(8px); }
|
|
}
|
|
|
|
.claw-dot {
|
|
animation: claw-dot-eat 2.2s ease-in-out infinite;
|
|
}
|
|
@keyframes claw-dot-eat {
|
|
0%, 50% { opacity: 0.5; transform: scale(1); }
|
|
65% { opacity: 0; transform: scale(0); }
|
|
80%, 100% { opacity: 0.5; transform: scale(1); }
|
|
}
|
|
|
|
/* ClawTap logo float */
|
|
.claw-float {
|
|
animation: claw-float 3s ease-in-out infinite;
|
|
}
|
|
@keyframes claw-float {
|
|
0%, 100% { transform: translateY(0); }
|
|
50% { transform: translateY(-6px); }
|
|
}
|
|
|
|
/* Terminal glow effect */
|
|
.text-glow {
|
|
text-shadow: 0 0 8px var(--color-accent-glow);
|
|
}
|
|
|
|
@keyframes slideUp {
|
|
from { transform: translateY(100%); }
|
|
to { transform: translateY(0); }
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|