Spaces:
Runtime error
Runtime error
| /* ═══════════════════════════════════════════════════════════════ | |
| HF Terminal — Skeuomorphic CRT Stylesheet | |
| Hand-crafted CSS. No frameworks. No compromises. | |
| ═══════════════════════════════════════════════════════════════ */ | |
| :root { | |
| --phosphor: #33ff00; | |
| --phosphor-dim: #1a8c00; | |
| --phosphor-glow: rgba(51, 255, 0, 0.6); | |
| --phosphor-bg: #0C0C0C; | |
| --screen-radius: 18px; | |
| --bezel-width: 24px; | |
| --bezel-color: #2a2a2a; | |
| --scanline-opacity: 0.08; | |
| --scanline-size: 2px; | |
| } | |
| :root[data-phosphor="amber"] { | |
| --phosphor: #ffb000; | |
| --phosphor-dim: #b37d00; | |
| --phosphor-glow: rgba(255, 176, 0, 0.6); | |
| } | |
| :root[data-phosphor="white"] { | |
| --phosphor: #e0e0e0; | |
| --phosphor-dim: #a0a0a0; | |
| --phosphor-glow: rgba(224, 224, 224, 0.5); | |
| } | |
| *, *::before, *::after { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| html, body { | |
| width: 100%; | |
| height: 100%; | |
| overflow: hidden; | |
| background: #1a1a1a; | |
| font-family: monospace; | |
| } | |
| #monitor { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| width: 100%; | |
| height: calc(100% - 48px); | |
| padding: 12px; | |
| perspective: 800px; | |
| } | |
| #bezel { | |
| position: relative; | |
| background: var(--bezel-color); | |
| border-radius: calc(var(--screen-radius) + var(--bezel-width)); | |
| padding: var(--bezel-width); | |
| box-shadow: | |
| 0 20px 60px rgba(0, 0, 0, 0.7), | |
| 0 0 0 2px #1a1a1a, | |
| inset 0 1px 0 rgba(255, 255, 255, 0.06), | |
| inset 0 -1px 0 rgba(0, 0, 0, 0.4); | |
| width: 100%; | |
| max-width: 920px; | |
| height: 100%; | |
| max-height: 640px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| #screen { | |
| position: relative; | |
| width: 100%; | |
| height: 100%; | |
| background: var(--phosphor-bg); | |
| border-radius: var(--screen-radius); | |
| overflow: hidden; | |
| box-shadow: | |
| inset 0 0 80px rgba(0, 0, 0, 0.5), | |
| inset 0 0 20px rgba(0, 0, 0, 0.3), | |
| inset 2px 2px 20px rgba(255, 255, 255, 0.02); | |
| border: 1px solid rgba(255, 255, 255, 0.03); | |
| } | |
| #screen.no-curve { | |
| border-radius: 4px; | |
| box-shadow: | |
| inset 0 0 60px rgba(0, 0, 0, 0.4), | |
| inset 0 0 10px rgba(0, 0, 0, 0.2); | |
| } | |
| #scanlines { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| pointer-events: none; | |
| z-index: 10; | |
| background: repeating-linear-gradient( | |
| to bottom, | |
| transparent 0px, | |
| transparent var(--scanline-size), | |
| rgba(0, 0, 0, var(--scanline-opacity)) var(--scanline-size), | |
| rgba(0, 0, 0, var(--scanline-opacity)) calc(var(--scanline-size) * 2) | |
| ); | |
| } | |
| #scanlines.hidden { | |
| display: none; | |
| } | |
| #terminal { | |
| width: 100%; | |
| height: 100%; | |
| padding: 8px; | |
| position: relative; | |
| z-index: 5; | |
| } | |
| #terminal .xterm { | |
| height: 100%; | |
| padding: 4px; | |
| } | |
| #terminal .xterm-viewport { | |
| background-color: var(--phosphor-bg) ; | |
| } | |
| #terminal .xterm-screen { | |
| height: 100% ; | |
| } | |
| :root[data-glow="true"] #terminal .xterm-rows { | |
| color: var(--phosphor); | |
| text-shadow: | |
| 0 0 2px var(--phosphor), | |
| 0 0 8px var(--phosphor-glow), | |
| 0 0 20px var(--phosphor-glow); | |
| } | |
| :root[data-glow="false"] #terminal .xterm-rows { | |
| color: var(--phosphor); | |
| text-shadow: none; | |
| } | |
| #terminal .xterm-selection div { | |
| background-color: rgba(51, 255, 0, 0.25) ; | |
| } | |
| #terminal .xterm-viewport::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| #terminal .xterm-viewport::-webkit-scrollbar-track { | |
| background: rgba(0, 0, 0, 0.3); | |
| } | |
| #terminal .xterm-viewport::-webkit-scrollbar-thumb { | |
| background: var(--phosphor-dim); | |
| border-radius: 3px; | |
| } | |
| #terminal .xterm-viewport::-webkit-scrollbar-thumb:hover { | |
| background: var(--phosphor); | |
| } | |
| #monitor-base { | |
| width: 100%; | |
| max-width: 920px; | |
| display: flex; | |
| justify-content: center; | |
| } | |
| #monitor-foot { | |
| width: 40%; | |
| height: 16px; | |
| background: linear-gradient(to bottom, #333, #222); | |
| border-radius: 0 0 6px 6px; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); | |
| } | |
| #controls { | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 48px; | |
| background: #1e1e1e; | |
| border-top: 1px solid #333; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 20px; | |
| z-index: 100; | |
| font-size: 12px; | |
| color: #888; | |
| } | |
| .control-group { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| cursor: pointer; | |
| user-select: none; | |
| } | |
| .control-group span { | |
| font-family: monospace; | |
| letter-spacing: 0.5px; | |
| text-transform: uppercase; | |
| font-size: 10px; | |
| } | |
| .control-group select { | |
| background: #2a2a2a; | |
| color: #ccc; | |
| border: 1px solid #444; | |
| border-radius: 3px; | |
| padding: 2px 6px; | |
| font-family: monospace; | |
| font-size: 11px; | |
| cursor: pointer; | |
| outline: none; | |
| } | |
| .control-group select:focus { | |
| border-color: var(--phosphor-dim); | |
| } | |
| .control-group input[type="checkbox"] { | |
| appearance: none; | |
| width: 28px; | |
| height: 16px; | |
| background: #333; | |
| border-radius: 8px; | |
| position: relative; | |
| cursor: pointer; | |
| transition: background 0.2s; | |
| } | |
| .control-group input[type="checkbox"]::after { | |
| content: ''; | |
| position: absolute; | |
| top: 2px; | |
| left: 2px; | |
| width: 12px; | |
| height: 12px; | |
| background: #666; | |
| border-radius: 50%; | |
| transition: transform 0.2s, background 0.2s; | |
| } | |
| .control-group input[type="checkbox"]:checked { | |
| background: var(--phosphor-dim); | |
| } | |
| .control-group input[type="checkbox"]:checked::after { | |
| transform: translateX(12px); | |
| background: var(--phosphor); | |
| } | |
| @keyframes flicker { | |
| 0% { opacity: 1; } | |
| 3% { opacity: 0.97; } | |
| 6% { opacity: 1; } | |
| 7% { opacity: 0.98; } | |
| 9% { opacity: 1; } | |
| 50% { opacity: 1; } | |
| 51% { opacity: 0.99; } | |
| 100% { opacity: 1; } | |
| } | |
| #screen { | |
| animation: flicker 8s infinite; | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| #screen { animation: none; } | |
| } | |
| @media (max-width: 768px) { | |
| #bezel { | |
| padding: 12px; | |
| border-radius: calc(var(--screen-radius) + 12px); | |
| max-height: none; | |
| } | |
| #screen { border-radius: 10px; } | |
| #monitor-foot { width: 60%; } | |
| #controls { | |
| gap: 10px; | |
| padding: 0 8px; | |
| flex-wrap: wrap; | |
| height: auto; | |
| min-height: 48px; | |
| padding-top: 6px; | |
| padding-bottom: 6px; | |
| } | |
| .control-group span { font-size: 9px; } | |
| } | |
| @media (max-width: 480px) { | |
| #bezel { | |
| padding: 6px; | |
| border-radius: calc(var(--screen-radius) + 6px); | |
| } | |
| #screen { border-radius: 8px; } | |
| #monitor-foot { display: none; } | |
| } | |