/* FOSFENO :: Panel de control Tema verde acido y negro, con acentos en naranja neon. Movil: una columna. Pantalla ancha: dos columnas. */ @font-face { font-family: "Xirod"; src: url("/panel/fonts/xirod.otf") format("opentype"); font-display: swap; } :root { --bg: #060a06; --card: #0d120c; --line: #243016; --green: #b4ff00; /* verde acido */ --green-d: #86bd00; --orange: #ff7a00; /* naranja acido */ --orange-n: #ff9d2a; /* naranja neon */ --ink: #050705; /* negro: texto sobre superficies brillantes */ --txt: #cfe8ad; /* texto claro sobre fondo oscuro */ --dim: #6f8a52; --red: #ff3b2f; } * { box-sizing: border-box; margin: 0; padding: 0; } /* El atributo 'hidden' debe ocultar siempre, incluso sobre display:flex */ [hidden] { display: none !important; } body { background: var(--bg); color: var(--txt); font-family: "Segoe UI", Roboto, system-ui, sans-serif; -webkit-tap-highlight-color: transparent; padding-bottom: 48px; } /* --- Cabecera con el titulo centrado --- */ header { position: sticky; top: 0; z-index: 10; display: flex; align-items: center; justify-content: center; padding: 16px 20px; border-bottom: 2px solid var(--green-d); background: var(--bg); } header h1 { font-family: "Xirod", "Arial Black", sans-serif; font-size: 32px; font-weight: 400; letter-spacing: 0.09em; color: var(--green); text-shadow: 0 0 18px rgba(180, 255, 0, 0.65); } #conn { position: absolute; right: 20px; top: 50%; transform: translateY(-50%); } .dot { width: 13px; height: 13px; border-radius: 50%; display: inline-block; } .dot.on { background: var(--green); box-shadow: 0 0 9px var(--green); } .dot.off { background: var(--red); box-shadow: 0 0 9px var(--red); } /* --- Disposicion: movil en una columna --- */ main { max-width: 560px; margin: 0 auto; padding: 16px; display: flex; flex-direction: column; gap: 14px; } .column { display: contents; } /* en movil, las columnas no existen */ /* Orden de las tarjetas cuando estan todas en una sola columna (movil) */ #card-power { order: 1; } #card-engines { order: 2; } #card-audio { order: 3; } #card-sens { order: 4; } #ctl-butterchurn, #ctl-editor, #ctl-mixer, #ctl-projectm { order: 5; } #card-now { order: 6; } #card-sys { order: 7; } #net-foot { order: 8; } /* --- Disposicion: pantalla ancha (portatil) en dos columnas --- */ @media (min-width: 880px) { main { width: 94%; max-width: 1600px; flex-direction: row; align-items: flex-start; gap: 18px; } .column { display: flex; flex-direction: column; gap: 14px; flex: 1 1 0; } } /* --- Tarjetas --- */ .card { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 16px; display: flex; flex-direction: column; gap: 12px; } .card.center { align-items: center; } /* Cabecera de tarjeta: titulo centrado, boton de info a la derecha */ .cardhead { position: relative; width: 100%; display: flex; align-items: center; justify-content: center; min-height: 30px; } /* Titulo de cada tarjeta: mas grande y en la fuente Xirod */ .cardhead .label { font-family: "Xirod", "Arial Black", sans-serif; font-size: 16px; font-weight: 400; letter-spacing: 0.04em; } .label { color: var(--green); font-size: 13px; text-transform: uppercase; letter-spacing: 0.09em; font-weight: 700; } .value { color: var(--orange-n); font-weight: 800; } .hint { color: var(--dim); font-size: 12px; line-height: 1.45; } .row { display: flex; align-items: center; justify-content: space-between; gap: 10px; } .row .cmd { flex: 1; } /* --- Boton de informacion (circular naranja, esquina de la tarjeta) --- */ .info { position: absolute; right: 0; top: 50%; transform: translateY(-50%); width: 28px; height: 28px; border-radius: 50%; background: var(--orange); color: var(--ink); border: none; font-weight: 900; font-style: italic; font-size: 15px; cursor: pointer; box-shadow: 0 0 10px rgba(255, 122, 0, 0.5); } .info:active { background: var(--orange-n); } /* --- Boton de encendido (circular grande) --- */ .power-btn { width: 128px; height: 128px; border-radius: 50%; border: none; cursor: pointer; font-weight: 900; font-size: 26px; letter-spacing: 0.05em; background: var(--green); color: var(--ink); box-shadow: 0 0 26px rgba(180, 255, 0, 0.55); } .power-btn.off { background: var(--card); color: var(--dim); border: 3px solid var(--line); box-shadow: none; } /* --- Selector de motor (botones circulares) --- */ .engines { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; } .engine { width: 96px; height: 96px; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer; background: var(--card); border: 3px solid var(--line); color: var(--txt); } .engine strong { font-size: 13px; } .engine small { font-size: 9px; color: var(--dim); } .engine.active { background: var(--green); color: var(--ink); border-color: var(--orange); box-shadow: 0 0 20px rgba(180, 255, 0, 0.6); } .engine.active small { color: var(--ink); } /* --- Botones de comando --- */ .cmd, .sysbtn { padding: 13px; border-radius: 11px; cursor: pointer; background: #161d10; border: 1px solid var(--line); color: var(--txt); font-weight: 700; font-size: 14px; } .cmd:active, .sysbtn:active { background: #202a16; } .cmd.accent { background: var(--green); color: var(--ink); border: none; } /* --- Selectores y sliders --- */ select { width: 100%; padding: 12px; border-radius: 11px; background: #161d10; color: var(--txt); border: 1px solid var(--line); font-size: 14px; } select.inline { width: auto; padding: 8px 10px; } input[type=range] { width: 100%; accent-color: var(--green); height: 30px; } .check { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--txt); } .check input { width: 22px; height: 22px; accent-color: var(--orange); } /* --- Botones segmentados --- */ .seg { display: flex; gap: 6px; } .segbtn { flex: 1; padding: 11px 6px; border-radius: 10px; cursor: pointer; background: #161d10; border: 2px solid var(--line); color: var(--dim); font-weight: 700; font-size: 13px; } .segbtn.active { border-color: var(--orange); color: var(--orange-n); box-shadow: 0 0 12px rgba(255, 122, 0, 0.35); } /* --- BPM --- */ .bpm { font-size: 30px; font-weight: 900; color: var(--orange-n); text-shadow: 0 0 14px rgba(255, 157, 42, 0.6); font-variant-numeric: tabular-nums; } /* --- Sliders del mezclador --- */ .slider { display: flex; flex-direction: column; gap: 4px; margin-bottom: 6px; } .slider .head { display: flex; justify-content: space-between; font-size: 13px; color: var(--dim); } .slider .head b { color: var(--green); font-weight: 800; } /* --- Editor CodeMirror --- */ .CodeMirror { height: 220px; border-radius: 11px; border: 1px solid var(--green-d); font-size: 13px; font-family: "Fira Mono", Consolas, monospace; } /* --- Tarjeta de estado --- */ #card-now { text-align: center; } .now { font-size: 15px; color: var(--orange-n); word-break: break-word; } /* --- Sistema --- */ .sys { flex-direction: row; } .sys .sysbtn { flex: 1; } .sysbtn.danger { color: var(--red); border-color: var(--red); } /* --- Pie con la direccion del panel --- */ .netfoot { text-align: center; color: var(--dim); font-size: 12px; font-family: monospace; padding: 4px 0 8px; } /* --- Banda de avisos --- */ .notif { display: flex; align-items: center; gap: 10px; padding: 12px 16px; font-size: 14px; font-weight: 600; position: sticky; top: 66px; z-index: 9; } .notif.info { background: var(--green); color: var(--ink); } .notif.warn { background: var(--orange); color: var(--ink); } .notif.error { background: var(--red); color: #fff; } .notif span { flex: 1; } .notif button { background: transparent; border: none; color: inherit; font-size: 22px; font-weight: 900; cursor: pointer; line-height: 1; } /* --- Ventana de informacion --- */ .modal { position: fixed; inset: 0; z-index: 50; background: rgba(3, 6, 3, 0.88); display: flex; align-items: center; justify-content: center; padding: 20px; } .modal-box { background: var(--card); border: 2px solid var(--green); border-radius: 16px; padding: 22px; max-width: 460px; width: 100%; max-height: 80vh; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; box-shadow: 0 0 30px rgba(180, 255, 0, 0.3); } .modal-box h2 { font-family: "Xirod", "Arial Black", sans-serif; font-weight: 400; color: var(--green); font-size: 16px; letter-spacing: 0.06em; text-align: center; } .modal-box p { color: var(--txt); font-size: 14px; line-height: 1.5; }