diff --git a/devplacepy/avatar.py b/devplacepy/avatar.py index 2eccd679..ba0471fe 100644 --- a/devplacepy/avatar.py +++ b/devplacepy/avatar.py @@ -28,6 +28,6 @@ def generate_avatar_svg(seed: str) -> str: initial = seed[:1].upper() if seed else "?" return ( '' - f'' - f'{initial}' + f'' + f'{initial}' ) diff --git a/devplacepy/static/apple-touch-icon.png b/devplacepy/static/apple-touch-icon.png index 9868addb..8d4cc517 100644 Binary files a/devplacepy/static/apple-touch-icon.png and b/devplacepy/static/apple-touch-icon.png differ diff --git a/devplacepy/static/css/admin.css b/devplacepy/static/css/admin.css index 48d6c8cd..112f8176 100644 --- a/devplacepy/static/css/admin.css +++ b/devplacepy/static/css/admin.css @@ -205,14 +205,14 @@ } .admin-btn-primary { - background: var(--accent, var(--info)); - color: var(--white); + background: var(--accent); + color: var(--on-accent); border-color: transparent; } .admin-btn-primary:hover { - background: var(--accent-hover, var(--accent)); - color: var(--white); + background: var(--accent-hover); + color: var(--on-accent); } .admin-btn-danger { @@ -399,7 +399,7 @@ .pagination-btn:hover { background: var(--accent); - color: var(--white); + color: var(--on-accent); border-color: var(--accent); text-decoration: none; } @@ -443,12 +443,12 @@ .pagination-page-active { background: var(--accent); - color: var(--white); + color: var(--on-accent); } .pagination-page-active:hover { background: var(--accent-hover); - color: var(--white); + color: var(--on-accent); } .pagination-ellipsis { diff --git a/devplacepy/static/css/auth.css b/devplacepy/static/css/auth.css index 4012f0e9..5d90532c 100644 --- a/devplacepy/static/css/auth.css +++ b/devplacepy/static/css/auth.css @@ -117,7 +117,7 @@ font-size: 1rem; font-weight: 700; background: var(--accent); - color: var(--white); + color: var(--on-accent); border-radius: var(--radius); } diff --git a/devplacepy/static/css/base.css b/devplacepy/static/css/base.css index 595adde5..acf2c1d4 100644 --- a/devplacepy/static/css/base.css +++ b/devplacepy/static/css/base.css @@ -445,8 +445,8 @@ img { .btn-primary { background: var(--accent-gradient); - color: var(--white); - box-shadow: 0 2px 12px rgba(255, 95, 70, 0.3); + color: var(--on-accent); + box-shadow: 0 0 0 1px rgba(var(--accent-rgb), 0.35); } .btn-primary:hover { @@ -554,7 +554,7 @@ img { justify-content: center; font-weight: 700; font-size: 1rem; - color: var(--white); + color: var(--on-accent); flex-shrink: 0; overflow: hidden; } @@ -589,7 +589,7 @@ img { pointer-events: none; } -.presence-dot.online { background: var(--success, #2f9e44); } +.presence-dot.online { background: var(--success); } .award-badge { position: absolute; @@ -650,7 +650,7 @@ img { .nav-bell { position: relative; display: inline-flex; align-items: center; justify-content: center; line-height: 1; } .nav-badge { position: absolute; top: -6px; right: -8px; z-index: 1; min-width: 16px; height: 16px; - padding: 0 0.25rem; border-radius: 8px; background: var(--accent); color: var(--white); + padding: 0 0.25rem; border-radius: 8px; background: var(--accent); color: var(--on-accent); font-size: 0.6875rem; font-weight: 700; display: flex; align-items: center; justify-content: center; } @@ -884,7 +884,7 @@ img { button.comment-form-submit { padding: 0.375rem 0.5rem; background: var(--accent); - color: var(--white); + color: var(--on-accent); font-weight: 600; font-size: 0.8125rem; line-height: 1.4; diff --git a/devplacepy/static/css/chat.css b/devplacepy/static/css/chat.css index 1e1d2f49..1e5f92a3 100644 --- a/devplacepy/static/css/chat.css +++ b/devplacepy/static/css/chat.css @@ -232,7 +232,7 @@ dp-chat[mode="embed"] { .message-bubble.mine { align-self: flex-end; background: var(--accent); - color: var(--white); + color: var(--on-accent); border-bottom-right-radius: 4px; } @@ -429,7 +429,7 @@ dp-chat[mode="embed"] { height: 36px; padding: 0; background: var(--accent); - color: var(--white); + color: var(--on-accent); border-radius: 50%; display: flex; align-items: center; diff --git a/devplacepy/static/css/containers.css b/devplacepy/static/css/containers.css index 24969e26..7c2b6402 100644 --- a/devplacepy/static/css/containers.css +++ b/devplacepy/static/css/containers.css @@ -209,7 +209,7 @@ .cm-suggest li:hover, .cm-suggest li.cm-suggest-active { - background: var(--bg-hover, var(--border)); + background: var(--bg-card-hover); } .cm-suggest li.cm-suggest-active { diff --git a/devplacepy/static/css/deepsearch.css b/devplacepy/static/css/deepsearch.css index 12c62d06..34471337 100644 --- a/devplacepy/static/css/deepsearch.css +++ b/devplacepy/static/css/deepsearch.css @@ -241,7 +241,7 @@ .ds-phase.is-done .ds-phase-dot { background: var(--accent); border-color: var(--accent); - color: var(--white); + color: var(--on-accent); } .ds-phase.is-done .ds-phase-name { @@ -546,7 +546,7 @@ dp-deepsearch-chat { .ds-chat-msg.user .ds-chat-bubble { background: var(--accent); - color: var(--white); + color: var(--on-accent); } .ds-chat-msg.agent .ds-chat-bubble { @@ -597,7 +597,7 @@ dp-deepsearch-chat { .ds-chat-send { background: var(--accent); - color: var(--white); + color: var(--on-accent); border: none; border-radius: var(--radius-input); padding: 0 var(--space-md); diff --git a/devplacepy/static/css/docs-chat.css b/devplacepy/static/css/docs-chat.css index a0a721df..c598bc7d 100644 --- a/devplacepy/static/css/docs-chat.css +++ b/devplacepy/static/css/docs-chat.css @@ -292,7 +292,7 @@ dp-docs-chat { .docs-chat-send { background: var(--accent); - color: var(--white); + color: var(--on-accent); border: none; border-radius: var(--radius); padding: 0.625rem 1.25rem; diff --git a/devplacepy/static/css/docs.css b/devplacepy/static/css/docs.css index 99474666..f28ca220 100644 --- a/devplacepy/static/css/docs.css +++ b/devplacepy/static/css/docs.css @@ -431,7 +431,7 @@ textarea.param-input { .format-option.active { background: var(--accent); - color: var(--white); + color: var(--on-accent); } .format-fixed { @@ -621,7 +621,7 @@ pre.code-pre > .code-gutter { .docs-search-snippet mark { background: var(--accent); - color: var(--white); + color: var(--on-accent); padding: 0 0.125rem; border-radius: 3px; } diff --git a/devplacepy/static/css/feed.css b/devplacepy/static/css/feed.css index 84f2951f..02066959 100644 --- a/devplacepy/static/css/feed.css +++ b/devplacepy/static/css/feed.css @@ -39,7 +39,7 @@ .feed-nav-btn.active { background: var(--accent-gradient); - color: var(--white); + color: var(--on-accent); box-shadow: var(--glow-accent); } @@ -285,7 +285,7 @@ min-width: 1.25rem; padding: 0 0.375rem; border-radius: 999px; - background: var(--success, #2f9e44); + background: var(--success); color: var(--white); font-size: 0.6875rem; text-align: center; @@ -369,7 +369,7 @@ height: 64px; border-radius: 50%; background: var(--accent-gradient); - color: var(--white); + color: var(--on-accent); font-size: 2rem; line-height: 1; display: flex; diff --git a/devplacepy/static/css/issues.css b/devplacepy/static/css/issues.css index e56e20de..86c4be57 100644 --- a/devplacepy/static/css/issues.css +++ b/devplacepy/static/css/issues.css @@ -35,11 +35,11 @@ text-decoration: none; } .issues-filter:hover { - background: var(--bg-hover); + background: var(--bg-card-hover); } .issues-filter.active { background: var(--accent); - color: var(--white); + color: var(--on-accent); border-color: var(--accent); } .issues-modal-hint { diff --git a/devplacepy/static/css/landing.css b/devplacepy/static/css/landing.css index 4dafab4e..9184a2e8 100644 --- a/devplacepy/static/css/landing.css +++ b/devplacepy/static/css/landing.css @@ -70,7 +70,7 @@ .dashboard-btn-primary { background: var(--accent); - color: var(--white); + color: var(--on-accent); border-color: var(--accent); font-weight: 700; padding: 0.55rem 1.5rem; @@ -123,7 +123,7 @@ .dashboard-xp-fill { height: 100%; - background: var(--accent-gradient, linear-gradient(90deg, var(--accent), #f0932b)); + background: var(--accent-gradient); border-radius: 3px; transition: width 0.4s ease; } @@ -466,7 +466,7 @@ font-size: 1.125rem; border-radius: var(--radius-lg); background: var(--accent); - color: var(--white); + color: var(--on-accent); font-weight: 700; } @@ -567,7 +567,7 @@ padding: 0.7rem 2rem; border-radius: var(--radius-lg); background: var(--accent); - color: var(--white); + color: var(--on-accent); font-size: 0.9375rem; font-weight: 700; } @@ -637,7 +637,7 @@ .landing-xp-fill { height: 100%; - background: var(--accent-gradient, linear-gradient(90deg, var(--accent), #f0932b)); + background: var(--accent-gradient); border-radius: 3px; transition: width 0.4s ease; } @@ -970,7 +970,7 @@ margin-top: auto; align-self: flex-start; background: var(--accent); - color: var(--white); + color: var(--on-accent); border: none; border-radius: var(--radius-lg); padding: 0.6rem 1.1rem; @@ -1105,7 +1105,7 @@ font-size: 1.05rem; border-radius: var(--radius-lg); background: var(--accent); - color: var(--white); + color: var(--on-accent); font-weight: 700; text-decoration: none; transition: filter 0.15s ease, transform 0.15s ease; diff --git a/devplacepy/static/css/news.css b/devplacepy/static/css/news.css index ddbd5e1c..276343af 100644 --- a/devplacepy/static/css/news.css +++ b/devplacepy/static/css/news.css @@ -257,7 +257,7 @@ font-size: 0.875rem; font-weight: 600; background: var(--accent); - color: var(--white); + color: var(--on-accent); border-radius: var(--radius); } diff --git a/devplacepy/static/css/profile.css b/devplacepy/static/css/profile.css index 31dd6b08..6a90d5f6 100644 --- a/devplacepy/static/css/profile.css +++ b/devplacepy/static/css/profile.css @@ -49,7 +49,7 @@ } .profile-presence.online { - color: var(--success, #2f9e44); + color: var(--success); } .profile-presence::before { @@ -64,7 +64,7 @@ } .profile-presence.online::before { - background: var(--success, #2f9e44); + background: var(--success); } .profile-stats { @@ -231,7 +231,7 @@ a.profile-stat-value:hover { .profile-tab.active { background: var(--accent); - color: var(--white); + color: var(--on-accent); } .profile-posts { @@ -464,7 +464,7 @@ a.profile-stat-value:hover { } .ai-correction-status[data-state="success"] { - color: var(--success, #2f9e44); + color: var(--success); } .ai-correction-status[data-state="error"] { diff --git a/devplacepy/static/css/project_files.css b/devplacepy/static/css/project_files.css index 621e7e5c..fc25df9e 100644 --- a/devplacepy/static/css/project_files.css +++ b/devplacepy/static/css/project_files.css @@ -100,7 +100,7 @@ .pf-node-row.active { background: var(--accent); - color: var(--white); + color: var(--on-accent); } .pf-node-row.pf-selected { @@ -110,7 +110,7 @@ .pf-node-row.pf-selected.active { background: var(--accent); - color: var(--white); + color: var(--on-accent); } .pf-node-row.pf-dragging { diff --git a/devplacepy/static/css/projects.css b/devplacepy/static/css/projects.css index ed9f64bd..c6f07624 100644 --- a/devplacepy/static/css/projects.css +++ b/devplacepy/static/css/projects.css @@ -28,7 +28,7 @@ .projects-tab.active { background: var(--accent-gradient); - color: var(--white); + color: var(--on-accent); box-shadow: var(--glow-accent); } diff --git a/devplacepy/static/css/sidebar.css b/devplacepy/static/css/sidebar.css index 99a48a63..3066c420 100644 --- a/devplacepy/static/css/sidebar.css +++ b/devplacepy/static/css/sidebar.css @@ -77,7 +77,7 @@ .sidebar-link.active, .sidebar-link.active:hover { background: var(--accent-gradient); - color: var(--white); + color: var(--on-accent); font-weight: 600; box-shadow: var(--glow-accent); } diff --git a/devplacepy/static/css/variables.css b/devplacepy/static/css/variables.css index 8c3184df..81530ce7 100644 --- a/devplacepy/static/css/variables.css +++ b/devplacepy/static/css/variables.css @@ -1,41 +1,42 @@ /* retoor */ :root { - --bg-primary: #080413; - --bg-secondary: #120821; - --bg-card: #1a1030; - --bg-card-hover: #241640; - --bg-input: #140b26; - --bg-modal: #1a1030; + --bg-primary: #0a0a0f; + --bg-secondary: #111118; + --bg-card: #111118; + --bg-card-hover: #1a1a24; + --bg-input: #0a0a0f; + --bg-modal: #111118; - --accent: #ff6b35; - --accent-rgb: 255, 107, 53; - --accent-hover: #ff7d4d; - --accent-light: rgba(255, 107, 53, 0.12); - --accent-2: #ff4f8b; - --accent-gradient: linear-gradient(135deg, #ff6b3d, #ff4f6d); + --accent: #22c55e; + --accent-rgb: 34, 197, 94; + --accent-hover: #16a34a; + --accent-light: rgba(34, 197, 94, 0.12); + --accent-2: #4ade80; + --accent-gradient: linear-gradient(135deg, #22c55e, #16a34a); + --on-accent: #052e16; - --text-primary: #f4eefb; - --text-secondary: #b8a8d0; - --text-muted: #7a6a90; + --text-primary: #c8c8d0; + --text-secondary: #8b8b9e; + --text-muted: #6b6b80; - --border: rgba(255, 255, 255, 0.08); - --border-light: rgba(255, 255, 255, 0.14); + --border: #222233; + --border-light: #2e2e40; - --success: #4caf50; - --warning: #ff9800; - --danger: #e53935; - --info: #42a5f5; + --success: #22c55e; + --warning: #eab308; + --danger: #ef4444; + --info: #60a5fa; - --radius: 12px; - --radius-input: 14px; - --radius-lg: 18px; - --radius-xl: 24px; + --radius: 4px; + --radius-input: 4px; + --radius-lg: 6px; + --radius-xl: 8px; - --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.25); - --shadow: 0 4px 20px rgba(0, 0, 0, 0.28); - --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.45); - --glow-accent: 0 6px 24px rgba(255, 95, 70, 0.45); + --shadow-sm: 0 0 0 1px rgba(34, 34, 51, 0.8); + --shadow: 0 4px 20px rgba(0, 0, 0, 0.5); + --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.6); + --glow-accent: 0 0 0 1px rgba(var(--accent-rgb), 0.35); --white: #fff; --overlay-dark: rgba(0, 0, 0, 0.7); @@ -48,8 +49,8 @@ --space-xl: 1.5rem; --space-2xl: 2rem; - --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; - --font-mono: "SF Mono", Monaco, "Cascadia Code", monospace; + --font-sans: "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace; + --font-mono: "JetBrains Mono", "SF Mono", Monaco, "Cascadia Code", monospace; --nav-height: 56px; --sidebar-width: 240px; @@ -76,5 +77,5 @@ --topic-fun: #ffab00; --topic-politics: #00bcd4; - --bg-gradient: linear-gradient(135deg, #080413 0%, #160a28 50%, #080413 100%); + --bg-gradient: linear-gradient(135deg, #0a0a0f 0%, #111118 50%, #0a0a0f 100%); } diff --git a/devplacepy/static/icon-192.png b/devplacepy/static/icon-192.png index 41d69119..1be46753 100644 Binary files a/devplacepy/static/icon-192.png and b/devplacepy/static/icon-192.png differ diff --git a/devplacepy/static/icon-512.png b/devplacepy/static/icon-512.png index 559fbf47..92a6604c 100644 Binary files a/devplacepy/static/icon-512.png and b/devplacepy/static/icon-512.png differ diff --git a/devplacepy/static/icon-maskable-512.png b/devplacepy/static/icon-maskable-512.png index 11426350..92a6604c 100644 Binary files a/devplacepy/static/icon-maskable-512.png and b/devplacepy/static/icon-maskable-512.png differ diff --git a/devplacepy/static/js/StatisticsCharts.js b/devplacepy/static/js/StatisticsCharts.js index dffe5250..dedf006a 100644 --- a/devplacepy/static/js/StatisticsCharts.js +++ b/devplacepy/static/js/StatisticsCharts.js @@ -1,14 +1,14 @@ // retoor const CHART_COLORS = [ - "#ff6b35", + "#22c55e", "#7c4dff", "#00bfa5", "#448aff", "#ffab00", "#ff5252", "#42a5f5", - "#ff4f8b", + "#4ade80", ]; export class StatisticsCharts { diff --git a/devplacepy/static/js/components/AppChat.js b/devplacepy/static/js/components/AppChat.js index 0967cdd1..16d3bcf7 100644 --- a/devplacepy/static/js/components/AppChat.js +++ b/devplacepy/static/js/components/AppChat.js @@ -24,15 +24,15 @@ const SEARCH_DEBOUNCE_MS = 200; const AUTO_GROW_MAX_HEIGHT_PX = 160; const LIGHT_THEME_OVERRIDES = { - "--bg-primary": "#f5f3fa", + "--bg-primary": "#f1f5f9", "--bg-secondary": "#ffffff", "--bg-card": "#ffffff", - "--bg-card-hover": "#f0edf7", - "--text-primary": "#1a1030", - "--text-secondary": "#4a3f5c", - "--text-muted": "#8b7fa0", - "--border": "rgba(0, 0, 0, 0.1)", - "--border-light": "rgba(0, 0, 0, 0.16)", + "--bg-card-hover": "#e2e8f0", + "--text-primary": "#0f172a", + "--text-secondary": "#475569", + "--text-muted": "#64748b", + "--border": "#cbd5e1", + "--border-light": "#e2e8f0", }; export class AppChat extends Component { diff --git a/devplacepy/static/manifest.json b/devplacepy/static/manifest.json index 2ac1a21f..f6481efd 100644 --- a/devplacepy/static/manifest.json +++ b/devplacepy/static/manifest.json @@ -9,8 +9,8 @@ "orientation": "any", "lang": "en", "dir": "ltr", - "background_color": "#0f0a1a", - "theme_color": "#0f0a1a", + "background_color": "#0a0a0f", + "theme_color": "#0a0a0f", "icons": [ { "src": "/static/icon-192.png", diff --git a/devplacepy/static/offline.html b/devplacepy/static/offline.html index ea40835c..8d152fe8 100644 --- a/devplacepy/static/offline.html +++ b/devplacepy/static/offline.html @@ -7,11 +7,11 @@ Offline - DevPlace