vibetunnel/web/src/input.css
2025-06-20 20:15:53 +02:00

749 lines
18 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
/* Global dark theme styles */
@layer base {
body {
@apply bg-dark-bg text-dark-text;
}
/* Default focus styles */
:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(0, 255, 136, 0.3);
}
}
/* Custom components */
@layer components {
/* Glowing terminal icon */
.terminal-icon {
@apply text-accent-green;
filter: drop-shadow(0 0 10px rgba(0, 255, 136, 0.6));
}
/* Input fields with glow effect */
.input-field {
@apply bg-dark-bg-secondary border border-dark-border rounded-lg px-4 py-3 text-dark-text w-full;
@apply transition-all duration-200 ease-in-out;
@apply hover:border-accent-green-darker focus:border-accent-green;
@apply focus:shadow-glow-green-sm;
}
/* Button styles */
.btn-primary {
@apply bg-accent-green text-dark-bg font-medium px-6 py-3 rounded-lg;
@apply transition-all duration-200 ease-in-out;
@apply hover:bg-accent-green-light hover:shadow-glow-green;
@apply active:scale-95;
}
.btn-secondary {
@apply border border-accent-green text-accent-green px-6 py-3 rounded-lg;
@apply transition-all duration-200 ease-in-out;
@apply hover:bg-accent-green hover:text-dark-bg hover:shadow-glow-green;
@apply active:scale-95;
}
.btn-ghost {
@apply text-dark-text-muted px-4 py-2 rounded-lg;
@apply transition-all duration-200 ease-in-out;
@apply hover:text-dark-text hover:bg-dark-bg-tertiary;
}
/* Card styles */
.card {
@apply bg-dark-bg-secondary border border-dark-border rounded-lg p-6;
@apply transition-all duration-200 ease-in-out;
@apply hover:border-accent-green-darker hover:shadow-glow-green-sm;
}
/* Quick start buttons */
.quick-start-btn {
@apply bg-dark-bg-tertiary border border-dark-border rounded-lg px-4 py-3 h-12;
@apply transition-all duration-200 ease-in-out text-dark-text-muted;
@apply hover:border-accent-green hover:text-accent-green hover:shadow-glow-green-sm;
@apply active:scale-95;
}
.quick-start-btn.active {
@apply bg-accent-green text-dark-bg border-accent-green shadow-glow-green-sm;
}
/* Modal backdrop */
.modal-backdrop {
@apply fixed inset-0 bg-black bg-opacity-80 z-40;
backdrop-filter: blur(4px);
}
/* Modal content */
.modal-content {
@apply bg-dark-bg-secondary border border-dark-border rounded-xl p-8;
@apply shadow-2xl shadow-black/50;
}
/* Labels */
.form-label {
@apply text-dark-text-muted text-sm font-medium mb-2 flex items-center gap-2;
}
}
/* Fira Code Variable Font */
@font-face {
font-family: 'Fira Code';
font-style: normal;
font-weight: 300 700;
font-display: swap;
src:
url('/fonts/FiraCode-VF.woff2') format('woff2-variations'),
url('/fonts/FiraCode-VF.ttf') format('truetype-variations');
font-variation-settings: 'wght' 400;
}
/* Hack Nerd Font */
@font-face {
font-family: 'Hack Nerd Font Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/fonts/HackNerdFontMono-Regular.ttf') format('truetype');
}
@font-face {
font-family: 'Hack Nerd Font Mono';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('/fonts/HackNerdFontMono-Bold.ttf') format('truetype');
}
/* Override Tailwind's font-mono to use Hack Nerd Font */
.font-mono {
font-family:
'Hack Nerd Font Mono', 'Fira Code', ui-monospace, SFMono-Regular, 'SF Mono', Consolas,
'Liberation Mono', Menlo, monospace !important;
}
/* Mobile scroll and touch behavior fixes */
html,
body {
overscroll-behavior: none;
touch-action: pan-x pan-y;
-webkit-overflow-scrolling: touch;
}
/* Prevent pull-to-refresh on mobile */
body {
overscroll-behavior-y: contain;
}
/* Terminal-specific touch handling */
.xterm {
touch-action: pan-y;
overscroll-behavior: none;
}
.xterm .xterm-viewport {
touch-action: pan-y;
overscroll-behavior-y: contain;
}
/* Fix XTerm text span touch scrolling issues */
.xterm .xterm-rows span {
touch-action: pan-y;
}
.xterm .xterm-screen {
touch-action: pan-y;
}
/* More aggressive fix for session cards (read-only snapshots) */
.session-preview .xterm .xterm-rows span {
pointer-events: none;
touch-action: pan-y;
}
/* Terminal container scroll prevention */
#terminal-container {
touch-action: pan-y;
overscroll-behavior: none;
}
/* Session cards - prevent pull-to-refresh */
.session-card {
overscroll-behavior: none;
}
/* App header - prevent pull-to-refresh when scrolling starts from header */
.app-header {
overscroll-behavior: none;
touch-action: pan-x pan-y;
}
/* XTerm terminal styling */
.xterm {
padding: 0 !important;
font-family:
'Hack Nerd Font Mono', 'Fira Code', ui-monospace, SFMono-Regular, 'SF Mono', Consolas,
'Liberation Mono', Menlo, monospace !important;
font-variant-ligatures: none;
font-feature-settings:
'liga' 0,
'clig' 0,
'calt' 0;
text-rendering: optimizeSpeed;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Terminal container styling */
.terminal-container {
color: #e4e4e4;
white-space: pre;
overflow: hidden;
background-color: #0a0a0a;
}
/* Terminal line styling */
.terminal-line {
display: block;
white-space: pre;
overflow: hidden;
}
/* Terminal character specific styling */
.terminal-char {
display: inline-block;
font-family: inherit;
font-variant-ligatures: none;
font-feature-settings: 'liga' 0;
white-space: pre;
}
/* Terminal text decoration support */
.terminal-char.bold {
font-weight: bold;
}
.terminal-char.italic {
font-style: italic;
}
.terminal-char.underline {
text-decoration: underline;
}
.terminal-char.dim {
opacity: 0.5;
}
.terminal-char.strikethrough {
text-decoration: line-through;
}
.terminal-char.overline {
text-decoration: overline;
}
.terminal-char.inverse {
filter: invert(1);
}
.terminal-char.invisible {
opacity: 0;
}
/* Cursor styling */
.terminal-char.cursor {
animation: cursor-blink 1s infinite;
}
@keyframes cursor-blink {
0%,
50% {
opacity: 1;
}
51%,
100% {
opacity: 0.3;
}
}
.xterm .xterm-viewport {
background-color: transparent !important;
}
/* Ensure terminal container has proper size */
#terminal-player,
#interactive-terminal {
min-height: 480px;
min-width: 640px;
width: 100%;
}
/* Terminal focus indicator */
.terminal-focused {
box-shadow: 0 0 0 2px #00ff88;
border-color: #00ff88 !important;
}
/* Keyboard capture indicator */
.keyboard-capture-indicator {
position: fixed;
top: 10px;
right: 10px;
background: rgba(0, 255, 136, 0.1);
border: 1px solid #00ff88;
color: #00ff88;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
z-index: 1000;
}
/* Force XTerm terminal to fit within session card bounds */
.session-preview .xterm {
min-width: unset !important;
min-height: unset !important;
max-width: 100% !important;
max-height: 100% !important;
width: 100% !important;
height: 100% !important;
overflow: hidden !important;
}
.session-preview .xterm .xterm-screen {
max-width: 100% !important;
max-height: 100% !important;
}
.session-preview .xterm .xterm-viewport {
overflow: hidden !important;
}
.xterm .xterm-helper-textarea {
opacity: 0 !important;
}
/* Terminal color palette - Bright colors for dark backgrounds */
:root {
--terminal-color-0: #000000;
--terminal-color-1: #f14c4c;
--terminal-color-2: #23d18b;
--terminal-color-3: #f5f543;
--terminal-color-4: #3b8eea;
--terminal-color-5: #d670d6;
--terminal-color-6: #29b8db;
--terminal-color-7: #e5e5e5;
--terminal-color-8: #666666;
--terminal-color-9: #ff6b6b;
--terminal-color-10: #5af78e;
--terminal-color-11: #f4f99d;
--terminal-color-12: #70a5ed;
--terminal-color-13: #d670d6;
--terminal-color-14: #5fb3d3;
--terminal-color-15: #ffffff;
--terminal-color-16: #000000;
--terminal-color-17: #00005f;
--terminal-color-18: #000087;
--terminal-color-19: #0000af;
--terminal-color-20: #0000d7;
--terminal-color-21: #0000ff;
--terminal-color-22: #005f00;
--terminal-color-23: #005f5f;
--terminal-color-24: #005f87;
--terminal-color-25: #005faf;
--terminal-color-26: #005fd7;
--terminal-color-27: #005fff;
--terminal-color-28: #008700;
--terminal-color-29: #00875f;
--terminal-color-30: #008787;
--terminal-color-31: #0087af;
--terminal-color-32: #0087d7;
--terminal-color-33: #0087ff;
--terminal-color-34: #00af00;
--terminal-color-35: #00af5f;
--terminal-color-36: #00af87;
--terminal-color-37: #00afaf;
--terminal-color-38: #00afd7;
--terminal-color-39: #00afff;
--terminal-color-40: #00d700;
--terminal-color-41: #00d75f;
--terminal-color-42: #00d787;
--terminal-color-43: #00d7af;
--terminal-color-44: #00d7d7;
--terminal-color-45: #00d7ff;
--terminal-color-46: #00ff00;
--terminal-color-47: #00ff5f;
--terminal-color-48: #00ff87;
--terminal-color-49: #00ffaf;
--terminal-color-50: #00ffd7;
--terminal-color-51: #00ffff;
--terminal-color-52: #5f0000;
--terminal-color-53: #5f005f;
--terminal-color-54: #5f0087;
--terminal-color-55: #5f00af;
--terminal-color-56: #5f00d7;
--terminal-color-57: #5f00ff;
--terminal-color-58: #5f5f00;
--terminal-color-59: #5f5f5f;
--terminal-color-60: #5f5f87;
--terminal-color-61: #5f5faf;
--terminal-color-62: #5f5fd7;
--terminal-color-63: #5f5fff;
--terminal-color-64: #5f8700;
--terminal-color-65: #5f875f;
--terminal-color-66: #5f8787;
--terminal-color-67: #5f87af;
--terminal-color-68: #5f87d7;
--terminal-color-69: #5f87ff;
--terminal-color-70: #5faf00;
--terminal-color-71: #5faf5f;
--terminal-color-72: #5faf87;
--terminal-color-73: #5fafaf;
--terminal-color-74: #5fafd7;
--terminal-color-75: #5fafff;
--terminal-color-76: #5fd700;
--terminal-color-77: #5fd75f;
--terminal-color-78: #5fd787;
--terminal-color-79: #5fd7af;
--terminal-color-80: #5fd7d7;
--terminal-color-81: #5fd7ff;
--terminal-color-82: #5fff00;
--terminal-color-83: #5fff5f;
--terminal-color-84: #5fff87;
--terminal-color-85: #5fffaf;
--terminal-color-86: #5fffd7;
--terminal-color-87: #5fffff;
--terminal-color-88: #870000;
--terminal-color-89: #87005f;
--terminal-color-90: #870087;
--terminal-color-91: #8700af;
--terminal-color-92: #8700d7;
--terminal-color-93: #8700ff;
--terminal-color-94: #875f00;
--terminal-color-95: #875f5f;
--terminal-color-96: #875f87;
--terminal-color-97: #875faf;
--terminal-color-98: #875fd7;
--terminal-color-99: #875fff;
--terminal-color-100: #878700;
--terminal-color-101: #87875f;
--terminal-color-102: #878787;
--terminal-color-103: #8787af;
--terminal-color-104: #8787d7;
--terminal-color-105: #8787ff;
--terminal-color-106: #87af00;
--terminal-color-107: #87af5f;
--terminal-color-108: #87af87;
--terminal-color-109: #87afaf;
--terminal-color-110: #87afd7;
--terminal-color-111: #87afff;
--terminal-color-112: #87d700;
--terminal-color-113: #87d75f;
--terminal-color-114: #87d787;
--terminal-color-115: #87d7af;
--terminal-color-116: #87d7d7;
--terminal-color-117: #87d7ff;
--terminal-color-118: #87ff00;
--terminal-color-119: #87ff5f;
--terminal-color-120: #87ff87;
--terminal-color-121: #87ffaf;
--terminal-color-122: #87ffd7;
--terminal-color-123: #87ffff;
--terminal-color-124: #af0000;
--terminal-color-125: #af005f;
--terminal-color-126: #af0087;
--terminal-color-127: #af00af;
--terminal-color-128: #af00d7;
--terminal-color-129: #af00ff;
--terminal-color-130: #af5f00;
--terminal-color-131: #af5f5f;
--terminal-color-132: #af5f87;
--terminal-color-133: #af5faf;
--terminal-color-134: #af5fd7;
--terminal-color-135: #af5fff;
--terminal-color-136: #af8700;
--terminal-color-137: #af875f;
--terminal-color-138: #af8787;
--terminal-color-139: #af87af;
--terminal-color-140: #af87d7;
--terminal-color-141: #af87ff;
--terminal-color-142: #afaf00;
--terminal-color-143: #afaf5f;
--terminal-color-144: #afaf87;
--terminal-color-145: #afafaf;
--terminal-color-146: #afafd7;
--terminal-color-147: #afafff;
--terminal-color-148: #afd700;
--terminal-color-149: #afd75f;
--terminal-color-150: #afd787;
--terminal-color-151: #afd7af;
--terminal-color-152: #afd7d7;
--terminal-color-153: #afd7ff;
--terminal-color-154: #afff00;
--terminal-color-155: #afff5f;
--terminal-color-156: #afff87;
--terminal-color-157: #afffaf;
--terminal-color-158: #afffd7;
--terminal-color-159: #afffff;
--terminal-color-160: #d70000;
--terminal-color-161: #d7005f;
--terminal-color-162: #d70087;
--terminal-color-163: #d700af;
--terminal-color-164: #d700d7;
--terminal-color-165: #d700ff;
--terminal-color-166: #d75f00;
--terminal-color-167: #d75f5f;
--terminal-color-168: #d75f87;
--terminal-color-169: #d75faf;
--terminal-color-170: #d75fd7;
--terminal-color-171: #d75fff;
--terminal-color-172: #d78700;
--terminal-color-173: #d7875f;
--terminal-color-174: #d78787;
--terminal-color-175: #d787af;
--terminal-color-176: #d787d7;
--terminal-color-177: #d787ff;
--terminal-color-178: #d7af00;
--terminal-color-179: #d7af5f;
--terminal-color-180: #d7af87;
--terminal-color-181: #d7afaf;
--terminal-color-182: #d7afd7;
--terminal-color-183: #d7afff;
--terminal-color-184: #d7d700;
--terminal-color-185: #d7d75f;
--terminal-color-186: #d7d787;
--terminal-color-187: #d7d7af;
--terminal-color-188: #d7d7d7;
--terminal-color-189: #d7d7ff;
--terminal-color-190: #d7ff00;
--terminal-color-191: #d7ff5f;
--terminal-color-192: #d7ff87;
--terminal-color-193: #d7ffaf;
--terminal-color-194: #d7ffd7;
--terminal-color-195: #d7ffff;
--terminal-color-196: #ff0000;
--terminal-color-197: #ff005f;
--terminal-color-198: #ff0087;
--terminal-color-199: #ff00af;
--terminal-color-200: #ff00d7;
--terminal-color-201: #ff00ff;
--terminal-color-202: #ff5f00;
--terminal-color-203: #ff5f5f;
--terminal-color-204: #ff5f87;
--terminal-color-205: #ff5faf;
--terminal-color-206: #ff5fd7;
--terminal-color-207: #ff5fff;
--terminal-color-208: #ff8700;
--terminal-color-209: #ff875f;
--terminal-color-210: #ff8787;
--terminal-color-211: #ff87af;
--terminal-color-212: #ff87d7;
--terminal-color-213: #ff87ff;
--terminal-color-214: #ffaf00;
--terminal-color-215: #ffaf5f;
--terminal-color-216: #ffaf87;
--terminal-color-217: #ffafaf;
--terminal-color-218: #ffafd7;
--terminal-color-219: #ffafff;
--terminal-color-220: #ffd700;
--terminal-color-221: #ffd75f;
--terminal-color-222: #ffd787;
--terminal-color-223: #ffd7af;
--terminal-color-224: #ffd7d7;
--terminal-color-225: #ffd7ff;
--terminal-color-226: #ffff00;
--terminal-color-227: #ffff5f;
--terminal-color-228: #ffff87;
--terminal-color-229: #ffffaf;
--terminal-color-230: #ffffd7;
--terminal-color-231: #ffffff;
--terminal-color-232: #080808;
--terminal-color-233: #121212;
--terminal-color-234: #1c1c1c;
--terminal-color-235: #262626;
--terminal-color-236: #303030;
--terminal-color-237: #3a3a3a;
--terminal-color-238: #444444;
--terminal-color-239: #4e4e4e;
--terminal-color-240: #585858;
--terminal-color-241: #626262;
--terminal-color-242: #6c6c6c;
--terminal-color-243: #767676;
--terminal-color-244: #808080;
--terminal-color-245: #8a8a8a;
--terminal-color-246: #949494;
--terminal-color-247: #9e9e9e;
--terminal-color-248: #a8a8a8;
--terminal-color-249: #b2b2b2;
--terminal-color-250: #bcbcbc;
--terminal-color-251: #c6c6c6;
--terminal-color-252: #d0d0d0;
--terminal-color-253: #dadada;
--terminal-color-254: #e4e4e4;
--terminal-color-255: #eeeeee;
}
/* Terminal link styling */
.terminal-link {
color: #4fc3f7;
text-decoration: underline;
cursor: pointer;
transition: background-color 0.2s ease;
}
.terminal-link:hover {
background-color: rgba(79, 195, 247, 0.2);
}
/* Scroll to bottom button */
.scroll-to-bottom {
position: absolute;
bottom: 12px;
left: 12px;
width: 48px;
height: 48px;
background: rgba(26, 26, 26, 0.9);
border: 1px solid #2a2a2a;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #e4e4e4;
font-size: 24px;
transition: all 0.2s ease;
user-select: none;
z-index: 10;
}
.scroll-to-bottom:hover {
background: rgba(26, 26, 26, 1);
border-color: #00ff88;
color: #00ff88;
transform: translateY(-1px);
box-shadow: 0 0 10px rgba(0, 255, 136, 0.3);
}
.scroll-to-bottom:active {
transform: translateY(0px);
}
/* Debug overlay */
.debug-overlay {
position: absolute;
bottom: 8px;
right: 8px;
background: rgba(26, 26, 26, 0.9);
border: 1px solid #2a2a2a;
border-radius: 4px;
padding: 8px 12px;
font-family: 'Fira Code', monospace;
font-size: 11px;
color: #e4e4e4;
user-select: none;
z-index: 10;
line-height: 1.4;
}
.debug-overlay .metric {
display: flex;
justify-content: space-between;
min-width: 120px;
}
.debug-overlay .metric-label {
opacity: 0.7;
}
.debug-overlay .metric-value {
font-weight: bold;
margin-left: 8px;
}
/* Fit toggle button */
.fit-toggle {
position: absolute;
top: 12px;
right: 12px;
width: 48px;
height: 48px;
background: rgba(26, 26, 26, 0.9);
border: 1px solid #2a2a2a;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #e4e4e4;
font-size: 20px;
transition: all 0.2s ease;
user-select: none;
z-index: 10;
}
.fit-toggle:hover {
background: rgba(26, 26, 26, 1);
border-color: #00ff88;
color: #00ff88;
transform: translateY(-1px);
box-shadow: 0 0 10px rgba(0, 255, 136, 0.3);
}
.fit-toggle:active {
transform: translateY(0px);
}
.fit-toggle.active {
border-color: #00ff88;
color: #00ff88;
box-shadow: 0 0 10px rgba(0, 255, 136, 0.3);
}
/* View Transitions */
@supports (view-transition-name: none) {
::view-transition {
/* Set the transition duration to 0.1s as requested */
--transition-duration: 100ms;
}
::view-transition-group(*) {
animation-duration: var(--transition-duration);
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
::view-transition-old(*),
::view-transition-new(*) {
animation-duration: var(--transition-duration);
mix-blend-mode: normal;
}
/* Specific styling for terminal transitions */
::view-transition-old(terminal-*) {
animation: view-transition-fade-out var(--transition-duration) cubic-bezier(0.4, 0, 0.2, 1);
}
::view-transition-new(terminal-*) {
animation: view-transition-fade-in var(--transition-duration) cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes view-transition-fade-out {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes view-transition-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
}