Servidor Fastify + Socket.IO + Drizzle/Postgres; front Vite+React (EN/ES, tema claro/oscuro). Tableros por columnas con plantillas, notas privadas/públicas, agrupación, votos configurables (multivoto), timer compartido con alarma, fases, action items, export Markdown/JSON e import, autodestrucción, gestión de columnas. Imagen única (front servido por el servidor) y CI que la construye y publica.
385 lines
23 KiB
CSS
385 lines
23 KiB
CSS
/* ===== Sistema de tema (Hefestia: grafito + acento ámbar) ===== */
|
|
:root,
|
|
[data-theme="dark"] {
|
|
--page-bg: #0a0f17;
|
|
--header-bg: #1f2937;
|
|
--toolbar-bg: #131a26;
|
|
--col-bg: #141b27;
|
|
--col-border: #243044;
|
|
--inset: #0c121c;
|
|
--chip-bg: #111827;
|
|
--border: #374151;
|
|
--divider: #2a3852;
|
|
--btn-bg: #1f2937;
|
|
--seg-bg: #0c121c;
|
|
--text-strong: #ffffff;
|
|
--text: #f3f4f6;
|
|
--text-muted: #9ca3af;
|
|
--text-meta: #6b7280;
|
|
--pos-text: #86efac;
|
|
--accent-text: #fbbf24;
|
|
--danger-text: #fca5a5;
|
|
--card-bg: #1f2937;
|
|
--card-border: #374151;
|
|
--input-bg: #111827;
|
|
|
|
--accent: #d97706;
|
|
--accent-2: #b45309;
|
|
--accent-tint: rgba(245, 158, 11, 0.12);
|
|
--ok: #22a957;
|
|
--danger: #f0617a;
|
|
--postit: 200px; /* tamaño fijo del post-it (simula uno real) */
|
|
|
|
/* aliases para el CSS existente */
|
|
--bg: var(--page-bg);
|
|
--panel: var(--col-bg);
|
|
--panel2: var(--btn-bg);
|
|
--muted: var(--text-muted);
|
|
}
|
|
[data-theme="light"] {
|
|
--page-bg: #eceff3;
|
|
--header-bg: #ffffff;
|
|
--toolbar-bg: #f5f7fa;
|
|
--col-bg: #ffffff;
|
|
--col-border: #e4e8ef;
|
|
--inset: #eef1f5;
|
|
--chip-bg: #eef1f5;
|
|
--border: #dbe1ea;
|
|
--divider: #dfe5ee;
|
|
--btn-bg: #f1f4f8;
|
|
--seg-bg: #e7ebf1;
|
|
--text-strong: #0b1220;
|
|
--text: #1c2533;
|
|
--text-muted: #5b6677;
|
|
--text-meta: #8b94a3;
|
|
--pos-text: #15803d;
|
|
--accent-text: #b45309;
|
|
--danger-text: #dc2626;
|
|
--card-bg: #ffffff;
|
|
--card-border: #e4e8ef;
|
|
--input-bg: #f5f7fa;
|
|
|
|
--accent: #d97706;
|
|
--accent-2: #b45309;
|
|
--accent-tint: rgba(245, 158, 11, 0.14);
|
|
--ok: #15803d;
|
|
--danger: #dc2626;
|
|
}
|
|
|
|
* { box-sizing: border-box; }
|
|
html { background: var(--page-bg); }
|
|
body {
|
|
margin: 0;
|
|
background: var(--page-bg);
|
|
color: var(--text);
|
|
font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
::selection { background: rgba(245, 158, 11, 0.3); }
|
|
|
|
button, .btn {
|
|
cursor: pointer;
|
|
border: 1px solid var(--border);
|
|
background: var(--btn-bg);
|
|
color: var(--text);
|
|
border-radius: 8px;
|
|
padding: 7px 12px;
|
|
font-size: 14px;
|
|
text-decoration: none;
|
|
display: inline-block;
|
|
font-family: inherit;
|
|
}
|
|
button:hover { border-color: var(--accent); }
|
|
button:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
button.primary, .primary {
|
|
background: var(--accent); border-color: var(--accent); color: #fff;
|
|
box-shadow: 0 4px 14px rgba(217, 119, 6, 0.32);
|
|
}
|
|
button.primary:hover, .primary:hover { background: var(--accent-2); border-color: var(--accent-2); }
|
|
input, textarea, select {
|
|
background: var(--input-bg);
|
|
border: 1px solid var(--border);
|
|
color: var(--text);
|
|
border-radius: 9px;
|
|
padding: 9px 11px;
|
|
font-size: 14px;
|
|
font-family: inherit;
|
|
width: 100%;
|
|
}
|
|
input:focus, textarea:focus, select:focus { outline: none; border-color: var(--accent); }
|
|
input[type="checkbox"], input[type="radio"] { width: auto; }
|
|
textarea { resize: vertical; min-height: 44px; }
|
|
|
|
/* ===== Barra superior / marca ===== */
|
|
.appbar {
|
|
display: flex; align-items: center; gap: 12px;
|
|
padding: 13px 24px; background: var(--header-bg);
|
|
border-bottom: 1px solid var(--border);
|
|
position: sticky; top: 0; z-index: 20;
|
|
}
|
|
.brand { display: inline-flex; align-items: center; gap: 10px; }
|
|
.brand-logo {
|
|
width: 30px; height: 30px; border-radius: 8px;
|
|
background: linear-gradient(135deg, #f59e0b, #b45309);
|
|
display: flex; align-items: center; justify-content: center;
|
|
color: #1a0a00; font-weight: 800; font-size: 15px; flex-shrink: 0;
|
|
}
|
|
.brand-name { font-size: 17px; font-weight: 700; color: var(--text-strong); letter-spacing: -0.01em; }
|
|
.appbar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; }
|
|
.seg {
|
|
display: inline-flex; background: var(--seg-bg); border: 1px solid var(--border);
|
|
border-radius: 9px; padding: 2px;
|
|
}
|
|
.seg button {
|
|
border: none; border-radius: 7px; height: 28px; padding: 0 11px;
|
|
font-size: 12px; font-weight: 700; cursor: pointer; background: transparent; color: var(--text-muted);
|
|
}
|
|
.seg button.on { background: #fbbf24; color: #1a0a00; }
|
|
.seg button:hover { border: none; }
|
|
|
|
/* ===== Home ===== */
|
|
.home-wrap { max-width: 1080px; margin: 0 auto; padding: 40px 28px 96px; }
|
|
.hero-grid { display: grid; grid-template-columns: 1fr 440px; gap: 44px; align-items: center; }
|
|
@media (max-width: 880px) { .hero-grid { grid-template-columns: 1fr; } }
|
|
.hero-brand { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
|
|
.hero-brand .brand-logo { width: 44px; height: 44px; border-radius: 12px; font-size: 22px; box-shadow: 0 6px 18px rgba(245,158,11,0.32); }
|
|
.hero-brand .brand-name { font-size: 30px; font-weight: 800; letter-spacing: -0.02em; }
|
|
.hero p.lead { margin: 0 0 26px; font-size: 16px; line-height: 1.55; color: var(--text-muted); max-width: 380px; }
|
|
.feature { display: flex; gap: 11px; align-items: center; font-size: 14px; color: var(--text); margin-bottom: 13px; }
|
|
.feature .ic { width: 26px; height: 26px; border-radius: 7px; background: var(--inset); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
|
|
|
.create-card {
|
|
background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 16px;
|
|
padding: 24px; box-shadow: 0 14px 40px rgba(0,0,0,0.18);
|
|
}
|
|
.create-card h2 { margin: 0 0 20px; font-size: 18px; font-weight: 700; color: var(--text-strong); }
|
|
.field-label {
|
|
display: block; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase;
|
|
color: var(--text-muted); font-weight: 600; margin: 0 0 7px;
|
|
}
|
|
.create-card input, .create-card select { margin-bottom: 18px; }
|
|
.stepper { display: flex; align-items: center; border: 1px solid var(--border); border-radius: 9px; overflow: hidden; background: var(--input-bg); }
|
|
.stepper button { border: none; background: transparent; color: var(--text-muted); padding: 9px 14px; font-size: 16px; }
|
|
.stepper .val { flex: 1; text-align: center; font-family: ui-monospace, monospace; font-size: 15px; color: var(--text-strong); font-weight: 600; }
|
|
.cta { width: 100%; border: none; background: var(--accent); color: #fff; border-radius: 10px; padding: 13px; font-size: 15px; font-weight: 600; cursor: pointer; box-shadow: 0 4px 14px rgba(217,119,6,0.32); }
|
|
.cta:hover { background: var(--accent-2); }
|
|
.muted-note { margin: 14px 0 0; text-align: center; font-size: 12px; color: var(--text-meta); }
|
|
.section-num { font-family: ui-monospace, monospace; font-size: 13px; color: #f59e0b; font-weight: 600; }
|
|
|
|
/* chips de autodestrucción */
|
|
.ttl-row { display: flex; gap: 7px; flex-wrap: wrap; }
|
|
.chip {
|
|
padding: 7px 13px; border: 1px solid var(--border); border-radius: 9999px;
|
|
font-size: 13px; color: var(--text); background: var(--input-bg); cursor: pointer;
|
|
}
|
|
.chip.on { border: 1.5px solid #f59e0b; color: var(--text-strong); background: var(--accent-tint); }
|
|
|
|
/* columnas personalizadas (creación libre) */
|
|
.col-rows { display: flex; flex-direction: column; gap: 8px; margin-bottom: 10px; }
|
|
.col-row { display: flex; align-items: center; gap: 8px; background: var(--input-bg); border: 1px solid var(--border); border-radius: 9px; padding: 5px 6px 5px 10px; }
|
|
.col-row input { margin: 0; border: none; background: transparent; padding: 4px 0; }
|
|
.col-row .col-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
|
|
.col-row .del { border: none; background: transparent; color: var(--text-meta); padding: 6px 9px; }
|
|
.add-col { width: 100%; border: 1.5px dashed var(--border); background: transparent; color: var(--text-muted); border-radius: 9px; padding: 11px; font-size: 13px; font-weight: 600; }
|
|
|
|
/* ===== layout general ===== */
|
|
.tagline { color: var(--text-muted); }
|
|
.lang { display: inline-flex; gap: 4px; }
|
|
|
|
.card { background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 14px; padding: 22px; box-shadow: 0 14px 40px rgba(0,0,0,0.18); }
|
|
.form { display: flex; flex-direction: column; gap: 4px; }
|
|
.form label { color: var(--text-muted); font-size: 13px; margin-top: 8px; }
|
|
.form .primary, .form .cta { margin-top: 16px; }
|
|
|
|
.centered { display: grid; place-items: center; min-height: 80vh; padding: 24px; }
|
|
.centered .card { width: min(440px, 100%); }
|
|
.err { color: var(--danger); font-size: 13px; }
|
|
|
|
/* pantallas de estado (no encontrado / autodestruido) */
|
|
.state-card { text-align: center; max-width: 420px; }
|
|
.state-icon { width: 60px; height: 60px; border-radius: 16px; background: var(--inset); display: flex; align-items: center; justify-content: center; font-size: 28px; margin: 0 auto 18px; }
|
|
.state-icon.danger { background: rgba(220,38,38,0.12); border: 1px solid rgba(220,38,38,0.25); }
|
|
.state-card h2 { margin: 0 0 8px; font-size: 19px; font-weight: 700; color: var(--text-strong); }
|
|
.state-card p { margin: 0 0 22px; font-size: 14px; line-height: 1.5; color: var(--text-muted); }
|
|
|
|
/* enroll / unirse */
|
|
.enroll-kicker { font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-meta); font-weight: 600; margin-bottom: 6px; }
|
|
.enroll-title { margin: 0 0 12px; font-size: 24px; font-weight: 800; letter-spacing: -0.01em; color: var(--text-strong); }
|
|
.enroll-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 22px; }
|
|
.enroll-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--text-muted); background: var(--inset); border: 1px solid var(--border); border-radius: 9999px; padding: 4px 11px; }
|
|
.enroll-chip.danger { color: var(--danger-text); }
|
|
.enroll-chip .mono { font-family: ui-monospace, monospace; }
|
|
|
|
/* ===== Board ===== */
|
|
.board { padding-bottom: 48px; }
|
|
.topbar { display: flex; align-items: center; gap: 12px; padding: 13px 24px; background: var(--header-bg); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 10; }
|
|
.topbar h1 { font-size: 17px; margin: 0; color: var(--text-strong); font-weight: 700; }
|
|
.topbar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; }
|
|
.toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px 24px; border-bottom: 1px solid var(--border); }
|
|
.votes-left { color: var(--text-muted); font-size: 13px; }
|
|
.expiry { color: var(--danger-text); font-size: 13px; margin-left: auto; font-family: ui-monospace, monospace; }
|
|
.badge { background: var(--accent-tint); color: var(--accent-text); border: 1px solid rgba(245,158,11,0.4); border-radius: 7px; padding: 2px 8px; font-size: 12px; font-weight: 600; }
|
|
|
|
.timer { display: inline-flex; align-items: center; gap: 6px; }
|
|
.timer .clock { font-variant-numeric: tabular-nums; font-family: ui-monospace, monospace; font-weight: 600; min-width: 52px; text-align: center; color: var(--text-strong); }
|
|
.timer .clock.up { color: var(--danger); animation: blink 1s steps(2, start) infinite; }
|
|
.timer-input { width: 64px; text-align: center; padding: 4px 6px; }
|
|
@keyframes blink { to { opacity: 0.35; } }
|
|
|
|
.columns { display: flex; gap: 18px; padding: 20px 24px 32px; overflow-x: auto; align-items: start; min-height: 60vh; }
|
|
.column { background: var(--col-bg); border: 1px solid var(--col-border); border-radius: 14px; padding: 16px; min-width: 444px; flex: 1; display: flex; flex-direction: column; }
|
|
.col-head { display: flex; align-items: center; gap: 9px; margin-bottom: 14px; }
|
|
.col-head h3 { margin: 0; font-size: 16px; font-weight: 700; color: var(--text-strong); }
|
|
.col-count { font-family: ui-monospace, monospace; font-size: 11px; color: var(--text-muted); background: var(--inset); border-radius: 9999px; padding: 2px 9px; margin-left: auto; }
|
|
.add-note { display: flex; gap: 6px; margin-bottom: 12px; }
|
|
.add-note button { white-space: nowrap; }
|
|
|
|
/* área pública: post-its de tamaño FIJO, varios por fila (se ajustan al ancho) */
|
|
.public-area { display: grid; grid-template-columns: repeat(auto-fill, var(--postit)); gap: 10px; align-content: start; justify-content: center; min-height: 80px; border-radius: 8px; padding: 2px; }
|
|
.public-area.over { background: var(--accent-tint); }
|
|
.no-cards { grid-column: 1 / -1; color: var(--text-meta); text-align: center; font-size: 13px; padding: 24px 0; }
|
|
|
|
/* post-it cuadrado de tamaño fijo */
|
|
.note.postit {
|
|
background: #ffe08a; color: #20242c; border: none; border-radius: 12px;
|
|
padding: 12px 12px 9px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.35);
|
|
width: var(--postit); height: var(--postit);
|
|
display: flex; flex-direction: column; gap: 6px; overflow: hidden; position: relative;
|
|
}
|
|
.note.postit .note-handle { color: rgba(0, 0, 0, 0.42); }
|
|
/* texto: tamaño dinámico vía inline style; si no cabe (suelo 12px) aparece scroll */
|
|
.note-edit, .note.postit p { flex: 1; overflow: auto; margin: 0; background: transparent; border: none; color: inherit; padding: 0; width: 100%; resize: none; line-height: 1.3; font-weight: 500; word-break: break-word; white-space: pre-wrap; }
|
|
.note-edit:focus { outline: none; }
|
|
.note-foot { display: flex; align-items: center; gap: 6px; margin-top: 0; }
|
|
.avatar { width: 19px; height: 19px; border-radius: 50%; background: rgba(0, 0, 0, 0.14); display: flex; align-items: center; justify-content: center; font-size: 8px; font-weight: 700; color: rgba(0, 0, 0, 0.6); flex-shrink: 0; }
|
|
.author { color: rgba(0, 0, 0, 0.5); font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
.note .note-foot button { background: rgba(0, 0, 0, 0.06); border: 1px solid rgba(0, 0, 0, 0.18); color: #20242c; padding: 3px 9px; font-size: 11px; font-weight: 700; border-radius: 9999px; }
|
|
.vote-control { display: inline-flex; align-items: center; gap: 3px; }
|
|
.note .vote-minus { padding: 2px 7px; }
|
|
.note .vote.voted { border-color: #16a34a; color: #137a36; background: rgba(34, 163, 74, 0.18); }
|
|
.note .make-private { padding: 3px 7px; }
|
|
.note .del { color: #b4232f; }
|
|
.note .publish { background: rgba(22, 163, 74, 0.9); border: none; color: #fff; }
|
|
|
|
/* notas dentro de grupo y cuadrícula privada (post-its fijos) */
|
|
.group-grid, .private-grid { display: grid; grid-template-columns: repeat(auto-fill, var(--postit)); gap: 8px; justify-content: start; }
|
|
.private-grid { margin-bottom: 10px; }
|
|
.group .note.postit { box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3); }
|
|
.note.postit.draft { outline: 2px dashed rgba(168, 85, 247, 0.55); outline-offset: 2px; }
|
|
|
|
/* compositor privado */
|
|
.private-section { border-top: 1px dashed var(--divider); margin-top: 14px; padding-top: 14px; }
|
|
.private-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
|
|
.private-head span { font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--pos-text); font-weight: 600; }
|
|
.link { background: none; border: none; color: var(--accent-text); padding: 0; font-weight: 600; cursor: pointer; font-size: 12px; }
|
|
.swatches { display: flex; flex-wrap: wrap; gap: 7px; margin-bottom: 10px; }
|
|
.swatch { width: 21px; height: 21px; border-radius: 7px; cursor: pointer; }
|
|
.swatch.on { box-shadow: 0 0 0 2px var(--col-bg), 0 0 0 4px #f59e0b; }
|
|
.postit-input { color: rgba(20, 24, 28, 0.85); border: none; border-radius: 9px; padding: 13px; min-height: 54px; box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25); resize: vertical; }
|
|
.postit-input::placeholder { color: rgba(0, 0, 0, 0.45); }
|
|
|
|
/* drag & drop */
|
|
.note.dragging, .group.dragging { opacity: 0.4; }
|
|
.note-handle { position: absolute; top: 4px; right: 5px; cursor: grab; font-size: 13px; line-height: 1; user-select: none; touch-action: none; z-index: 1; }
|
|
.note-handle:active { cursor: grabbing; }
|
|
.group-handle { touch-action: none; }
|
|
.note.group-target { outline: 2px solid var(--ok); outline-offset: 1px; }
|
|
|
|
/* grupos (fila completa) */
|
|
.group { grid-column: 1 / -1; background: var(--inset); border: 1px solid var(--divider); border-radius: 12px; padding: 10px; }
|
|
.group.over { outline: 2px dashed var(--accent); }
|
|
.group-head { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; padding: 0 2px; }
|
|
.group-head input { flex: 1; background: transparent; border: none; font-weight: 700; padding: 4px 6px; color: var(--text-strong); font-size: 13px; }
|
|
.group-head input:focus { background: var(--input-bg); }
|
|
.group-handle { cursor: grab; color: var(--text-muted); padding: 0 4px; }
|
|
.group-count { font-family: ui-monospace, monospace; font-size: 11px; color: var(--text-muted); background: var(--btn-bg); border-radius: 9999px; padding: 1px 7px; }
|
|
.group-head .vote { background: rgba(34, 197, 94, 0.16) !important; border: 1px solid #16a34a !important; color: var(--pos-text) !important; }
|
|
|
|
.vote.hiddenTotals { font-variant-numeric: tabular-nums; }
|
|
.reveal-on { border-color: var(--ok); color: var(--pos-text); }
|
|
|
|
.overlay-note { color: #20242c; border: 1px solid var(--accent); border-radius: 10px; padding: 11px; width: 150px; aspect-ratio: 1/1; box-shadow: 0 8px 24px rgba(0,0,0,0.4); overflow: hidden; font-size: 12.5px; }
|
|
|
|
/* modales y drawers */
|
|
.modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,0.5); display: grid; place-items: center; z-index: 50; }
|
|
.modal { width: min(420px, 92vw); }
|
|
.modal .row { display: flex; gap: 8px; align-items: center; justify-content: space-between; margin: 10px 0; }
|
|
.modal .row label { color: var(--text-muted); }
|
|
.modal-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 16px; }
|
|
.toggle { display: inline-flex; align-items: center; gap: 6px; }
|
|
|
|
.drawer-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 50; }
|
|
.drawer { position: absolute; top: 0; right: 0; height: 100%; width: min(440px, 92vw); background: var(--card-bg); border-left: 1px solid var(--border); display: flex; flex-direction: column; box-shadow: -8px 0 24px rgba(0,0,0,0.4); }
|
|
.drawer-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border); }
|
|
.drawer-head h2 { margin: 0; font-size: 18px; color: var(--text-strong); }
|
|
.drawer-body { padding: 16px 20px; overflow-y: auto; }
|
|
.icon { background: none; border: none; color: var(--text-muted); font-size: 16px; padding: 4px 8px; }
|
|
.panel-section { font-size: 14px; color: var(--text-muted); margin: 18px 0 8px; }
|
|
.toggle-row { display: flex; align-items: center; gap: 8px; padding: 8px 0; }
|
|
.people, .action-list { list-style: none; padding: 0; margin: 0; }
|
|
.people li { padding: 8px 0; border-bottom: 1px solid var(--divider); }
|
|
.me { display: inline-flex; align-items: center; gap: 6px; }
|
|
.me em { color: var(--text-muted); }
|
|
|
|
.add-action { display: flex; gap: 8px; margin-bottom: 8px; }
|
|
.add-action input { flex: 1; }
|
|
.action-row { display: flex; align-items: center; gap: 8px; padding: 6px 0; }
|
|
.action-row .action-text { flex: 1; }
|
|
.action-row .owner { max-width: 120px; }
|
|
.action-list.done .action-row .action-text { text-decoration: line-through; color: var(--text-muted); }
|
|
|
|
.menu-backdrop { position: fixed; inset: 0; z-index: 50; }
|
|
.options-menu { position: absolute; top: 150px; left: 24px; background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px; padding: 6px; min-width: 240px; box-shadow: 0 12px 32px rgba(0,0,0,0.5); display: flex; flex-direction: column; }
|
|
.options-menu .menu-section { font-size: 12px; color: var(--text-muted); padding: 8px 10px 4px; }
|
|
.options-menu .menu-section.danger { color: var(--danger-text); }
|
|
.options-menu button { text-align: left; background: none; border: none; padding: 8px 10px; border-radius: 6px; }
|
|
.options-menu button:hover { background: var(--btn-bg); }
|
|
.options-menu button.danger { color: var(--danger-text); }
|
|
|
|
.export-modal { width: min(820px, 94vw); }
|
|
.export-grid { display: grid; grid-template-columns: 240px 1fr; gap: 16px; margin-top: 8px; }
|
|
.export-preview textarea { width: 100%; min-height: 340px; font-family: ui-monospace, monospace; font-size: 13px; }
|
|
|
|
.pill { background: var(--inset); color: var(--text-muted); border-radius: 9999px; padding: 1px 7px; font-size: 11px; font-family: ui-monospace, monospace; margin-left: 2px; }
|
|
.pill.amber { background: #fbbf24; color: #1a0a00; }
|
|
.locked-banner { color: var(--danger-text); font-size: 13px; font-weight: 600; }
|
|
|
|
/* ===== cabecera del tablero ===== */
|
|
.timer-wrap { margin: 0 auto; }
|
|
.topbar .expiry {
|
|
margin: 0; color: var(--danger-text); font-size: 12px; font-family: ui-monospace, monospace;
|
|
background: var(--inset); border: 1px solid var(--border); border-radius: 9999px; padding: 4px 10px;
|
|
display: inline-flex; align-items: center; gap: 5px;
|
|
}
|
|
.votes-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); background: var(--chip-bg); border: 1px solid var(--border); border-radius: 9999px; padding: 6px 13px; white-space: nowrap; }
|
|
.votes-pill b { color: var(--pos-text); font-family: ui-monospace, monospace; }
|
|
.share-btn { background: var(--accent) !important; color: #fff !important; border: none !important; box-shadow: 0 3px 10px rgba(217,119,6,0.3); font-weight: 600; }
|
|
|
|
/* ===== barra de herramientas ===== */
|
|
.toolbar { background: var(--toolbar-bg, var(--col-bg)); }
|
|
.phase-tabs { display: inline-flex; background: var(--seg-bg); border: 1px solid var(--border); border-radius: 9px; padding: 3px; }
|
|
.phase-tabs button { border: none; background: transparent; color: var(--text-muted); border-radius: 6px; padding: 7px 14px; font-size: 12.5px; font-weight: 500; }
|
|
.phase-tabs button.on { background: #fbbf24; color: #1a0a00; font-weight: 600; }
|
|
.phase-tabs button:disabled { cursor: default; }
|
|
.phase-tabs button:hover { border: none; }
|
|
.tb-divider { width: 1px; height: 24px; background: var(--border); }
|
|
.tb-btn { background: transparent; }
|
|
.tb-votes { background: var(--btn-bg); color: var(--pos-text); border: 1px solid var(--border); }
|
|
.tb-votes.on { border-color: var(--ok); background: rgba(34,197,94,0.12); }
|
|
.tb-hint { margin-left: auto; font-size: 12px; color: var(--text-meta); white-space: nowrap; }
|
|
|
|
/* ===== menú de columna ===== */
|
|
.col-head input { font-size: 16px; font-weight: 700; padding: 6px 8px; }
|
|
.col-menu-wrap { position: relative; display: inline-flex; }
|
|
.col-menu-btn { border: none; background: transparent; color: var(--text-muted); font-size: 18px; line-height: 1; padding: 0 4px; }
|
|
.col-menu { position: absolute; right: 0; top: 26px; z-index: 60; background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px; padding: 6px; min-width: 170px; box-shadow: 0 12px 32px rgba(0,0,0,0.5); display: flex; flex-direction: column; }
|
|
.col-menu button { text-align: left; background: none; border: none; padding: 8px 10px; border-radius: 6px; font-size: 13px; }
|
|
.col-menu button:hover { background: var(--btn-bg); }
|
|
.col-menu button.danger { color: var(--danger-text); }
|
|
.col-menu button:disabled { opacity: 0.4; }
|
|
|
|
/* ===== añadir columna ===== */
|
|
.add-column { align-self: start; min-width: 180px; min-height: 200px; background: transparent; border: 2px dashed var(--col-border); border-radius: 14px; color: var(--text-muted); font-size: 14px; font-weight: 600; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; padding: 24px 14px; }
|
|
.add-column:hover { border-color: var(--accent); color: var(--text); }
|
|
.add-column-plus { width: 38px; height: 38px; border-radius: 11px; background: var(--inset); display: flex; align-items: center; justify-content: center; font-size: 22px; line-height: 1; }
|