@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=Space+Mono:wght@400;700&display=swap'); :root { --bg-night: #090511; --bg-deep: #150b2e; --panel: rgba(18, 10, 38, 0.75); --panel-border: rgba(255, 67, 176, 0.4); --panel-glow: 0 0 42px rgba(255, 67, 176, 0.24); --text-main: #f4deff; --text-soft: #c89cff; --neon-pink: #ff3fb0; --neon-cyan: #3ef4ff; --neon-blue: #55a4ff; --neon-violet: #8b40ff; --neon-green: #8affc7; --danger: #ff5f7a; --keyboard-white-top: #fef0ff; --keyboard-white-bottom: #f1d6ff; --keyboard-black-top: #321355; --keyboard-black-bottom: #120727; --radius-l: 20px; --radius-m: 14px; --radius-s: 10px; } * { box-sizing: border-box; } html, body { width: 100%; max-width: 100%; overflow-x: clip; } body { margin: 0; min-height: 100vh; position: relative; overflow-x: clip; color: var(--text-main); font-family: 'Space Mono', monospace; background: radial-gradient(1000px 500px at 10% -5%, rgba(139, 64, 255, 0.35), transparent 60%), radial-gradient(800px 480px at 100% 0%, rgba(62, 244, 255, 0.2), transparent 60%), linear-gradient(175deg, var(--bg-night), var(--bg-deep)); } body::before, body::after { content: ''; position: fixed; inset: 0; pointer-events: none; z-index: 0; } body::before { background: radial-gradient(circle at 50% 12%, rgba(255, 112, 190, 0.22) 0 18%, transparent 42%), repeating-linear-gradient( 90deg, rgba(62, 244, 255, 0.06) 0 2px, transparent 2px 90px ); opacity: 0.9; animation: skyPulse 7s ease-in-out infinite alternate; } body::after { top: 52%; height: 62%; background: linear-gradient(180deg, rgba(139, 64, 255, 0.08), rgba(9, 5, 17, 0.8)), repeating-linear-gradient( 0deg, rgba(62, 244, 255, 0.15) 0 2px, transparent 2px 28px ), repeating-linear-gradient( 90deg, rgba(255, 63, 176, 0.18) 0 1px, transparent 1px 62px ); transform-origin: top center; transform: perspective(650px) rotateX(62deg); animation: gridRush 9s linear infinite; } .app-shell { max-width: 1360px; margin: 0 auto; padding: 20px 18px 30px; position: relative; z-index: 1; overflow-x: clip; } .app-shell::before { content: ''; position: absolute; left: 0; right: 0; top: 118px; height: 120px; background: radial-gradient(closest-side, rgba(62, 244, 255, 0.42), transparent 72%), radial-gradient(closest-side, rgba(255, 63, 176, 0.36), transparent 76%); filter: blur(22px); opacity: 0.6; animation: waveDrift 6.5s ease-in-out infinite; transform: scaleX(1.15); pointer-events: none; } .welcome-header { text-align: center; margin-bottom: 18px; position: relative; } .welcome-header::after { content: ''; position: absolute; left: 50%; bottom: -14px; width: min(640px, 88%); height: 10px; transform: translateX(-50%); background: radial-gradient(circle at 10% 50%, rgba(62, 244, 255, 0.7), transparent 35%), radial-gradient(circle at 50% 50%, rgba(255, 63, 176, 0.65), transparent 34%), radial-gradient(circle at 90% 50%, rgba(139, 64, 255, 0.7), transparent 35%); filter: blur(8px); border-radius: 999px; animation: waveDrift 5.8s ease-in-out infinite; } .eyebrow { margin: 0 0 8px; text-transform: uppercase; letter-spacing: 0.24em; font-size: 11px; color: var(--neon-cyan); text-shadow: 0 0 12px rgba(62, 244, 255, 0.7); } .logo-wrap { width: min(700px, 96%); margin: 0 auto 2px; padding: 0; border: 0; background: none; box-shadow: none; } .logo-image { display: block; width: 100%; max-height: 186px; object-fit: contain; filter: drop-shadow(0 0 8px rgba(255, 63, 176, 0.72)) drop-shadow(0 0 26px rgba(62, 244, 255, 0.52)) drop-shadow(0 0 50px rgba(139, 64, 255, 0.42)); animation: logoFloat 4.2s ease-in-out infinite; } .subtitle { margin: 4px 0 0; color: var(--text-soft); font-size: clamp(0.92rem, 2.2vw, 1.04rem); } #mainContainer { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; } .card { background: var(--panel); border: 1px solid var(--panel-border); border-radius: var(--radius-l); box-shadow: var(--panel-glow), inset 0 0 20px rgba(139, 64, 255, 0.17), 0 0 0 1px rgba(62, 244, 255, 0.12); backdrop-filter: blur(6px); } .keyboard-section { padding: 18px; } #keyboard { display: flex; justify-content: center; width: 100%; padding: 20px 14px; border-radius: 16px; border: 1px solid rgba(62, 244, 255, 0.38); background: linear-gradient(180deg, rgba(21, 10, 43, 0.92), rgba(10, 4, 23, 0.92)), radial-gradient(circle at 50% 0, rgba(62, 244, 255, 0.14), transparent 60%); box-shadow: inset 0 0 20px rgba(62, 244, 255, 0.16), 0 0 22px rgba(62, 244, 255, 0.2), 0 0 34px rgba(255, 63, 176, 0.18); user-select: none; touch-action: none; overflow-x: auto; } .key { width: 44px; height: 190px; margin: 0 1px; border: 1px solid rgba(255, 63, 176, 0.45); border-bottom-width: 4px; border-radius: 0 0 11px 11px; background: linear-gradient(180deg, var(--keyboard-white-top), var(--keyboard-white-bottom)); position: relative; display: flex; align-items: flex-end; justify-content: center; cursor: pointer; color: #51176e; font-size: 11px; font-weight: 700; transition: transform 120ms ease, box-shadow 120ms ease, filter 120ms ease; } .key:hover { transform: translateY(1px); box-shadow: inset 0 -5px 12px rgba(255, 63, 176, 0.16); } .key.black { width: 30px; height: 118px; margin-left: -15px; margin-right: -15px; z-index: 3; border-radius: 0 0 9px 9px; border-color: rgba(62, 244, 255, 0.55); border-bottom-width: 3px; background: linear-gradient(180deg, var(--keyboard-black-top), var(--keyboard-black-bottom)); color: #bdf6ff; box-shadow: 0 6px 10px rgba(0, 0, 0, 0.55); } .key.black:hover { box-shadow: 0 0 16px rgba(62, 244, 255, 0.4); } .key .shortcut-hint { display: block; opacity: 0; font-size: 10px; color: var(--neon-violet); text-shadow: 0 0 9px rgba(139, 64, 255, 0.8); transition: opacity 160ms ease; } .key.black .shortcut-hint { color: var(--neon-cyan); text-shadow: 0 0 9px rgba(62, 244, 255, 0.95); } .shortcuts-visible .key .shortcut-hint { opacity: 1; } .keyboard-toggle-row { display: flex; justify-content: flex-end; margin-top: 10px; margin-bottom: 2px; } .keyboard-toggle-pill { position: relative; display: inline-flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 999px; border: 1px solid rgba(62, 244, 255, 0.36); background: linear-gradient(160deg, rgba(22, 10, 46, 0.9), rgba(10, 6, 26, 0.92)); box-shadow: 0 0 16px rgba(62, 244, 255, 0.16), inset 0 0 12px rgba(255, 63, 176, 0.12); cursor: pointer; user-select: none; } .keyboard-toggle-pill input[type='checkbox'] { position: absolute; opacity: 0; width: 0; height: 0; margin: 0; } .toggle-track { position: relative; width: 44px; height: 24px; border-radius: 999px; border: 1px solid rgba(255, 63, 176, 0.5); background: rgba(10, 8, 25, 0.95); box-shadow: inset 0 0 8px rgba(255, 63, 176, 0.22); transition: background 140ms ease, border-color 140ms ease, box-shadow 140ms ease; } .toggle-track::before { content: ''; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: linear-gradient(180deg, #ff77d0, #ff3fb0); box-shadow: 0 0 10px rgba(255, 63, 176, 0.6); transition: transform 140ms ease, background 140ms ease, box-shadow 140ms ease; } .keyboard-toggle-pill input[type='checkbox']:checked + .toggle-track { border-color: rgba(62, 244, 255, 0.8); background: linear-gradient(90deg, rgba(255, 63, 176, 0.32), rgba(62, 244, 255, 0.38)); box-shadow: inset 0 0 10px rgba(62, 244, 255, 0.3), 0 0 14px rgba(62, 244, 255, 0.25); } .keyboard-toggle-pill input[type='checkbox']:checked + .toggle-track::before { transform: translateX(20px); background: linear-gradient(180deg, #9ffcff, #3ef4ff); box-shadow: 0 0 11px rgba(62, 244, 255, 0.8); } .keyboard-toggle-pill input[type='checkbox']:focus-visible + .toggle-track { outline: 2px solid rgba(62, 244, 255, 0.75); outline-offset: 2px; } .toggle-text { color: #d9e3ff; font-size: 12px; font-weight: 700; letter-spacing: 0.02em; text-shadow: 0 0 8px rgba(62, 244, 255, 0.25); } .controls { margin-top: 16px; padding: 16px; border-radius: var(--radius-m); border: 1px solid rgba(62, 244, 255, 0.35); background: rgba(11, 6, 24, 0.72); } .control-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(165px, 1fr)); gap: 10px; } .control-item { display: flex; flex-direction: column; gap: 7px; padding: 10px; border-radius: var(--radius-s); border: 1px solid rgba(255, 63, 176, 0.32); background: linear-gradient(160deg, rgba(31, 15, 62, 0.88), rgba(16, 8, 34, 0.9)); color: #f5d4ff; font-size: 12px; font-weight: 700; letter-spacing: 0.01em; } .control-item-toggle { flex-direction: row; align-items: center; justify-content: flex-start; gap: 10px; font-size: 13px; } select, button { font-family: 'Space Mono', monospace; } select { width: 100%; padding: 8px 10px; border: 1px solid rgba(62, 244, 255, 0.42); border-radius: 9px; background: rgba(10, 6, 22, 0.92); color: var(--neon-cyan); font-size: 13px; } select:focus, button:focus, input[type='checkbox']:focus { outline: 2px solid rgba(62, 244, 255, 0.6); outline-offset: 1px; } input[type='checkbox'] { -webkit-appearance: none; appearance: none; width: 20px; height: 20px; border-radius: 5px; border: 2px solid var(--neon-pink); background: rgba(11, 6, 24, 0.95); position: relative; cursor: pointer; box-shadow: inset 0 0 8px rgba(255, 63, 176, 0.2); } input[type='checkbox']::after { content: ''; position: absolute; left: 5px; top: 1px; width: 5px; height: 10px; border: solid var(--neon-cyan); border-width: 0 2px 2px 0; transform: rotate(45deg) scale(0); transition: transform 90ms ease; filter: drop-shadow(0 0 5px rgba(62, 244, 255, 0.8)); } input[type='checkbox']:checked { background: rgba(255, 63, 176, 0.26); box-shadow: inset 0 0 10px rgba(255, 63, 176, 0.6), 0 0 10px rgba(255, 63, 176, 0.45); } input[type='checkbox']:checked::after { transform: rotate(45deg) scale(1); } .action-row { margin-top: 14px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; } .btn { border: 0; border-radius: 10px; padding: 9px 14px; font-size: 13px; font-weight: 700; color: #fff; cursor: pointer; transition: transform 120ms ease, box-shadow 120ms ease, opacity 120ms ease; text-shadow: 0 0 8px rgba(0, 0, 0, 0.45); } .btn:hover:not(:disabled) { transform: translateY(-1px); filter: saturate(1.1) brightness(1.08); } .btn:disabled { opacity: 0.42; cursor: not-allowed; } .btn-primary { background: linear-gradient(180deg, #ff4fbd, #d42f8e); box-shadow: 0 0 18px rgba(255, 79, 189, 0.45); } .btn-secondary { background: linear-gradient(180deg, #5464ff, #383fbc); box-shadow: 0 0 15px rgba(84, 100, 255, 0.38); } .btn-game { background: linear-gradient(180deg, #43d3ff, #2f9bff); color: #041322; text-shadow: none; box-shadow: 0 0 18px rgba(67, 211, 255, 0.45); } .btn-danger { background: linear-gradient(180deg, #ff6688, #e9385f); box-shadow: 0 0 18px rgba(255, 102, 136, 0.42); } #status { margin-left: auto; padding: 8px 12px; border-radius: 999px; border: 1px solid rgba(62, 244, 255, 0.6); background: rgba(10, 9, 28, 0.8); color: var(--neon-green); text-shadow: 0 0 8px rgba(138, 255, 199, 0.75); font-size: 12px; font-weight: 700; } .monitor-section { overflow: hidden; } .terminal-header { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px 14px; border-bottom: 1px solid rgba(62, 244, 255, 0.28); background: linear-gradient(180deg, rgba(33, 16, 70, 0.85), rgba(20, 9, 40, 0.75)); } .terminal-header h4 { margin: 0; font-family: 'Orbitron', sans-serif; font-size: 14px; letter-spacing: 0.08em; color: var(--neon-pink); text-shadow: 0 0 12px rgba(255, 63, 176, 0.8); } #terminal { margin: 0; min-height: 220px; max-height: 320px; overflow-y: auto; padding: 14px; white-space: pre-wrap; word-wrap: break-word; background: radial-gradient(700px 220px at 100% 0, rgba(62, 244, 255, 0.18), transparent 62%), #07040f; color: #a5ffd2; font-family: 'Space Mono', monospace; font-size: 12px; line-height: 1.35; } #terminal .note-on { color: #8affc7; text-shadow: 0 0 8px rgba(138, 255, 199, 0.75); } #terminal .note-off { color: #8dc5ff; text-shadow: 0 0 8px rgba(141, 197, 255, 0.7); } #terminal .timestamp { color: #ffdd84; text-shadow: 0 0 8px rgba(255, 221, 132, 0.7); } #terminal::-webkit-scrollbar { width: 10px; } #terminal::-webkit-scrollbar-track { background: rgba(8, 5, 18, 0.7); } #terminal::-webkit-scrollbar-thumb { border-radius: 10px; background: linear-gradient(180deg, #ff3fb0, #8b40ff); } @keyframes logoFloat { 0% { transform: translateY(0) scale(1); } 50% { transform: translateY(-4px) scale(1.01); } 100% { transform: translateY(0) scale(1); } } @keyframes waveDrift { 0% { transform: translateX(-2%) translateY(0); } 50% { transform: translateX(2%) translateY(6px); } 100% { transform: translateX(-2%) translateY(0); } } @keyframes skyPulse { 0% { opacity: 0.82; filter: hue-rotate(0deg); } 100% { opacity: 1; filter: hue-rotate(12deg); } } @keyframes gridRush { 0% { background-position: 0 0, 0 0, 0 0; } 100% { background-position: 0 0, 0 220px, 62px 0; } } @media (max-width: 980px) { .app-shell { padding: 16px 12px 24px; } .keyboard-section { padding: 12px; } .controls { padding: 12px; } .key { width: 35px; height: 158px; font-size: 9px; } .key.black { width: 24px; height: 98px; margin-left: -12px; margin-right: -12px; } .control-grid { grid-template-columns: repeat(auto-fit, minmax(145px, 1fr)); } } @media (max-width: 640px) { .welcome-header { margin-bottom: 12px; } .logo-wrap { width: min(560px, 98%); padding: 0; } .logo-image { max-height: 132px; } .control-grid { grid-template-columns: 1fr 1fr; } .keyboard-toggle-row { justify-content: center; margin-top: 12px; } #status { margin-left: 0; width: 100%; text-align: center; } #terminal { min-height: 180px; font-size: 11px; } } @media (max-width: 480px) { .app-shell::before { top: 90px; height: 80px; } .control-grid { grid-template-columns: 1fr; } #keyboard { justify-content: flex-start; } .key { width: 27px; height: 126px; font-size: 8px; } .key.black { width: 18px; height: 76px; margin-left: -9px; margin-right: -9px; } }