:root { color-scheme: dark; --bg: #080a0f; --panel: #10131a; --panel-soft: #0d1016; --card: #12151c; --text: #e8eaf0; --muted: #7e8799; --line: #202530; --line-strong: #292f3b; --accent: #8b7cf6; --accent-strong: #b8adff; --accent-soft: rgba(139, 124, 246, 0.12); --warn: #e5b05e; --danger: #ec7b82; --ok: #51d49a; --shadow: 0 28px 90px rgba(0, 0, 0, 0.42); } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; background: radial-gradient(circle at 70% -20%, #17152b 0, transparent 34%), var(--bg); color: var(--text); font: 12px/1.45 Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 0; } button, input, textarea, select { font: inherit; } button { color: inherit; cursor: pointer; } .login-shell { min-height: 100vh; display: grid; place-items: center; padding: 24px; } .login { width: min(420px, 100%); padding: 32px; border: 1px solid var(--line); border-radius: 12px; background: linear-gradient(145deg, rgba(18, 21, 29, 0.98), rgba(10, 12, 18, 0.98)); box-shadow: var(--shadow); } .login h1, .view-title h1 { margin: 0; font-size: 26px; line-height: 1.1; } .login p, .view-title p { margin: 8px 0 0; color: var(--muted); font-size: 11px; } .field { display: grid; gap: 7px; margin-top: 16px; } label { color: #aab1bf; font-size: 10px; font-weight: 650; } input, textarea, select { width: 100%; min-height: 38px; padding: 9px 10px; border: 1px solid var(--line-strong); border-radius: 7px; outline: none; color: #e7e9ef; background: #0c0f14; } textarea { resize: vertical; min-height: 92px; } input:focus, textarea:focus, select:focus { border-color: #6559b8; box-shadow: 0 0 0 3px rgba(139, 124, 246, 0.1); } .primary, .ghost, .danger { min-height: 38px; padding: 8px 12px; border-radius: 7px; font-weight: 700; } .primary { border: 1px solid #443d7c; background: #211d39; color: #c1b8ff; } .primary:hover { background: #29234a; } .ghost { border: 1px solid var(--line); background: var(--panel); color: #a5adba; } .danger { border: 1px solid rgba(236, 123, 130, 0.3); background: rgba(193, 70, 79, 0.12); color: #efa2a7; } .app-shell { min-height: 100vh; display: grid; grid-template-columns: 224px minmax(0, 1fr); } .sidebar { position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column; gap: 20px; padding: 22px 14px 14px; border-right: 1px solid #1a1e27; background: rgba(9, 11, 16, 0.94); backdrop-filter: blur(18px); } .brand { display: grid; gap: 3px; padding: 0 8px 5px; } .brand strong { font-size: 13px; letter-spacing: 0.14em; text-transform: uppercase; } .brand span, .user small, .meta { color: var(--muted); font-size: 10px; } .nav { display: flex; flex-direction: column; gap: 3px; } .nav button { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 34px; padding: 9px 10px; border: 0; border-radius: 7px; background: transparent; color: #8991a1; text-align: left; } .nav button:hover, .nav button.active { background: var(--accent-soft); color: #ececf5; } .nav button.active { box-shadow: inset 2px 0 var(--accent); } .user { margin-top: auto; display: grid; gap: 12px; padding-top: 10px; border-top: 1px solid #1b1f28; } .content { min-width: 0; padding: 16px; } .topbar { min-height: 62px; display: flex; gap: 16px; justify-content: space-between; align-items: center; margin: -16px -16px 16px; padding: 0 30px; border-bottom: 1px solid #191d25; background: rgba(8, 10, 15, 0.68); backdrop-filter: blur(16px); } .actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; } .status-pill { display: inline-flex; align-items: center; gap: 7px; min-height: 30px; padding: 6px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--panel); color: #8c95a5; font-size: 10px; white-space: nowrap; } .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--warn); } .dot.ok { background: var(--ok); box-shadow: 0 0 7px rgba(81, 212, 154, 0.4); } .quick-create { display: grid; grid-template-columns: minmax(180px, 360px) max-content; gap: 8px; align-items: stretch; margin-bottom: 12px; } .quick-create input { font-size: 10px; } .quick-create button { min-width: 100px; padding: 0 14px; border: 1px solid #443d7c; border-radius: 8px; background: #211d39; color: #c1b8ff; font-size: 9px; } .kanban { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; align-items: start; } .kanban-column { min-width: 0; min-height: 380px; padding: 12px; border: 1px solid var(--line); border-radius: 9px; background: rgba(14, 17, 23, 0.8); } .kanban-column > header { display: flex; justify-content: space-between; padding: 5px 3px 14px; color: #aeb4c0; font-size: 10px; } .kanban-column > header b { padding: 1px 6px; border-radius: 8px; background: #242936; } .dropzone { min-height: 320px; border-radius: 8px; transition: background 0.16s ease, box-shadow 0.16s ease; } .dropzone.drag-over { background: rgba(139, 124, 246, 0.08); box-shadow: inset 0 0 0 2px rgba(139, 124, 246, 0.25); } .empty-state { margin: 0; padding: 35px 0; text-align: center; color: #596171; font-size: 9px; } .task-card { margin-bottom: 9px; padding: 14px; border: 1px solid #252a35; border-radius: 8px; background: var(--card); cursor: grab; transition: border-color 0.14s ease, transform 0.14s ease; } .task-card:hover, .task-card:focus-visible { border-color: #343947; outline: none; transform: translateY(-1px); } .task-card.dragging { opacity: 0.55; cursor: grabbing; } .task-card-head { display: flex; gap: 8px; align-items: center; justify-content: space-between; } .task-card h3 { margin: 10px 0 12px; color: #eef0f5; font-size: 11px; line-height: 1.4; overflow-wrap: anywhere; } .task-card p { margin: -4px 0 12px; color: var(--muted); font-size: 10px; line-height: 1.45; overflow-wrap: anywhere; } .task-card select { width: 100%; min-height: 32px; margin-bottom: 12px; padding: 7px 8px; border: 1px solid #292f3b; border-radius: 7px; color: #c8ccd5; background: #0c0f14; font-size: 9px; cursor: pointer; } .task-footer { display: flex; gap: 5px; align-items: center; justify-content: space-between; color: var(--muted); font-size: 8px; } .priority { color: #9b91e6; font-size: 8px; text-transform: uppercase; } .priority.urgent, .priority.high { color: var(--warn); } .priority.low { color: var(--ok); } .task-edit-btn { width: 24px; height: 24px; display: grid; place-items: center; border: 1px solid transparent; border-radius: 6px; background: transparent; color: #687181; opacity: 0; } .task-card:hover .task-edit-btn, .task-card:focus-within .task-edit-btn { opacity: 1; } .task-edit-btn:hover { border-color: #343947; color: #c1b8ff; background: #18152a; } .badge { display: inline-flex; align-items: center; min-height: 22px; padding: 3px 8px; border-radius: 10px; background: var(--accent-soft); color: var(--accent-strong); font-size: 9px; font-weight: 750; } .panel { max-width: 760px; padding: 18px; border: 1px solid var(--line); border-radius: 9px; background: linear-gradient(145deg, rgba(18, 21, 29, 0.96), rgba(12, 15, 21, 0.96)); } .panel + .panel { margin-top: 14px; } .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .error { margin-top: 12px; color: var(--danger); font-weight: 700; } dialog { width: min(560px, calc(100vw - 32px)); padding: 22px; border: 1px solid var(--line); border-radius: 10px; background: linear-gradient(145deg, rgba(18, 21, 29, 0.98), rgba(10, 12, 18, 0.98)); color: var(--text); box-shadow: var(--shadow); } dialog::backdrop { background: rgba(0, 0, 0, 0.68); backdrop-filter: blur(3px); } dialog h2 { margin: 0; font-size: 18px; } .dialog-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 16px; } .dialog-meta { min-height: 20px; margin-top: 4px; color: var(--muted); font-size: 10px; } @media (max-width: 980px) { .app-shell { grid-template-columns: 1fr; } .sidebar { position: sticky; z-index: 2; height: auto; border-right: 0; border-bottom: 1px solid var(--line); padding: 12px; } .nav, .user { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); } .kanban { grid-template-columns: repeat(2, minmax(220px, 1fr)); } } @media (max-width: 640px) { .content { padding: 16px; } .topbar { display: grid; margin: -16px -16px 16px; padding: 16px; } .actions { justify-content: flex-start; } .quick-create, .kanban, .grid { grid-template-columns: 1fr; } .kanban-column { min-height: 260px; } }