:root { --bg: #0d1b2a; --panel: #1b263b; --ink: #e0e1dd; --muted: #8d99ae; --accent: #48cae4; --accent-2: #ffd166; --error: #ef476f; --ok: #06d6a0; } * { box-sizing: border-box; } body { margin: 0; background: var(--bg); color: var(--ink); font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; line-height: 1.5; } .container { max-width: 760px; margin: 0 auto; padding: 1.5rem 1rem 3rem; } a { color: var(--accent); } a:hover { color: var(--accent-2); } h1 { font-size: 1.4rem; margin: 0 0 .5rem; } h2 { color: var(--accent); } hr { border: none; border-top: 1px dashed var(--muted); margin: 1rem 0; } header nav { display: flex; align-items: center; gap: .35rem; flex-wrap: wrap; } .spacer { flex: 1 1 auto; } .nick-form { display: flex; align-items: center; gap: .35rem; } .nick-form label { color: var(--muted); } input, textarea, button { font: inherit; border: 1px solid var(--muted); background: var(--panel); color: var(--ink); padding: .35rem .5rem; } input:focus, textarea:focus { outline: 2px solid var(--accent); } button { cursor: pointer; background: var(--accent); color: var(--bg); border-color: var(--accent); font-weight: bold; } button:hover { background: var(--accent-2); border-color: var(--accent-2); } .marquee { color: var(--accent-2); background: var(--panel); padding: .25rem; } pre { background: var(--panel); padding: .75rem; overflow-x: auto; } .info { padding: .5rem .75rem; margin: .5rem 0; } .success { background: rgba(6, 214, 160, .15); border: 1px solid var(--ok); } .error { background: rgba(239, 71, 111, .15); border: 1px solid var(--error); } .status { color: var(--muted); } .status.ok { color: var(--ok); } /* chat */ .chat-log { height: 20vh; overflow-y: auto; background: var(--panel); padding: .75rem; margin-bottom: .75rem; } .chat-line { margin: .15rem 0; word-wrap: break-word; } .chat-line.mine .chat-nick { color: var(--accent-2); } .chat-nick { color: var(--accent); font-weight: bold; } .chat-time { color: var(--muted); font-size: .75rem; } .chat-system { color: var(--muted); font-style: italic; margin: .25rem 0; } .chat-form { display: flex; gap: .5rem; } .chat-form input { flex: 1 1 auto; } /* guestbook */ .guestbook-form { display: flex; flex-direction: column; gap: .5rem; align-items: flex-start; } .guestbook-form textarea { width: 100%; min-height: 4rem; } .guestbook-entries { list-style: none; padding: 0; } .guestbook-entries li { background: var(--panel); padding: .5rem .75rem; margin: .5rem 0; } .entry-message { white-space: pre-wrap; word-wrap: break-word; } .entry-meta { color: var(--muted); font-size: .8rem; margin-top: .25rem; } /* portal */ .portal-form { display: flex; flex-direction: column; gap: .5rem; align-items: flex-start; margin: .75rem 0; } .rename-form { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; margin: .5rem 0; } .roster { list-style: none; padding: 0; } .roster li { padding: .15rem 0; } .legend { color: var(--muted); font-size: .85rem; display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; } .dot { display: inline-block; width: .6rem; height: .6rem; border-radius: 50%; background: var(--muted); vertical-align: middle; } .dot.chat { background: var(--ok); } .dot.network { background: var(--accent-2); } .dot.online { background: var(--ok); } .dot.offline { background: var(--muted); } .whoami { color: var(--accent-2); font-weight: bold; } .whoami:hover { color: var(--accent); } .muted { color: var(--muted); } code { background: var(--panel); padding: .1rem .3rem; } /* profile: devices + dns */ .lan-table { width: 100%; border-collapse: collapse; margin: .5rem 0; } .lan-table th { text-align: left; color: var(--muted); font-weight: normal; border-bottom: 1px dashed var(--muted); padding: .3rem .5rem; } .lan-table td { padding: .3rem .5rem; border-bottom: 1px solid var(--panel); vertical-align: middle; } .lan-table form { margin: 0; } .lan-table button { padding: .15rem .5rem; font-size: .85rem; } .set-primary { background: var(--panel); color: var(--ink); border-color: var(--muted); } .set-primary:hover { background: var(--accent); color: var(--bg); border-color: var(--accent); } .wizard-btn { margin: .25rem 0 .5rem; } .dns-form { margin: .75rem 0; } .dns-form h4 { margin: .5rem 0 .35rem; } .dns-fields { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; } .dns-fields input[name="type"] { width: 6rem; } .dns-fields input[name="ttl"] { width: 5rem; } .dns-fields input[name="name"], .dns-fields input[name="content"] { flex: 1 1 12rem; } /* canvas / r-place */ .palette { display: flex; flex-wrap: wrap; gap: 4px; margin: .5rem 0; } .swatch { width: 26px; height: 26px; border: 2px solid var(--panel); border-radius: 4px; cursor: pointer; } .swatch.selected { border-color: var(--ink); } .canvas-viewport { position: relative; width: 100%; height: 65vh; min-height: 300px; overflow: hidden; background: var(--bg); border: 2px solid var(--muted); cursor: crosshair; user-select: none; touch-action: none; } .canvas-viewport.dragging { cursor: grabbing; } #canvas { position: absolute; top: 0; left: 0; image-rendering: pixelated; transform-origin: 0 0; } .pixel-cursor { position: absolute; top: 0; left: 0; pointer-events: none; display: none; border: 1px solid rgba(255,255,255,0.9); box-shadow: 0 0 0 1px rgba(0,0,0,0.6); box-sizing: border-box; } .canvas-coords { position: absolute; bottom: 6px; left: 8px; font-size: .75rem; color: var(--muted); pointer-events: none; } footer { color: var(--muted); }