/* Status Bar */ .status-bar { display: flex; align-items: center; gap: var(--badge-spacing); padding: var(--box-padding); margin-block: var(--badge-spacing) var(--box-spacing); border-radius: var(--border-radius); } .status-bar[hidden] { display: none; } .status-indicator { width: 0.5em; height: 0.5em; border-radius: 50%; flex-shrink: 0; } .status-bar.status-none .status-indicator { background: var(--secondary); } .status-bar.status-minor .status-indicator { background: var(--warning); } .status-bar.status-major .status-indicator, .status-bar.status-critical .status-indicator { background: var(--dangerous); } .status-bar.status-minor, .status-bar.status-major, .status-bar.status-critical { background: rgb(from var(--warning) r g b / .1); } .status-bar.status-major, .status-bar.status-critical { background: rgb(from var(--dangerous) r g b / .1); } .dashboard .page-content { padding: var(--page-padding); } .dashboard-links { display: flex; gap: 1.25rem; align-items: center; flex: 1; } .dashboard-link { color: var(--text); text-decoration: none; opacity: var(--semi-transparent); transition: opacity var(--transition-duration); cursor: pointer; } .dashboard-link:hover { opacity: 1; color: var(--text-accent); } .dashboard-link:last-child { margin-left: auto; } .dashboard section { margin-bottom: var(--page-spacing); width: 100%; } .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--box-spacing); } .section-header h2 { font-size: calc(var(--font-size) * 1.3); } .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(22em, 1fr)); gap: var(--box-spacing); } .card { position: relative; background: var(--f3-bg); border: var(--border-width) solid var(--f3-border); display: flex; overflow: visible; border-radius: var(--border-radius); padding: var(--box-padding); gap: var(--box-spacing); } .card.clickable { cursor: pointer; } .card.clickable:hover { border-color: var(--primary); filter: var(--hover-filter); } .card-image { aspect-ratio: 1; background: var(--f2-bg); overflow: hidden; border-radius: var(--border-radius) var(--border-radius) 0 0; flex: 0 0 8em; height: 8em; border-radius: var(--border-radius); } .card-image img { width: 100%; height: 100%; object-fit: cover; } .card-body { display: flex; flex-direction: column; overflow: hidden; flex: 3; } .card-title-row { display: flex; align-items: center; gap: var(--badge-spacing); } .card-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card-desc { display: -webkit-box; overflow: hidden; } .badge { padding: var(--badge-padding); background: var(--f2-bg); border: var(--border-width) solid var(--f2-border); white-space: nowrap; flex-shrink: 0; font-size: var(--font-size); border-radius: var(--border-radius); } .card-badges { display: flex; flex-wrap: wrap; gap: var(--badge-spacing); margin-top: var(--badge-spacing); } .badge-forced-feature { background: rgb(from var(--dangerous) r g b / .1); border-color: rgb(from var(--dangerous) r g b / .25); color: var(--dangerous); } .badge-feature { background: rgb(from var(--primary) r g b / .1); border-color: rgb(from var(--primary) r g b / .25); color: var(--primary); } .badge-skill { background: rgb(from var(--secondary) r g b / .1); border-color: rgb(from var(--secondary) r g b / .25); color: var(--secondary); } .section-add-btn { font-size: var(--font-size); } /* Card Menu */ .card-menu { position: relative; margin-left: auto; flex-shrink: 0; z-index: 10; } .card-menu-trigger { transition: opacity var(--transition-duration); font-size: var(--font-size); background: var(--f3-bg); border: var(--border-width) solid var(--f3-border); border-radius: var(--border-radius); } .card-menu-dropdown { position: fixed; background: var(--f3-bg); border: var(--border-width) solid var(--f3-border); border-radius: var(--border-radius); min-width: 10em; display: flex; flex-direction: column; overflow: hidden; padding-block: var(--badge-spacing); z-index: 1000; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } .card-menu-dropdown[hidden] { display: none; } .card-menu-item { border: none; border-radius: unset; text-align: left; padding: var(--menu-item-padding); background: none; white-space: nowrap; display: flex; align-items: center; gap: var(--badge-spacing); } .card-menu-item:not(:disabled):hover { background: var(--f2-bg); border: none; } .card-menu-item:disabled { opacity: var(--semi-transparent); cursor: not-allowed; } .card-meta { display: flex; flex-direction: column; gap: var(--badge-spacing); margin-top: var(--badge-spacing); } .card-meta:empty { display: none; } .card-meta-item { opacity: var(--semi-transparent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card-git-status { display: flex; align-items: center; gap: var(--badge-spacing); opacity: 1; } .git-badge { padding: var(--badge-padding); font-size: var(--font-size); border-radius: var(--border-radius); } .git-add { background: rgb(from var(--secondary) r g b / .15); color: var(--secondary); } .git-edit { background: rgb(from var(--warning) r g b / .15); color: var(--warning); } .git-delete { background: rgb(from var(--dangerous) r g b / .15); color: var(--dangerous); } .git-outgoing { background: rgb(from var(--text) r g b / .15); color: var(--text); } /* Telegram Link Modal */ .modal-overlay { position: fixed; inset: 0; background: rgb(from var(--f1-bg) r g b / var(--semi-transparent)); display: flex; align-items: center; justify-content: center; z-index: 1000; } .telegram-link-modal { background: var(--f2-bg); border: var(--border-width) solid var(--f2-border); border-radius: var(--border-radius); width: 90vw; max-width: 28em; display: flex; flex-direction: column; overflow: hidden; } .telegram-link-modal .modal-header { display: flex; align-items: center; justify-content: space-between; padding: var(--box-padding); border-bottom: var(--border-width) solid var(--f1-border); background: var(--f1-bg); } .telegram-link-modal .modal-header h3 { margin: 0; display: flex; align-items: center; gap: var(--badge-spacing); } .telegram-link-modal .modal-body { padding: var(--box-padding); display: flex; flex-direction: column; gap: var(--box-spacing); } .telegram-code-display { display: flex; align-items: center; justify-content: center; gap: var(--box-spacing); padding: var(--box-padding); background: var(--f1-bg); border: var(--border-width) solid var(--f1-border); border-radius: var(--border-radius); } .telegram-code-display code { font-size: calc(var(--font-size) * 1.5); font-weight: bold; letter-spacing: .1em; color: var(--primary); user-select: all; } .telegram-code-hint { opacity: var(--semi-transparent); text-align: center; display: flex; align-items: center; justify-content: center; gap: var(--badge-spacing); } /* ── Telegram Settings Status Box ── */ .telegram-status-box { margin: 0 0 var(--box-spacing) 0; background: var(--f3-bg); border: var(--border-width) solid var(--f3-border); border-radius: var(--border-radius); padding: var(--box-padding); display: flex; flex-direction: column; gap: var(--badge-spacing); } .tg-status-row { display: flex; gap: var(--badge-spacing); } .tg-status-row.tg-error { background: color-mix(in srgb, var(--danger) 8%, transparent); } .tg-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .tg-value { flex: 3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .tg-badge-ok { background: color-mix(in srgb, var(--success) 15%, transparent); color: var(--success); } .tg-badge-off { background: color-mix(in srgb, var(--warning) 15%, transparent); color: var(--warning); }