diff --git a/modules/rsocials/mod.ts b/modules/rsocials/mod.ts index f046d39..7eacbec 100644 --- a/modules/rsocials/mod.ts +++ b/modules/rsocials/mod.ts @@ -649,32 +649,32 @@ const THREAD_CSS = ` .thread-btn { padding: 0.5rem 1rem; border-radius: 8px; border: none; font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.15s; } .thread-btn--primary { background: #6366f1; color: white; } .thread-btn--primary:hover { background: #818cf8; } -.thread-btn--outline { background: transparent; color: #94a3b8; border: 1px solid #334155; } +.thread-btn--outline { background: transparent; color: var(--rs-text-secondary); border: 1px solid var(--rs-input-border); } .thread-btn--outline:hover { border-color: #6366f1; color: #c4b5fd; } .thread-btn--success { background: #10b981; color: white; } .thread-btn--success:hover { background: #34d399; } .thread-btn:disabled { opacity: 0.5; cursor: not-allowed; } .thread-compose { position: sticky; top: 1rem; align-self: start; display: flex; flex-direction: column; gap: 1rem; } .thread-compose__textarea { - width: 100%; min-height: 320px; background: #1e293b; color: #e2e8f0; border: 1px solid #334155; + width: 100%; min-height: 320px; background: var(--rs-bg-surface); color: var(--rs-text-primary); border: 1px solid var(--rs-input-border); border-radius: 0.75rem; padding: 1rem; font-family: inherit; font-size: 0.9rem; resize: vertical; line-height: 1.6; box-sizing: border-box; } .thread-compose__textarea:focus { outline: none; border-color: #6366f1; } -.thread-compose__textarea::placeholder { color: #475569; } +.thread-compose__textarea::placeholder { color: var(--rs-text-muted); } .thread-compose__fields { display: flex; gap: 0.75rem; } .thread-compose__input { - flex: 1; background: #1e293b; color: #e2e8f0; border: 1px solid #334155; + flex: 1; background: var(--rs-bg-surface); color: var(--rs-text-primary); border: 1px solid var(--rs-input-border); border-radius: 8px; padding: 0.5rem 0.75rem; font-size: 0.85rem; box-sizing: border-box; } .thread-compose__input:focus { outline: none; border-color: #6366f1; } -.thread-compose__input::placeholder { color: #475569; } +.thread-compose__input::placeholder { color: var(--rs-text-muted); } .thread-compose__title { - width: 100%; background: #1e293b; color: #e2e8f0; border: 1px solid #334155; + width: 100%; background: var(--rs-bg-surface); color: var(--rs-text-primary); border: 1px solid var(--rs-input-border); border-radius: 8px; padding: 0.5rem 0.75rem; font-size: 0.85rem; box-sizing: border-box; } .thread-compose__title:focus { outline: none; border-color: #6366f1; } -.thread-compose__title::placeholder { color: #475569; } +.thread-compose__title::placeholder { color: var(--rs-text-muted); } .thread-drafts { grid-column: 1 / -1; } .thread-drafts__toggle { cursor: pointer; user-select: none; } .thread-drafts__list { @@ -682,24 +682,24 @@ const THREAD_CSS = ` margin-top: 0.75rem; } .thread-drafts__list[hidden] { display: none; } -.thread-drafts__empty { color: #475569; font-size: 0.8rem; padding: 0.5rem 0; } +.thread-drafts__empty { color: var(--rs-text-muted); font-size: 0.8rem; padding: 0.5rem 0; } .thread-draft-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0.75rem; - background: #1e293b; border: 1px solid #334155; border-radius: 8px; + background: var(--rs-bg-surface); border: 1px solid var(--rs-input-border); border-radius: 8px; transition: border-color 0.15s; cursor: pointer; } .thread-draft-item:hover { border-color: #6366f1; } .thread-draft-item--active { border-color: #6366f1; background: rgba(99,102,241,0.1); } .thread-draft-item__info { flex: 1; min-width: 0; } -.thread-draft-item__info strong { display: block; font-size: 0.8rem; color: #e2e8f0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -.thread-draft-item__info span { font-size: 0.7rem; color: #64748b; } +.thread-draft-item__info strong { display: block; font-size: 0.8rem; color: var(--rs-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.thread-draft-item__info span { font-size: 0.7rem; color: var(--rs-text-muted); } .thread-draft-item__delete { - background: none; border: none; color: #64748b; font-size: 1.2rem; cursor: pointer; + background: none; border: none; color: var(--rs-text-muted); font-size: 1.2rem; cursor: pointer; padding: 0 4px; line-height: 1; flex-shrink: 0; } .thread-draft-item__delete:hover { color: #ef4444; } .thread-image-section { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; } -.thread-image-preview { border-radius: 8px; overflow: hidden; border: 1px solid #334155; } +.thread-image-preview { border-radius: 8px; overflow: hidden; border: 1px solid var(--rs-input-border); } .thread-image-preview[hidden] { display: none; } .thread-image-preview img { display: block; max-width: 200px; height: auto; } #share-link-area { grid-column: 1 / -1; } @@ -710,20 +710,20 @@ const THREAD_CSS = ` } .thread-share-link code { font-size: 0.75rem; color: #7dd3fc; } .thread-share-link button { - background: none; border: none; color: #94a3b8; cursor: pointer; font-size: 0.75rem; padding: 2px 6px; + background: none; border: none; color: var(--rs-text-secondary); cursor: pointer; font-size: 0.75rem; padding: 2px 6px; } -.thread-share-link button:hover { color: #e2e8f0; } +.thread-share-link button:hover { color: var(--rs-text-primary); } .thread-preview { display: flex; flex-direction: column; gap: 0; } -.thread-preview__empty { color: #475569; text-align: center; padding: 3rem 1rem; font-size: 0.9rem; } +.thread-preview__empty { color: var(--rs-text-muted); text-align: center; padding: 3rem 1rem; font-size: 0.9rem; } .tweet-card { - position: relative; background: #1e293b; border: 1px solid #334155; border-radius: 0.75rem; + position: relative; background: var(--rs-bg-surface); border: 1px solid var(--rs-input-border); border-radius: 0.75rem; padding: 1rem; margin-bottom: 0; } .tweet-card + .tweet-card { border-top-left-radius: 0; border-top-right-radius: 0; margin-top: -1px; } .tweet-card:has(+ .tweet-card) { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .tweet-card__connector { position: absolute; left: 29px; top: -1px; width: 2px; height: 1rem; - background: #334155; z-index: 1; + background: var(--rs-input-border); z-index: 1; } .tweet-card__header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.5rem; } .tweet-card__avatar { @@ -731,16 +731,16 @@ const THREAD_CSS = ` display: flex; align-items: center; justify-content: center; color: white; font-weight: 700; font-size: 1rem; flex-shrink: 0; } -.tweet-card__name { font-weight: 700; color: #f1f5f9; font-size: 0.9rem; } -.tweet-card__handle { color: #64748b; font-size: 0.85rem; } -.tweet-card__dot { color: #64748b; font-size: 0.85rem; } -.tweet-card__time { color: #64748b; font-size: 0.85rem; } -.tweet-card__content { color: #e2e8f0; font-size: 0.95rem; line-height: 1.6; margin: 0 0 0.75rem; white-space: pre-wrap; word-break: break-word; } +.tweet-card__name { font-weight: 700; color: var(--rs-text-primary); font-size: 0.9rem; } +.tweet-card__handle { color: var(--rs-text-muted); font-size: 0.85rem; } +.tweet-card__dot { color: var(--rs-text-muted); font-size: 0.85rem; } +.tweet-card__time { color: var(--rs-text-muted); font-size: 0.85rem; } +.tweet-card__content { color: var(--rs-text-primary); font-size: 0.95rem; line-height: 1.6; margin: 0 0 0.75rem; white-space: pre-wrap; word-break: break-word; } .tweet-card__footer { display: flex; align-items: center; justify-content: space-between; } .tweet-card__actions { display: flex; gap: 1.25rem; } -.tweet-card__action { display: flex; align-items: center; gap: 0.3rem; color: #64748b; font-size: 0.8rem; cursor: default; } +.tweet-card__action { display: flex; align-items: center; gap: 0.3rem; color: var(--rs-text-muted); font-size: 0.8rem; cursor: default; } .tweet-card__action svg { width: 16px; height: 16px; } -.tweet-card__meta { display: flex; align-items: center; gap: 0.75rem; font-size: 0.75rem; color: #64748b; } +.tweet-card__meta { display: flex; align-items: center; gap: 0.75rem; font-size: 0.75rem; color: var(--rs-text-muted); } .tweet-card__chars { font-variant-numeric: tabular-nums; } .tweet-card__chars--over { color: #ef4444; font-weight: 600; } .tweet-card__thread-num { color: #6366f1; font-weight: 600; } @@ -751,18 +751,18 @@ const THREAD_CSS = ` .thread-export-dropdown { position: relative; } .thread-export-menu { position: absolute; top: calc(100% + 4px); right: 0; z-index: 100; - background: #1e293b; border: 1px solid #334155; border-radius: 8px; + background: var(--rs-bg-surface); border: 1px solid var(--rs-input-border); border-radius: 8px; min-width: 180px; overflow: hidden; - box-shadow: 0 8px 24px rgba(0,0,0,0.4); + box-shadow: 0 8px 24px var(--rs-shadow-lg); } .thread-export-menu[hidden] { display: none; } .thread-export-menu button { display: block; width: 100%; padding: 0.6rem 0.75rem; border: none; - background: transparent; color: #e2e8f0; font-size: 0.85rem; + background: transparent; color: var(--rs-text-primary); font-size: 0.85rem; text-align: left; cursor: pointer; transition: background 0.1s; } .thread-export-menu button:hover { background: rgba(99,102,241,0.15); } -.thread-export-menu button + button { border-top: 1px solid rgba(255,255,255,0.05); } +.thread-export-menu button + button { border-top: 1px solid var(--rs-bg-hover); } `; function renderThreadBuilderPage(space: string, threadData?: ThreadData | null): string { @@ -1404,11 +1404,11 @@ const THREAD_RO_CSS = ` .thread-ro { max-width: 640px; margin: 0 auto; padding: 2rem 1rem; } .thread-ro__header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem; } .thread-ro__author { display: flex; align-items: center; gap: 0.75rem; } -.thread-ro__name { font-weight: 700; color: #f1f5f9; font-size: 1.1rem; } -.thread-ro__handle { color: #64748b; font-size: 0.9rem; } -.thread-ro__meta { display: flex; align-items: center; gap: 0.5rem; color: #64748b; font-size: 0.85rem; } -.thread-ro__title { font-size: 1.4rem; color: #f1f5f9; margin: 0 0 1.5rem; line-height: 1.3; } -.thread-ro__image { margin-bottom: 1.5rem; border-radius: 12px; overflow: hidden; border: 1px solid #334155; } +.thread-ro__name { font-weight: 700; color: var(--rs-text-primary); font-size: 1.1rem; } +.thread-ro__handle { color: var(--rs-text-muted); font-size: 0.9rem; } +.thread-ro__meta { display: flex; align-items: center; gap: 0.5rem; color: var(--rs-text-muted); font-size: 0.85rem; } +.thread-ro__title { font-size: 1.4rem; color: var(--rs-text-primary); margin: 0 0 1.5rem; line-height: 1.3; } +.thread-ro__image { margin-bottom: 1.5rem; border-radius: 12px; overflow: hidden; border: 1px solid var(--rs-input-border); } .thread-ro__image img { display: block; width: 100%; height: auto; } .thread-ro__cards { margin-bottom: 1.5rem; } .thread-ro__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 2rem; padding-bottom: 2rem; border-bottom: 1px solid #334155; } diff --git a/server/output-list.ts b/server/output-list.ts index 17013a7..bc24164 100644 --- a/server/output-list.ts +++ b/server/output-list.ts @@ -105,20 +105,20 @@ export function renderOutputListPage( .output-list { max-width: 960px; margin: 0 auto; padding: 2rem 1rem; } .output-list__header { display: flex; align-items: center; gap: 1rem; margin-bottom: 2rem; } .output-list__icon { font-size: 2.5rem; } -.output-list__title { margin: 0; font-size: 1.5rem; color: #f1f5f9; } -.output-list__desc { margin: 0.25rem 0 0; color: #94a3b8; font-size: 0.95rem; } +.output-list__title { margin: 0; font-size: 1.5rem; color: var(--rs-text-primary); } +.output-list__desc { margin: 0.25rem 0 0; color: var(--rs-text-secondary); font-size: 0.95rem; } .output-list__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; } -.output-list__loading { color: #64748b; text-align: center; padding: 3rem 0; grid-column: 1 / -1; } -.output-list__empty { text-align: center; padding: 4rem 1rem; grid-column: 1 / -1; color: #64748b; } +.output-list__loading { color: var(--rs-text-muted); text-align: center; padding: 3rem 0; grid-column: 1 / -1; } +.output-list__empty { text-align: center; padding: 4rem 1rem; grid-column: 1 / -1; color: var(--rs-text-muted); } .output-list__empty-icon { font-size: 3rem; margin-bottom: 0.5rem; } .output-card { display: block; - background: #1e293b; - border: 1px solid #334155; + background: var(--rs-bg-surface); + border: 1px solid var(--rs-bg-surface-raised); border-radius: 0.75rem; padding: 1.25rem; text-decoration: none; @@ -126,9 +126,9 @@ export function renderOutputListPage( transition: border-color 0.15s, transform 0.15s; } .output-card:hover { border-color: #6366f1; transform: translateY(-2px); } -.output-card__title { font-size: 1.05rem; font-weight: 600; color: #f1f5f9; margin-bottom: 0.5rem; } -.output-card__desc { font-size: 0.875rem; color: #94a3b8; line-height: 1.4; margin-bottom: 0.5rem; } -.output-card__date { font-size: 0.75rem; color: #64748b; } +.output-card__title { font-size: 1.05rem; font-weight: 600; color: var(--rs-text-primary); margin-bottom: 0.5rem; } +.output-card__desc { font-size: 0.875rem; color: var(--rs-text-secondary); line-height: 1.4; margin-bottom: 0.5rem; } +.output-card__date { font-size: 0.75rem; color: var(--rs-text-muted); } `; return renderShell({ diff --git a/server/shell.ts b/server/shell.ts index f2198cb..dd7a8a5 100644 --- a/server/shell.ts +++ b/server/shell.ts @@ -105,8 +105,7 @@ export function renderShell(opts: ShellOptions): string {
Link an email for notifications and account recovery.
+Link an email for notifications and account recovery.
Enter the 6-digit code sent to ${emailAddr.replace(/
+Enter the 6-digit code sent to ${emailAddr.replace(/
Register an additional passkey for backup access.${acctStatus ? ` (${acctStatus.credentialCount} passkey${acctStatus.credentialCount !== 1 ? "s" : ""} registered)` : ""}
+Register an additional passkey for backup access.${acctStatus ? ` (${acctStatus.credentialCount} passkey${acctStatus.credentialCount !== 1 ? "s" : ""} registered)` : ""}
Choose trusted contacts who can help recover your account.
+Choose trusted contacts who can help recover your account.
${guardians.length < 3 ? `No spaces yet. Create one to get started!
` + ? `No spaces yet. Create one to get started!
` : ""; overlay.innerHTML = ` @@ -1397,9 +1397,8 @@ const STYLES = ` min-width: 16px; height: 16px; border-radius: 8px; background: #ef4444; color: white; font-size: 0.6rem; font-weight: 700; display: flex; align-items: center; justify-content: center; - padding: 0 4px; border: 2px solid #1e293b; line-height: 1; + padding: 0 4px; border: 2px solid var(--rs-bg-surface); line-height: 1; } -.notif-badge { border-color: var(--rs-bg-surface); } /* Notification items in dropdown */ .dropdown-section-label { @@ -1411,7 +1410,7 @@ const STYLES = ` } .notif-text { font-size: 0.8rem; line-height: 1.4; color: var(--rs-text-primary); } .notif-msg { - font-size: 0.75rem; color: #94a3b8; font-style: italic; + font-size: 0.75rem; color: var(--rs-text-secondary); font-style: italic; margin-top: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 240px; } @@ -1522,7 +1521,7 @@ const MODAL_STYLES = ` `; const SETTINGS_STYLES = ` -.info-text { margin-top: 1rem; font-size: 0.8rem; color: #475569; line-height: 1.5; } +.info-text { margin-top: 1rem; font-size: 0.8rem; color: var(--rs-text-muted); line-height: 1.5; } .btn--success { background: #059669 !important; color: white; cursor: default; } .btn--small { padding: 10px 16px; flex: none; } .input-row { display: flex; gap: 8px; align-items: stretch; } @@ -1530,24 +1529,24 @@ const SETTINGS_STYLES = ` .contact-list { margin-top: 12px; display: flex; flex-direction: column; gap: 6px; } .contact-item { display: flex; align-items: center; justify-content: space-between; - padding: 8px 12px; border-radius: 8px; background: rgba(255,255,255,0.05); - border: 1px solid rgba(255,255,255,0.1); font-size: 0.9rem; color: #e2e8f0; + padding: 8px 12px; border-radius: 8px; background: var(--rs-bg-hover); + border: 1px solid var(--rs-border); font-size: 0.9rem; color: var(--rs-text-primary); } .contact-remove { - background: none; border: none; color: #64748b; font-size: 1.2rem; + background: none; border: none; color: var(--rs-text-muted); font-size: 1.2rem; cursor: pointer; padding: 2px 6px; border-radius: 4px; line-height: 1; } .contact-remove:hover { color: #ef4444; background: rgba(239,68,68,0.1); } .threshold-row { display: flex; align-items: center; gap: 8px; margin-top: 12px; - font-size: 0.85rem; color: #94a3b8; + font-size: 0.85rem; color: var(--rs-text-secondary); } .threshold-row label { white-space: nowrap; } .threshold-row select { - padding: 6px 10px; border-radius: 6px; background: rgba(255,255,255,0.08); - border: 1px solid rgba(255,255,255,0.15); color: white; font-size: 0.85rem; + padding: 6px 10px; border-radius: 6px; background: var(--rs-btn-secondary-bg); + border: 1px solid var(--rs-border); color: var(--rs-text-primary); font-size: 0.85rem; } -.threshold-hint { color: #64748b; font-size: 0.8rem; } +.threshold-hint { color: var(--rs-text-muted); font-size: 0.8rem; } `; const ACCOUNT_MODAL_STYLES = ` @@ -1557,10 +1556,10 @@ const ACCOUNT_MODAL_STYLES = ` justify-content: center; z-index: 10000; animation: fadeIn 0.2s; } .account-modal { - background: #1e293b; border: 1px solid rgba(255,255,255,0.1); + background: var(--rs-bg-surface); border: 1px solid var(--rs-border); border-radius: 16px; padding: 2rem; max-width: 520px; width: 92%; - max-height: 85vh; overflow-y: auto; color: white; position: relative; - box-shadow: 0 20px 60px rgba(0,0,0,0.4); animation: slideUp 0.3s; + max-height: 85vh; overflow-y: auto; color: var(--rs-text-primary); position: relative; + box-shadow: var(--rs-shadow-lg); animation: slideUp 0.3s; text-align: left; } .account-modal h2 { @@ -1569,29 +1568,29 @@ const ACCOUNT_MODAL_STYLES = ` -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .account-section { - border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; + border: 1px solid var(--rs-btn-secondary-bg); border-radius: 10px; margin-bottom: 8px; overflow: hidden; transition: border-color 0.2s; } -.account-section:hover { border-color: rgba(255,255,255,0.15); } +.account-section:hover { border-color: var(--rs-border); } .account-section.open { border-color: rgba(6,182,212,0.3); } .account-section-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; cursor: pointer; font-size: 0.9rem; font-weight: 500; transition: background 0.15s; user-select: none; } -.account-section-header:hover { background: rgba(255,255,255,0.04); } -.section-arrow { font-size: 0.7rem; color: #64748b; transition: transform 0.2s; } +.account-section-header:hover { background: var(--rs-bg-hover); } +.section-arrow { font-size: 0.7rem; color: var(--rs-text-muted); transition: transform 0.2s; } .account-section-body { padding: 0 16px 16px; animation: fadeIn 0.15s; } .account-section--inline { - border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; + border: 1px solid var(--rs-btn-secondary-bg); border-radius: 10px; margin-bottom: 8px; padding: 4px 0; } .account-section--inline .account-section-header { cursor: default; } .account-section--inline .account-section-header:hover { background: none; } .toggle-hint { - padding: 0 16px 10px; font-size: 0.75rem; color: #64748b; line-height: 1.4; + padding: 0 16px 10px; font-size: 0.75rem; color: var(--rs-text-muted); line-height: 1.4; } .guardian-piece { font-size: 1.1rem; flex-shrink: 0; } .status-dot { @@ -1636,10 +1635,10 @@ const SPACES_STYLES = ` justify-content: center; z-index: 10000; animation: fadeIn 0.2s; } .spaces-modal { - background: #1e293b; border: 1px solid rgba(255,255,255,0.1); + background: var(--rs-bg-surface); border: 1px solid var(--rs-border); border-radius: 16px; padding: 2rem; max-width: 720px; width: 92%; - max-height: 85vh; overflow-y: auto; color: white; position: relative; - box-shadow: 0 20px 60px rgba(0,0,0,0.4); animation: slideUp 0.3s; + max-height: 85vh; overflow-y: auto; color: var(--rs-text-primary); position: relative; + box-shadow: var(--rs-shadow-lg); animation: slideUp 0.3s; } .spaces-modal h2 { font-size: 1.5rem; margin-bottom: 0.5rem; @@ -1648,7 +1647,7 @@ const SPACES_STYLES = ` } .spaces-section-label { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; - letter-spacing: 0.05em; color: #64748b; margin: 1rem 0 0.5rem; + letter-spacing: 0.05em; color: var(--rs-text-muted); margin: 1rem 0 0.5rem; } .spaces-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); @@ -1657,13 +1656,13 @@ const SPACES_STYLES = ` .space-card { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 20px 12px; border-radius: 12px; cursor: pointer; - background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); - transition: all 0.2s; text-align: center; color: white; font-family: inherit; + background: var(--rs-bg-hover); border: 1px solid var(--rs-btn-secondary-bg); + transition: all 0.2s; text-align: center; color: var(--rs-text-primary); font-family: inherit; font-size: inherit; } .space-card:hover { - background: rgba(255,255,255,0.08); border-color: rgba(6,182,212,0.4); - transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,0.2); + background: var(--rs-btn-secondary-bg); border-color: rgba(6,182,212,0.4); + transform: translateY(-2px); box-shadow: var(--rs-shadow-md); } .space-card-initial { width: 48px; height: 48px; border-radius: 50%; @@ -1679,7 +1678,7 @@ const SPACES_STYLES = ` display: flex; gap: 6px; flex-wrap: wrap; justify-content: center; } .space-vis { - font-size: 0.7rem; color: #94a3b8; background: rgba(255,255,255,0.06); + font-size: 0.7rem; color: var(--rs-text-secondary); background: var(--rs-bg-hover); padding: 2px 8px; border-radius: 10px; } .space-vis.vis-public { background: rgba(52,211,153,0.15); color: #34d399; } @@ -1693,10 +1692,10 @@ const SPACES_STYLES = ` padding: 2px 8px; border-radius: 10px; font-weight: 600; } .space-card--create { - border-style: dashed; border-color: rgba(255,255,255,0.15); + border-style: dashed; border-color: var(--rs-border); } .space-card--create .space-card-initial { - background: rgba(255,255,255,0.08); font-size: 1.5rem; + background: var(--rs-btn-secondary-bg); font-size: 1.5rem; } .space-card--create:hover .space-card-initial { background: linear-gradient(135deg, #06b6d4, #7c3aed); diff --git a/shared/components/rstack-notification-bell.ts b/shared/components/rstack-notification-bell.ts index bc54212..5614b1b 100644 --- a/shared/components/rstack-notification-bell.ts +++ b/shared/components/rstack-notification-bell.ts @@ -359,7 +359,7 @@ const STYLES = ` } .bell-btn:hover { color: var(--rs-text-primary, #e2e8f0); - background: var(--rs-bg-hover, rgba(255,255,255,0.08)); + background: var(--rs-bg-hover, rgba(255,255,255,0.05)); } .badge { @@ -392,7 +392,7 @@ const STYLES = ` border-radius: 10px; background: var(--rs-bg-surface, #1e293b); border: 1px solid var(--rs-border, rgba(255,255,255,0.1)); - box-shadow: 0 8px 30px rgba(0,0,0,0.3); + box-shadow: var(--rs-shadow-lg, 0 8px 30px rgba(0,0,0,0.3)); z-index: 200; } @@ -421,7 +421,7 @@ const STYLES = ` transition: background 0.15s; } .mark-all-btn:hover { - background: var(--rs-bg-hover, rgba(255,255,255,0.08)); + background: var(--rs-bg-hover, rgba(255,255,255,0.05)); } .panel-empty { @@ -438,10 +438,10 @@ const STYLES = ` padding: 10px 16px; cursor: pointer; transition: background 0.15s; - border-bottom: 1px solid var(--rs-border, rgba(255,255,255,0.05)); + border-bottom: 1px solid var(--rs-border, rgba(255,255,255,0.1)); } .notif-item:hover { - background: var(--rs-bg-hover, rgba(255,255,255,0.06)); + background: var(--rs-bg-hover, rgba(255,255,255,0.05)); } .notif-item.unread { background: rgba(6, 182, 212, 0.05); diff --git a/shared/components/rstack-space-settings.ts b/shared/components/rstack-space-settings.ts index 1d2e4d1..2294aa3 100644 --- a/shared/components/rstack-space-settings.ts +++ b/shared/components/rstack-space-settings.ts @@ -457,7 +457,7 @@ const PANEL_CSS = ` position: fixed; inset: 0; background: rgba(0, 0, 0, 0.5); - z-index: 9998; + z-index: 200000; animation: fadeIn 0.2s ease; } @@ -467,13 +467,13 @@ const PANEL_CSS = ` right: 0; bottom: 0; width: min(380px, 90vw); - background: #1e293b; - border-left: 1px solid rgba(255,255,255,0.1); - z-index: 9999; + background: var(--rs-bg-surface); + border-left: 1px solid var(--rs-border); + z-index: 200001; display: flex; flex-direction: column; animation: slideIn 0.25s ease; - color: #e2e8f0; + color: var(--rs-text-primary); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; } @@ -491,7 +491,7 @@ const PANEL_CSS = ` align-items: center; justify-content: space-between; padding: 16px 20px; - border-bottom: 1px solid rgba(255,255,255,0.08); + border-bottom: 1px solid var(--rs-btn-secondary-bg); } .panel-header h2 { @@ -507,14 +507,14 @@ const PANEL_CSS = ` .close-btn { background: none; border: none; - color: #64748b; + color: var(--rs-text-muted); font-size: 1.5rem; cursor: pointer; padding: 4px 8px; border-radius: 4px; line-height: 1; } -.close-btn:hover { color: #e2e8f0; background: rgba(255,255,255,0.08); } +.close-btn:hover { color: var(--rs-text-primary); background: var(--rs-btn-secondary-bg); } .panel-content { flex: 1; @@ -529,7 +529,7 @@ const PANEL_CSS = ` .section h3 { font-size: 0.82rem; font-weight: 700; - color: #94a3b8; + color: var(--rs-text-secondary); text-transform: uppercase; letter-spacing: 0.06em; margin: 0 0 10px; @@ -537,7 +537,7 @@ const PANEL_CSS = ` .count { font-weight: 400; - color: #64748b; + color: var(--rs-text-muted); font-size: 0.75rem; margin-left: 4px; } @@ -557,7 +557,7 @@ const PANEL_CSS = ` border-radius: 8px; transition: background 0.15s; } -.member-row:hover { background: rgba(255,255,255,0.04); } +.member-row:hover { background: var(--rs-bg-hover); } .member-avatar { width: 32px; @@ -581,7 +581,7 @@ const PANEL_CSS = ` .member-name { font-size: 0.85rem; font-weight: 500; - color: #e2e8f0; + color: var(--rs-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -610,9 +610,9 @@ const PANEL_CSS = ` } .role-select { - background: rgba(255,255,255,0.06); - border: 1px solid rgba(255,255,255,0.1); - color: #e2e8f0; + background: var(--rs-border-subtle); + border: 1px solid var(--rs-border); + color: var(--rs-text-primary); border-radius: 6px; padding: 3px 6px; font-size: 0.72rem; @@ -623,7 +623,7 @@ const PANEL_CSS = ` .remove-btn { background: none; border: none; - color: #64748b; + color: var(--rs-text-muted); font-size: 1.1rem; cursor: pointer; padding: 2px 6px; @@ -642,9 +642,9 @@ const PANEL_CSS = ` .toggle-btn { flex: 1; padding: 6px 10px; - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.08); - color: #94a3b8; + background: var(--rs-bg-hover); + border: 1px solid var(--rs-btn-secondary-bg); + color: var(--rs-text-secondary); border-radius: 6px; font-size: 0.78rem; cursor: pointer; @@ -663,9 +663,9 @@ const PANEL_CSS = ` } .input { - background: rgba(255,255,255,0.06); - border: 1px solid rgba(255,255,255,0.1); - color: #e2e8f0; + background: var(--rs-border-subtle); + border: 1px solid var(--rs-border); + color: var(--rs-text-primary); border-radius: 8px; padding: 8px 12px; font-size: 0.85rem; @@ -673,7 +673,7 @@ const PANEL_CSS = ` box-sizing: border-box; } .input:focus { outline: none; border-color: #14b8a6; } -.input::placeholder { color: #64748b; } +.input::placeholder { color: var(--rs-text-muted); } .add-row { display: flex; @@ -725,7 +725,7 @@ const PANEL_CSS = ` justify-content: space-between; padding: 8px 10px; border-radius: 8px; - background: rgba(255,255,255,0.02); + background: var(--rs-bg-hover); } .invite-info { @@ -736,7 +736,7 @@ const PANEL_CSS = ` .invite-email { font-size: 0.82rem; - color: #e2e8f0; + color: var(--rs-text-primary); } .invite-role { @@ -746,7 +746,7 @@ const PANEL_CSS = ` .invite-expiry { font-size: 0.65rem; - color: #64748b; + color: var(--rs-text-muted); } .revoke-btn { @@ -763,7 +763,7 @@ const PANEL_CSS = ` .empty-state { font-size: 0.8rem; - color: #64748b; + color: var(--rs-text-muted); padding: 12px 0; text-align: center; } diff --git a/shared/components/rstack-space-switcher.ts b/shared/components/rstack-space-switcher.ts index 51f06bb..0469f9e 100644 --- a/shared/components/rstack-space-switcher.ts +++ b/shared/components/rstack-space-switcher.ts @@ -946,7 +946,7 @@ const STYLES = ` .menu { position: fixed; margin-top: 0; min-width: 260px; max-height: 400px; overflow-y: auto; - border-radius: 12px; box-shadow: 0 8px 30px rgba(0,0,0,0.25); + border-radius: 12px; box-shadow: var(--rs-shadow-lg); display: none; z-index: 10001; background: var(--rs-bg-surface); border: 1px solid var(--rs-border); } @@ -1075,7 +1075,7 @@ const STYLES = ` .divider { height: 1px; margin: 4px 0; background: var(--rs-border-subtle); } .menu-loading, .menu-empty { - padding: 16px; text-align: center; font-size: 0.85rem; color: #94a3b8; + padding: 16px; text-align: center; font-size: 0.85rem; color: var(--rs-text-secondary); } /* Discover section — non-navigable items */ @@ -1103,9 +1103,9 @@ const REQUEST_MODAL_STYLES = ` justify-content: center; z-index: 10000; animation: fadeIn 0.2s; } .auth-modal { - background: #1e293b; border: 1px solid rgba(255,255,255,0.1); + background: var(--rs-bg-surface); border: 1px solid var(--rs-border); border-radius: 16px; padding: 2rem; max-width: 420px; width: 90%; - text-align: center; color: white; box-shadow: 0 20px 60px rgba(0,0,0,0.4); + text-align: center; color: var(--rs-text-primary); box-shadow: var(--rs-shadow-lg); animation: slideUp 0.3s; position: relative; } .auth-modal h2 { @@ -1113,15 +1113,15 @@ const REQUEST_MODAL_STYLES = ` background: linear-gradient(135deg, #06b6d4, #7c3aed); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } -.auth-modal p { color: #94a3b8; font-size: 0.95rem; line-height: 1.6; margin-bottom: 1rem; } +.auth-modal p { color: var(--rs-text-secondary); font-size: 0.95rem; line-height: 1.6; margin-bottom: 1rem; } .input { width: 100%; padding: 12px 16px; border-radius: 8px; - border: 1px solid rgba(255,255,255,0.15); background: rgba(255,255,255,0.05); - color: white; font-size: 0.9rem; margin-bottom: 1rem; outline: none; + border: 1px solid var(--rs-input-border); background: var(--rs-bg-hover); + color: var(--rs-text-primary); font-size: 0.9rem; margin-bottom: 1rem; outline: none; transition: border-color 0.2s; box-sizing: border-box; font-family: inherit; } .input:focus { border-color: #06b6d4; } -.input::placeholder { color: #64748b; } +.input::placeholder { color: var(--rs-text-muted); } .actions { display: flex; gap: 12px; margin-top: 0.5rem; } .btn { flex: 1; padding: 12px 20px; border-radius: 8px; border: none; @@ -1130,15 +1130,15 @@ const REQUEST_MODAL_STYLES = ` .btn--primary { background: linear-gradient(135deg, #06b6d4, #7c3aed); color: white; } .btn--primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(6,182,212,0.3); } .btn--primary:disabled { opacity: 0.5; cursor: not-allowed; transform: none; } -.btn--secondary { background: rgba(255,255,255,0.08); color: #94a3b8; border: 1px solid rgba(255,255,255,0.1); } -.btn--secondary:hover { background: rgba(255,255,255,0.12); color: white; } +.btn--secondary { background: var(--rs-btn-secondary-bg); color: var(--rs-text-secondary); border: 1px solid var(--rs-border); } +.btn--secondary:hover { background: var(--rs-bg-hover); color: var(--rs-text-primary); } .error { color: #ef4444; font-size: 0.85rem; margin-top: 0.5rem; min-height: 1.2em; } .close-btn { position: absolute; top: 12px; right: 16px; - background: none; border: none; color: #64748b; font-size: 1.5rem; + background: none; border: none; color: var(--rs-text-muted); font-size: 1.5rem; cursor: pointer; line-height: 1; padding: 4px 8px; border-radius: 6px; } -.close-btn:hover { color: white; background: rgba(255,255,255,0.1); } +.close-btn:hover { color: var(--rs-text-primary); background: var(--rs-border); } .spinner { display: inline-block; width: 18px; height: 18px; border: 2px solid transparent; border-top-color: currentColor; @@ -1157,9 +1157,9 @@ const EDIT_SPACE_MODAL_STYLES = ` justify-content: center; z-index: 10000; animation: fadeIn 0.2s; } .edit-modal { - background: #1e293b; border: 1px solid rgba(255,255,255,0.1); + background: var(--rs-bg-surface); border: 1px solid var(--rs-border); border-radius: 16px; padding: 2rem; max-width: 520px; width: 92%; - color: white; box-shadow: 0 20px 60px rgba(0,0,0,0.4); + color: var(--rs-text-primary); box-shadow: var(--rs-shadow-lg); animation: slideUp 0.3s; position: relative; } .edit-modal h2 { @@ -1169,30 +1169,30 @@ const EDIT_SPACE_MODAL_STYLES = ` } .close-btn { position: absolute; top: 12px; right: 16px; - background: none; border: none; color: #64748b; font-size: 1.5rem; + background: none; border: none; color: var(--rs-text-muted); font-size: 1.5rem; cursor: pointer; line-height: 1; padding: 4px 8px; border-radius: 6px; } -.close-btn:hover { color: white; background: rgba(255,255,255,0.1); } +.close-btn:hover { color: var(--rs-text-primary); background: var(--rs-border); } /* Tabs */ -.tabs { display: flex; gap: 4px; margin-bottom: 1.2rem; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 0; } +.tabs { display: flex; gap: 4px; margin-bottom: 1.2rem; border-bottom: 1px solid var(--rs-border); padding-bottom: 0; } .tab { - padding: 8px 16px; border: none; background: none; color: #94a3b8; + padding: 8px 16px; border: none; background: none; color: var(--rs-text-secondary); font-size: 0.85rem; font-weight: 600; cursor: pointer; border-bottom: 2px solid transparent; transition: all 0.15s; border-radius: 6px 6px 0 0; } -.tab:hover { color: #e2e8f0; background: rgba(255,255,255,0.05); } +.tab:hover { color: var(--rs-text-primary); background: var(--rs-bg-hover); } .tab.active { color: #06b6d4; border-bottom-color: #06b6d4; } .tab-panel { } .tab-panel.hidden { display: none; } /* Form fields */ -.field-label { display: block; font-size: 0.75rem; font-weight: 600; color: #94a3b8; margin-bottom: 4px; text-transform: uppercase; letter-spacing: 0.05em; } +.field-label { display: block; font-size: 0.75rem; font-weight: 600; color: var(--rs-text-secondary); margin-bottom: 4px; text-transform: uppercase; letter-spacing: 0.05em; } .input { width: 100%; padding: 10px 14px; border-radius: 8px; - border: 1px solid rgba(255,255,255,0.15); background: rgba(255,255,255,0.05); - color: white; font-size: 0.9rem; margin-bottom: 0.75rem; outline: none; + border: 1px solid var(--rs-input-border); background: var(--rs-bg-hover); + color: var(--rs-text-primary); font-size: 0.9rem; margin-bottom: 0.75rem; outline: none; transition: border-color 0.2s; box-sizing: border-box; font-family: inherit; } .input:focus { border-color: #06b6d4; } @@ -1223,7 +1223,7 @@ select.input { appearance: auto; } .member-list { max-height: 320px; overflow-y: auto; } .member-item { display: flex; align-items: center; gap: 10px; - padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.06); + padding: 8px 0; border-bottom: 1px solid var(--rs-border-subtle); } .member-item:last-child { border-bottom: none; } .member-name { flex: 1; font-size: 0.875rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } @@ -1232,11 +1232,11 @@ select.input { appearance: auto; } } .role-owner { background: rgba(251,191,36,0.15); color: #fbbf24; } .role-select { - padding: 4px 8px; border-radius: 6px; border: 1px solid rgba(255,255,255,0.15); - background: rgba(255,255,255,0.05); color: white; font-size: 0.8rem; outline: none; + padding: 4px 8px; border-radius: 6px; border: 1px solid var(--rs-input-border); + background: var(--rs-bg-hover); color: var(--rs-text-primary); font-size: 0.8rem; outline: none; } .member-remove { - background: none; border: none; color: #64748b; font-size: 1.2rem; + background: none; border: none; color: var(--rs-text-muted); font-size: 1.2rem; cursor: pointer; padding: 2px 6px; border-radius: 4px; line-height: 1; } .member-remove:hover { color: #ef4444; background: rgba(239,68,68,0.1); } @@ -1246,12 +1246,12 @@ select.input { appearance: auto; } .invitation-list { max-height: 320px; overflow-y: auto; } .invite-item { display: flex; align-items: center; gap: 10px; - padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.06); + padding: 8px 0; border-bottom: 1px solid var(--rs-border-subtle); } .invite-item:last-child { border-bottom: none; } .invite-info { flex: 1; min-width: 0; } .invite-name { font-size: 0.875rem; font-weight: 500; display: block; } -.invite-msg { font-size: 0.8rem; color: #64748b; display: block; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.invite-msg { font-size: 0.8rem; color: var(--rs-text-muted); display: block; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .invite-actions { display: flex; gap: 6px; flex-shrink: 0; } .btn-sm { padding: 4px 10px; border-radius: 6px; border: none; @@ -1266,27 +1266,27 @@ select.input { appearance: auto; } .invite-status--approved { background: rgba(52,211,153,0.15); color: #34d399; } .invite-status--denied { background: rgba(239,68,68,0.15); color: #f87171; } -.loading { padding: 16px; text-align: center; font-size: 0.85rem; color: #94a3b8; } +.loading { padding: 16px; text-align: center; font-size: 0.85rem; color: var(--rs-text-secondary); } /* Modules config panel */ .modules-list { max-height: 400px; overflow-y: auto; } .module-encryption { margin-bottom: 0.25rem; } -.module-divider { height: 1px; background: rgba(255,255,255,0.08); margin: 0.75rem 0; } -.module-section-label { font-size: 0.72rem; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 0.5rem; } +.module-divider { height: 1px; background: var(--rs-btn-secondary-bg); margin: 0.75rem 0; } +.module-section-label { font-size: 0.72rem; font-weight: 700; color: var(--rs-text-secondary); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 0.5rem; } .module-row { display: flex; align-items: center; justify-content: space-between; padding: 6px 0; cursor: pointer; } .module-label { font-size: 0.875rem; } -.module-hint { font-size: 0.75rem; color: #64748b; margin-top: 2px; padding-left: 2px; } +.module-hint { font-size: 0.75rem; color: var(--rs-text-muted); margin-top: 2px; padding-left: 2px; } .scope-row { display: flex; align-items: center; gap: 8px; - padding: 2px 0 6px 24px; font-size: 0.8rem; color: #94a3b8; + padding: 2px 0 6px 24px; font-size: 0.8rem; color: var(--rs-text-secondary); } .scope-label { font-size: 0.75rem; } .scope-select { - padding: 3px 8px; border-radius: 6px; border: 1px solid rgba(255,255,255,0.12); - background: rgba(255,255,255,0.05); color: white; font-size: 0.75rem; outline: none; + padding: 3px 8px; border-radius: 6px; border: 1px solid var(--rs-border); + background: var(--rs-bg-hover); color: var(--rs-text-primary); font-size: 0.75rem; outline: none; } .toggle-switch { position: relative; display: inline-block; width: 36px; height: 20px; @@ -1294,7 +1294,7 @@ select.input { appearance: auto; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; cursor: pointer; inset: 0; - background: rgba(255,255,255,0.15); border-radius: 20px; transition: 0.2s; + background: var(--rs-input-border); border-radius: 20px; transition: 0.2s; } .toggle-slider:before { content: ""; position: absolute; height: 14px; width: 14px; diff --git a/shared/components/rstack-tab-bar.ts b/shared/components/rstack-tab-bar.ts index a2f8979..f2a320a 100644 --- a/shared/components/rstack-tab-bar.ts +++ b/shared/components/rstack-tab-bar.ts @@ -293,8 +293,10 @@ export class RStackTabBar extends HTMLElement {