Skip to content

Conversation

@anmolsinghbhatia
Copy link
Collaborator

@anmolsinghbhatia anmolsinghbhatia commented Oct 20, 2025

Description

Centralize all fonts and global styles into the @plane/tailwind-config package, eliminating style duplication across apps.

Key Changes:

  • Centralized fonts: Moved Inter and Material Symbols Rounded fonts to @plane/tailwind-config/fonts/
  • Consolidated styles: Created modular CSS structure in @plane/tailwind-config/styles/
  • Self-contained package: Copied editor styles to make tailwind-config fully independent
  • Clean imports: Updated all apps to use single import from @plane/tailwind-config/global.css
  • Tailwind config refactor: Updated the tailwind.config.js file to make it more maintainable.

Tailwind config structure:

Module Purpose Key Features
utils.js Helper functions convertToRGB(), convertToRGBA()
content.js Content paths All file patterns for Tailwind scanning
colors.js Color system Custom, sidebar, toast, subscription colors
shadows.js Shadow utilities Standard & sidebar shadow scales
spacing.js Spacing scale 90% scaled padding, margin, gap, space
typography.js Typography Font sizes, families, prose config
animations.js Animations Toaster & loader keyframes
layout.js Layout utilities Z-index hierarchy, breakpoints, heights
plugins.js Custom plugins External + custom utilities

Type of Change

  • Improvement
  • Code refactoring

Summary by CodeRabbit

  • New Features

    • Centralized theming with expanded light/dark design tokens and an editor color palette.
    • New UI animations and utility classes for transitions, icons, and text.
    • Editor UX improvements: enhanced table, drag‑drop visuals, selection handles, and a loading spinner.
    • Refreshed scrollbar, typography, fonts, emoji/command-palette, tags-input, and other component styles.
  • Chores

    • Consolidated and modularized global styling and Tailwind configuration; removed redundant app-level global styles.

@makeplane
Copy link

makeplane bot commented Oct 20, 2025

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 20, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Consolidates per-app global CSS into a centralized package (packages/tailwind-config), updates app layout imports to @plane/tailwind-config/global.css, removes former app/UI global CSS files, and adds a modular Tailwind/PostCSS configuration plus many new modular style files (themes, editor, components, base, utilities).

Changes

Cohort / File(s) Summary
App layout import updates
apps/admin/app/layout.tsx, apps/space/app/layout.tsx, apps/web/app/layout.tsx
Replaced per-app @/styles/globals.css imports with centralized @plane/tailwind-config/global.css.
Removed app/UI global styles
apps/admin/styles/globals.css, apps/space/styles/globals.css, apps/web/styles/globals.css, packages/ui/styles/globals.css
Deleted per-app and UI global CSS files (complete removal of previous theme tokens, resets, utilities, and component styles).
Web internal import cleanup
apps/web/app/(all)/layout.tsx
Removed local command-palette.css and emoji.css imports; those styles now live in the centralized bundle.
Centralized global entry
packages/tailwind-config/global.css
Reworked global entry to import styles/index.css and include Tailwind directives; large inline CSS moved into modular files.
Style aggregation & fonts
packages/tailwind-config/styles/index.css, packages/tailwind-config/styles/fonts.css
Added central style aggregator and font-face declarations (Inter, Material Symbols).
Base utilities
packages/tailwind-config/styles/base/reset.css, .../typography.css, .../scrollbar.css
Added base reset, typography utilities, and comprehensive scrollbar styles.
Themes & variables
packages/tailwind-config/styles/themes/variables.css, .../light.css, .../dark.css, .../editor-colors.css
Added global design-system CSS variables and theme token files for light/dark/editor palettes.
Editor styles
packages/tailwind-config/styles/editor/index.css, .../variables.css, .../editor.css, .../table.css, .../drag-drop.css, .../github-dark.css, .../tailwind.css
Added comprehensive ProseMirror/editor styling, table UI, drag/drop visuals, syntax theme, and editor-tailwind entry.
Components & utilities
packages/tailwind-config/styles/components/* (emoji-picker.css, command-palette.css, spinner.css, tags-input.css, utility-classes.css), packages/tailwind-config/styles/app-specific/web-animations.css
Added component styles, utility classes, and app-specific animations and keyframes.
Tailwind modular config
packages/tailwind-config/tailwind.config.js, packages/tailwind-config/config/*.js (content.js, colors.js, shadows.js, spacing.js, layout.js, typography.js, animations.js, plugins.js, utils.js)
Replaced inline Tailwind config with modular configuration files; tailwind.config composes these modules for content, theme, plugins, and utilities.
PostCSS & package changes
packages/tailwind-config/postcss.config.js, packages/tailwind-config/package.json
Added postcss-import plugin with a custom resolver for @plane/ imports in PostCSS config; postcss-import added to package.json dependencies.

Sequence Diagram(s)

sequenceDiagram
  participant App as App layout (runtime)
  participant Global as @plane/tailwind-config/global.css
  participant Index as styles/index.css
  participant Modules as styles/* (themes, editor, components)
  participant PostCSS as postcss-import (build)

  App->>Global: import global.css
  Global->>Index: @import "styles/index.css"
  Index->>Modules: @import modules (fonts, base, themes, editor, components)
  Note right of PostCSS: During build, postcss-import\nresolves "@plane/" imports via custom resolver
  PostCSS-->>Index: resolve @plane/ paths to package files
  Modules-->>App: aggregated CSS output served to app
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰
I hopped through styles, a careful sweep,
Gathered tokens from hills so steep.
Moved scattered threads into one neat bay,
Tailwind blooms where hops lead the way. 🥕

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "[WEB-5198] chore: consolidate global styles" directly and clearly reflects the primary change in the pull request. The changeset consolidates fonts and global styles from multiple apps (admin, space, web, ui) into a centralized @plane/tailwind-config package, which is precisely what the title conveys. The title is concise, uses no vague terminology or noise, and provides enough specificity that a reviewer scanning the commit history would immediately understand this is about centralizing styling configuration.
Description Check ✅ Passed The pull request description is substantially complete and well-structured against the template requirements. It includes a detailed Description section explaining the consolidation objective and key changes with specific details about fonts, styles, and imports; the Type of Change is clearly marked with both "Improvement" and "Code refactoring" checkboxes selected. The description notably provides a structured table documenting the Tailwind config module organization. However, the Test Scenarios and References sections are not explicitly addressed in the description, though the ticket reference [WEB-5198] is present in the title. For a code refactoring PR focused on internal style consolidation without user-facing UI changes, the detailed documentation of structural changes and type of change designation compensates for the missing test scenarios elaboration.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore-consolidate-global-styles

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR consolidates all global styles, fonts, and theme definitions into the @plane/tailwind-config package, removing duplicated CSS code across the web, space, and admin applications.

Key Changes:

  • Centralized theme variables, fonts, and component styles into modular CSS files within @plane/tailwind-config
  • Removed duplicate globals.css files from individual apps
  • Updated all app entry points to import from the centralized @plane/tailwind-config/global.css

Reviewed Changes

Copilot reviewed 33 out of 42 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/ui/styles/globals.css Removed entire file (696 lines) as styles moved to centralized package
packages/tailwind-config/styles/* New modular CSS structure with separated concerns (themes, base, components, editor)
packages/tailwind-config/global.css New entry point that imports all modular styles and Tailwind directives
packages/tailwind-config/postcss.config.js Added postcss-import plugin for handling @import statements
packages/tailwind-config/package.json Added postcss-import dependency
apps/web/styles/globals.css Removed entire file (972 lines) replaced by centralized styles
apps/web/app/layout.tsx Updated import to use centralized global.css
apps/web/app/(all)/layout.tsx Removed separate emoji and command-palette imports (now in global.css)
apps/space/styles/globals.css Removed entire file (497 lines) replaced by centralized styles
apps/space/app/layout.tsx Updated import to use centralized global.css
apps/admin/styles/globals.css Removed entire file (396 lines) replaced by centralized styles
apps/admin/app/layout.tsx Updated import to use centralized global.css
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported
Comments suppressed due to low confidence (1)

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (1)
packages/tailwind-config/styles/editor/index.css (1)

1-5: Consider whether this aggregator file is needed.

This file aggregates editor styles, but packages/tailwind-config/styles/index.css (lines 18-22) imports the editor styles directly instead of using this aggregator. This creates a maintenance burden where both files need to be kept in sync.

Consider one of these approaches:

  1. Preferred: Modify styles/index.css to import this aggregator instead:
-@import "./editor/variables.css";
-@import "./editor/editor.css";
-@import "./editor/table.css";
-@import "./editor/github-dark.css";
-@import "./editor/drag-drop.css";
+@import "./editor/index.css";
  1. Alternative: Remove this file if the direct imports in styles/index.css are intentional for flattening the import tree.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f266cd8 and 0ba549a.

⛔ Files ignored due to path filters (9)
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-200.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-300.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-500.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-600.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-700.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-800.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Inter/inter-v13-latin-regular.woff2 is excluded by !**/*.woff2
  • packages/tailwind-config/fonts/Material-Symbols-Rounded/material-symbols-rounded-v168-latin-regular.woff2 is excluded by !**/*.woff2
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (33)
  • apps/admin/app/layout.tsx (1 hunks)
  • apps/admin/styles/globals.css (0 hunks)
  • apps/space/app/layout.tsx (1 hunks)
  • apps/space/styles/globals.css (0 hunks)
  • apps/web/app/(all)/layout.tsx (1 hunks)
  • apps/web/app/layout.tsx (1 hunks)
  • apps/web/styles/globals.css (0 hunks)
  • packages/tailwind-config/global.css (1 hunks)
  • packages/tailwind-config/package.json (1 hunks)
  • packages/tailwind-config/postcss.config.js (1 hunks)
  • packages/tailwind-config/styles/app-specific/web-animations.css (1 hunks)
  • packages/tailwind-config/styles/base/reset.css (1 hunks)
  • packages/tailwind-config/styles/base/scrollbar.css (1 hunks)
  • packages/tailwind-config/styles/base/typography.css (1 hunks)
  • packages/tailwind-config/styles/components/command-palette.css (1 hunks)
  • packages/tailwind-config/styles/components/emoji-picker.css (2 hunks)
  • packages/tailwind-config/styles/components/spinner.css (1 hunks)
  • packages/tailwind-config/styles/components/tags-input.css (1 hunks)
  • packages/tailwind-config/styles/components/utility-classes.css (1 hunks)
  • packages/tailwind-config/styles/editor/drag-drop.css (1 hunks)
  • packages/tailwind-config/styles/editor/editor.css (1 hunks)
  • packages/tailwind-config/styles/editor/github-dark.css (1 hunks)
  • packages/tailwind-config/styles/editor/index.css (1 hunks)
  • packages/tailwind-config/styles/editor/table.css (1 hunks)
  • packages/tailwind-config/styles/editor/tailwind.css (1 hunks)
  • packages/tailwind-config/styles/editor/variables.css (1 hunks)
  • packages/tailwind-config/styles/fonts.css (1 hunks)
  • packages/tailwind-config/styles/index.css (1 hunks)
  • packages/tailwind-config/styles/themes/dark.css (1 hunks)
  • packages/tailwind-config/styles/themes/editor-colors.css (1 hunks)
  • packages/tailwind-config/styles/themes/light.css (1 hunks)
  • packages/tailwind-config/styles/themes/variables.css (1 hunks)
  • packages/ui/styles/globals.css (0 hunks)
💤 Files with no reviewable changes (4)
  • apps/web/styles/globals.css
  • packages/ui/styles/globals.css
  • apps/space/styles/globals.css
  • apps/admin/styles/globals.css
🧰 Additional context used
🪛 Biome (2.1.2)
packages/tailwind-config/styles/editor/drag-drop.css

[error] 106-106: Unknown type selector is not allowed.

See MDN web docs for more details.
Consider replacing the unknown type selector with valid one.

(lint/correctness/noUnknownTypeSelector)

packages/tailwind-config/styles/editor/editor.css

[error] 153-153: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

position is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 229-229: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

cursor is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Analyze (javascript)
  • GitHub Check: Build and lint web apps
🔇 Additional comments (18)
packages/tailwind-config/styles/editor/tailwind.css (1)

1-3: LGTM!

Standard Tailwind directives properly configured for the editor layer.

apps/web/app/(all)/layout.tsx (1)

5-7: Verify removed styles are migrated to centralized global.css.

Line 6's comment indicates command palette and emoji styles are now in the centralized global.css, but confirm that @plane/tailwind-config/global.css actually imports all necessary component styles (emoji-picker.css, command palette styles, etc.).

packages/tailwind-config/styles/components/emoji-picker.css (1)

54-67: LGTM!

The added search container styling (lines 54–67) complements the existing emoji picker styles without conflicts, providing targeted customizations for the search input, placeholder, and icon.

packages/tailwind-config/styles/themes/editor-colors.css (1)

1-50: LGTM!

Proper use of Tailwind @layer base and theme-aware CSS variables for editor colors. Light/dark overrides are well-structured.

packages/tailwind-config/styles/fonts.css (1)

1-89: Verify PostCSS import resolution for @plane/ namespace paths.

The font-face declarations use ~@plane/tailwind-config/fonts/... paths. This requires proper PostCSS configuration to resolve the @plane/ package namespace. postcss-import should be the first plugin in your PostCSS chain so other plugins work on the combined AST, and you'll need a custom resolver or module alias configuration to handle the @plane/ namespace. Verify your PostCSS config (or build tool config) explicitly handles this resolution.

packages/tailwind-config/styles/components/spinner.css (1)

1-129: LGTM!

Properly structured spinner animation with vendor prefixes and appropriate timing. The 12-bar rotation pattern with cascading delays creates the desired visual effect.

packages/tailwind-config/styles/app-specific/web-animations.css (1)

1-161: LGTM!

Well-organized web-specific animations using Tailwind's @layer utilities. Animation definitions are clear and the corresponding utility classes (animate-slide-up, animate-text-slide-in, etc.) follow conventions.

apps/web/app/layout.tsx (1)

5-5: LGTM! Import path updated to centralized styles.

The change correctly points to the new centralized global stylesheet in the tailwind-config package, aligning with the PR's objective to eliminate style duplication.

apps/space/app/layout.tsx (1)

5-5: LGTM! Consistent with centralized styling approach.

The import path change correctly aligns with other app layouts (web, admin) in using the centralized global stylesheet.

apps/admin/app/layout.tsx (1)

6-6: LGTM! Completes the centralization across all apps.

All three apps (web, space, admin) now consistently import from the centralized tailwind-config package.

packages/tailwind-config/styles/index.css (1)

1-22: Well-organized modular structure.

The file effectively organizes styles into logical categories (fonts, base, themes, components, app-specific, editor). The import order ensures proper CSS cascade.

packages/tailwind-config/styles/base/reset.css (1)

1-17: CSS variable --color-text-100 is properly defined and the usage syntax is valid.

The variable is defined across the theme files (variables.css line 43, light.css lines 42 and 100, dark.css lines 80 and 137) with RGB values. The rgba(var(--color-text-100)) pattern is valid CSS and widely supported for legacy rgba() syntax with 3-component custom properties.

packages/tailwind-config/global.css (1)

1-3: Minimal, clean entry point for centralized styles.

The global CSS file appropriately delegates detailed styling to modular imports, reducing complexity at the entry point. Ensure that ./styles/index.css aggregates all required styles (fonts, themes, editor, etc.) and is imported by all app layout files.

packages/tailwind-config/styles/editor/github-dark.css (1)

1-85: Comprehensive syntax highlighting theme—well-organized and complete.

The GitHub-dark theme is well-structured with clear color mappings for all major syntax element types. All styles are appropriate for a fixed, immutable theme.

packages/tailwind-config/styles/editor/table.css (1)

1-216: Comprehensive table editor styles—well-organized with clear visual hierarchy.

The table styling is thorough, covering structure, interactions (selection, resizing, insertion), and visual feedback. Proper use of CSS custom properties maintains theme consistency. Sections are clearly demarcated with comments.

packages/tailwind-config/styles/themes/light.css (1)

1-132: All referenced CSS custom properties are defined—no issues found.

Verification confirms that --color-primary-200, --color-error-200, --color-error-10, and --color-error-30 are all properly defined in packages/tailwind-config/styles/themes/variables.css. The light theme file is well-structured with proper @layer base organization, clean [data-theme] selectors, and correct hierarchical token dependencies.

packages/tailwind-config/styles/editor/editor.css (2)

1-508: The review comment is based on an incorrect assumption about the file content.

The file packages/tailwind-config/styles/editor/editor.css (under review) contains only CSS rule definitions—it has no @import statements. The CSS imports are handled separately by packages/tailwind-config/styles/editor/index.css and packages/tailwind-config/styles/index.css.

The PostCSS configuration itself is correct and properly configured:

  • postcss-import v16.1.1 is listed as a dependency
  • postcss.config.js exists with postcss-import as the first plugin (correct ordering)
  • Custom resolver for @plane/ namespace is implemented with require.resolve()

However, these details are not relevant to the file under review, as editor.css does not perform any imports. The review's concern about verifying PostCSS configuration for @plane/ imports in this specific file is misplaced.

Likely an incorrect or invalid review comment.


1-50: The referenced CSS custom properties are defined in a parent theme layer, not missing.

All 6 properties that editor.css references are actually defined in packages/tailwind-config/styles/themes/variables.css (and per-theme overrides in light.css and dark.css), not in the editor's own variables.css file. This represents an implicit cross-layer dependency rather than undefined properties. The properties resolve correctly if the theme CSS is loaded before or alongside editor styles in the cascade. The architecture separates editor-specific variables from theme-level color variables, which is intentional. However, this implicit dependency could be made explicit by either documenting the requirement or ensuring theme imports are part of the editor stylesheet bundle.

cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (6)
packages/tailwind-config/config/animations.js (1)

7-14: Use transforms instead of left/right for smoother, GPU-accelerated animations; unify naming.

left/right property animation can jank; prefer translateX. Also standardize to kebab-case, and keep camelCase aliases for backward compatibility.

 module.exports = {
   // Toast notification animations
-  leftToaster: {
-    "0%": { left: "-20rem" },
-    "100%": { left: "0" },
-  },
-  rightToaster: {
-    "0%": { right: "-20rem" },
-    "100%": { right: "0" },
-  },
+  // keep camelCase aliases for b/c but switch to transform-based motion
+  leftToaster: {
+    from: { transform: "translateX(-20rem)" },
+    to: { transform: "translateX(0)" },
+  },
+  rightToaster: {
+    from: { transform: "translateX(20rem)" },
+    to: { transform: "translateX(0)" },
+  },
+  // kebab-case equivalents (preferred)
+  "left-toaster": {
+    from: { transform: "translateX(-20rem)" },
+    to: { transform: "translateX(0)" },
+  },
+  "right-toaster": {
+    from: { transform: "translateX(20rem)" },
+    to: { transform: "translateX(0)" },
+  },
 
   // Progress bar animation
   "bar-loader": {
-    from: { left: "-100%" },
-    to: { left: "100%" },
+    from: { transform: "translateX(-100%)" },
+    to: { transform: "translateX(100%)" },
   },

Also applies to: 16-20

packages/tailwind-config/config/utils.js (2)

6-11: JSDoc mismatch; function returns RGB (no alpha). Prefer rgb() over rgba() when no alpha.

- * Converts a CSS variable name to RGB format
+ * Converts a CSS variable name to RGB format
  * @param {string} variableName - CSS variable name (e.g., "--color-primary-100")
- * @returns {string} RGBA color string
+ * @returns {string} RGB color string
  */
-const convertToRGB = (variableName) => `rgba(var(${variableName}))`;
+const convertToRGB = (variableName) => `rgb(var(${variableName}))`;

18-19: Modern syntax option (optional): rgb(var(--token) / ) reads clearer than rgba(var(--token), a).

-const convertToRGBA = (variableName, alpha) =>
-  `rgba(var(${variableName}), ${alpha})`;
+const convertToRGBA = (variableName, alpha) =>
+  `rgb(var(${variableName}) / ${alpha})`;
packages/tailwind-config/config/shadows.js (1)

12-13: Naming nit: 'rg' is ambiguous. Consider 'base' or drop the extra step for clarity.

Small readability win; not blocking.

Also applies to: 24-25

packages/tailwind-config/config/plugins.js (1)

13-27: .px-page-x duplicates theme 'padding.page-x' and mixes @media with responsive variants; can conflict.

Define breakpoint with @screen and drop the "responsive" variants to avoid duplicate md rules, or remove theme.padding.page-x to make plugin the single source.

-  function ({ addUtilities }) {
+  function ({ addUtilities, theme }) {
     const newUtilities = {
       // Responsive horizontal padding for pages
-      // Mobile screens
       ".px-page-x": {
-        paddingLeft: "1.25rem",
-        paddingRight: "1.25rem",
+        paddingLeft: "1.25rem",
+        paddingRight: "1.25rem",
       },
-      // Medium screens (768px and up)
-      "@media (min-width: 768px)": {
-        ".px-page-x": {
-          paddingLeft: "1.35rem",
-          paddingRight: "1.35rem",
-        },
-      },
+      // Medium screens (via Tailwind breakpoint)
+      "@screen md": {
+        ".px-page-x": {
+          paddingLeft: theme("padding.page-x"),
+          paddingRight: theme("padding.page-x"),
+        },
+      },
       // Hide scrollbar but keep functionality
       ".scrollbar-hide": {
         "-ms-overflow-style": "none" /* IE and Edge */,
         "scrollbar-width": "none" /* Firefox */,
         "&::-webkit-scrollbar": {
           display: "none" /* Chrome, Safari and Opera */,
         },
       },
     };
-
-    addUtilities(newUtilities, ["responsive"]);
+    // No responsive variants; we already emit breakpoint-specific rules
+    addUtilities(newUtilities);
   },

Also consider removing padding.page-x from spacing.js to avoid duplicate class definitions.

Also applies to: 39-40

packages/tailwind-config/config/colors.js (1)

6-6: Optional: re-export utils in index and import from a single barrel to reduce relative paths.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0ba549a and 80017d7.

📒 Files selected for processing (10)
  • packages/tailwind-config/config/animations.js (1 hunks)
  • packages/tailwind-config/config/colors.js (1 hunks)
  • packages/tailwind-config/config/content.js (1 hunks)
  • packages/tailwind-config/config/layout.js (1 hunks)
  • packages/tailwind-config/config/plugins.js (1 hunks)
  • packages/tailwind-config/config/shadows.js (1 hunks)
  • packages/tailwind-config/config/spacing.js (1 hunks)
  • packages/tailwind-config/config/typography.js (1 hunks)
  • packages/tailwind-config/config/utils.js (1 hunks)
  • packages/tailwind-config/tailwind.config.js (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (3)
packages/tailwind-config/config/typography.js (2)
packages/tailwind-config/config/colors.js (1)
  • require (6-6)
packages/tailwind-config/config/utils.js (1)
  • convertToRGB (10-10)
packages/tailwind-config/config/colors.js (2)
packages/tailwind-config/config/typography.js (1)
  • require (6-6)
packages/tailwind-config/config/utils.js (2)
  • convertToRGB (10-10)
  • convertToRGBA (18-19)
packages/tailwind-config/tailwind.config.js (2)
packages/tailwind-config/config/colors.js (1)
  • require (6-6)
packages/tailwind-config/config/typography.js (1)
  • require (6-6)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Build and lint web apps
  • GitHub Check: Cursor Bugbot
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (5)
packages/tailwind-config/config/layout.js (1)

8-21: LGTM on named z-index scale; improves readability.

Confirm default numeric z-* utilities remain available (theme.extend vs override) in tailwind.config.js.

packages/tailwind-config/config/typography.js (2)

1-25: LGTM! Font size scaling is mathematically correct.

The modular structure is clean, and all fontSize values are correctly calculated as 90% of Tailwind's default scale. The approach of centralizing typography configuration improves maintainability.


28-54: Typography configuration looks well-structured.

The prose configuration properly maps CSS custom properties for the @tailwindcss/typography plugin. Using convertToRGB for color variables maintains consistency with the color configuration module and supports Tailwind's opacity modifier system.

packages/tailwind-config/tailwind.config.js (2)

1-14: Excellent modular refactoring!

The separation of concerns into focused configuration modules significantly improves maintainability. Each module has a clear, single responsibility, making the codebase easier to navigate and modify.


16-49: Configuration assembly is clean and well-organized.

The theme.extend structure properly maps all imported modules to their respective Tailwind properties. The selective destructuring of spacing, typography, and layout modules provides fine-grained control while keeping the main config file readable.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

♻️ Duplicate comments (1)
packages/tailwind-config/styles/themes/variables.css (1)

27-32: RGB color token formatting is now consistent.

The past review comment flagged mixed RGB formats (space-separated vs comma-separated) in error color tokens. The current code (lines 27–32) shows all error colors are now consistently comma-separated, resolving the earlier concern.

🧹 Nitpick comments (3)
packages/tailwind-config/styles/components/tags-input.css (1)

1-40: CSS variables properly applied; verify variable definitions exist.

The hardcoded color values from the prior version have been replaced with CSS custom properties (--color-border-200, --color-background-80, --color-background-90, --color-text-100), which aligns well with the PR's centralized theming goal.

The rgba(var(...)) pattern requires these variables to be defined as space-separated RGB values (e.g., --color-border-200: 0 0 0;) to work correctly. Please verify that these variable names are defined in packages/tailwind-config/styles/themes/variables.css and that they use the expected format.

Additionally, consider adding fallback colors to ensure the component remains usable if CSS variables fail to resolve:

 .tags-input-container {
-  border: 2px solid rgba(var(--color-border-200));
+  border: 2px solid rgba(var(--color-border-200, 200 200 200));
packages/tailwind-config/styles/editor/editor.css (1)

107-112: Consolidate duplicate selector blocks for checkbox styling.

The selector ul[data-type="taskList"] li > label input[type="checkbox"] is declared twice with conflicting properties. Lines 107–112 define a first set of styles, and lines 144–179 define a second set that cascades over the first due to CSS specificity. The first block is effectively dead code. Merge these into a single rule.

-ul[data-type="taskList"] li > label input[type="checkbox"] {
-  border: 1px solid rgba(var(--color-text-100), 0.2) !important;
-  outline: none;
-  border-radius: 2px;
-  transform: scale(1.05);
-}
-
-/* ... other rules ... */
-
 ul[data-type="taskList"] li > label input[type="checkbox"] {
   position: relative;
   -webkit-appearance: none;
   appearance: none;
   background-color: transparent;
   margin: 0;
   cursor: pointer;
   width: 0.8rem;
   height: 0.8rem;
-  border: 1.5px solid rgb(var(--color-text-100));
+  border: 1.5px solid rgb(var(--color-text-100));
   margin-right: 0.2rem;
   margin-top: 0.15rem;
   outline: none;
   border-radius: 2px;
   transform: scale(1.05);
   ...
 }

Also applies to: 144-179

packages/tailwind-config/styles/themes/variables.css (1)

56-56: Minor: Fix typo in border color comment.

Line 56 has a malformed comment separator: /* subtle border= 1 */. Should be /* subtle border 1 */ or similar.

-    --color-border-100: 245, 245, 245; /* subtle border= 1 */
+    --color-border-100: 245, 245, 245; /* subtle border 1 */
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 80017d7 and 44c5653.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (8)
  • packages/tailwind-config/config/colors.js (1 hunks)
  • packages/tailwind-config/config/content.js (1 hunks)
  • packages/tailwind-config/package.json (1 hunks)
  • packages/tailwind-config/postcss.config.js (1 hunks)
  • packages/tailwind-config/styles/components/tags-input.css (1 hunks)
  • packages/tailwind-config/styles/editor/editor.css (1 hunks)
  • packages/tailwind-config/styles/editor/variables.css (1 hunks)
  • packages/tailwind-config/styles/themes/variables.css (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
packages/tailwind-config/config/colors.js (2)
packages/tailwind-config/config/typography.js (1)
  • require (6-6)
packages/tailwind-config/config/utils.js (2)
  • convertToRGB (10-10)
  • convertToRGBA (18-19)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build and lint web apps
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (6)
packages/tailwind-config/package.json (1)

8-10: Previous critical issue resolved: postcss-import correctly placed in dependencies.

The package is now properly listed in dependencies rather than devDependencies, ensuring it's available at runtime when this config is consumed by other packages. Version ^16.1.1 aligns with the latest stable release.

packages/tailwind-config/postcss.config.js (1)

3-12: LGTM! Custom resolver correctly handles @plane/* namespace imports.

The implementation follows postcss-import best practices:

  • Positioned as the first plugin in the pipeline (per learnings)
  • Custom resolver uses require.resolve() for @plane/* packages
  • Returns id unchanged for default resolution behavior
  • Comment accurately describes the package handling

The previous concerns (incorrect comment reference and dependency placement) have been addressed.

Based on learnings

packages/tailwind-config/styles/themes/variables.css (1)

1-469: Overall structure and organization: LGTM.

The file defines a comprehensive, well-organized set of CSS custom properties scoped to :root within @layer base. Naming conventions are consistent, all RGB values are valid, and the hierarchical organization (primary, error, background, text, etc.) supports the modular theming approach described in the PR. The use of var() references for semantic aliasing (e.g., --color-background-primary referencing --color-primary-10) is a solid pattern for maintainability.

packages/tailwind-config/styles/editor/variables.css (3)

1-193: CSS nesting and custom property structure are well-organized.

The file uses modern CSS nesting syntax with & selectors (lines 49–127, 130–191) and a hierarchical custom property naming scheme (--editor-colors-*, --font-size-*, --line-height-*, etc.), which support maintainability and theme consistency. Theme selectors use attribute substring matching ([data-theme*="light"], [data-theme*="dark"]), which is idiomatic for data-attribute-based theming. The PostCSS pipeline includes "tailwindcss/nesting" plugin (packages/tailwind-config/postcss.config.js), confirming full support for the nested CSS syntax used here.


44-46: The variable --color-text-100 is correctly defined and available in scope.

The theme files (light.css, dark.css, and variables.css) all define --color-text-100 with RGB values like "23, 23, 23". The import order in styles/index.css confirms that all theme files (lines 6-8) are imported before editor/variables.css (line 18), ensuring the variable is available in scope through the CSS cascade. The syntax and precedence are correct.


248-305: Container queries properly formatted; verification confirms all dependencies in place.

All container query expressions use explicit px units (912px, 1344px, 760px, 930px). Verification confirms:

  • Both required container elements exist in markup with matching container-name properties (#page-toolbar-container in toolbar/root.tsx, #page-content-container in editor-body.tsx)
  • All referenced CSS custom properties are defined in theme files (--color-text-100, --normal-content-margin, --wide-content-margin)
  • Layout configuration logic is sound for responsive padding across viewport ranges

* Includes custom colors, sidebar colors, toast colors, and subscription colors
*/

const { convertToRGB, convertToRGBA } = require("./utils");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Bug: convertToRGB returns rgba(...) without alpha; should be rgb(...).

All color tokens here rely on convertToRGB, but utils.js defines it with rgba(var(...)) (no alpha), which is invalid. Switch to rgb(var(...)). This will fix all usages in this file.

Apply in packages/tailwind-config/config/utils.js:

-const convertToRGB = (variableName) => `rgba(var(${variableName}))`;
+const convertToRGB = (variableName) => `rgb(var(${variableName}))`;

🏁 Script executed:

#!/bin/bash
# Verify no lingering rgba(var(...)) without alpha
rg -nP 'convertToRGB\\s*=|rgba\\(var\\([^)]*\\)\\)\\b' packages/tailwind-config/config

Length of output: 0



---

🏁 Script executed:

```shell
#!/bin/bash
# Directly inspect the utils.js and colors.js files
echo "=== utils.js ===" 
cat packages/tailwind-config/config/utils.js

echo -e "\n=== colors.js (first 20 lines) ===" 
head -20 packages/tailwind-config/config/colors.js

Length of output: 1440



---

🏁 Script executed:

```shell
#!/bin/bash
# Search for all usages of convertToRGB in the codebase
echo "=== Searching for convertToRGB usages ===" 
rg -n 'convertToRGB' packages/tailwind-config --type js

echo -e "\n=== Searching for direct rgba or rgb function patterns ===" 
rg -n 'rgba\(var\(|rgb\(var\(' packages/tailwind-config --type js -A1 -B1

Length of output: 17133


Fix convertToRGB to output rgb() instead of rgba()

convertToRGB currently returns rgba(var(...)) without an alpha parameter, which is semantically incorrect and doesn't match the function name. This affects 150+ color definitions across the codebase.

Apply in packages/tailwind-config/config/utils.js:

-const convertToRGB = (variableName) => `rgba(var(${variableName}))`;
+const convertToRGB = (variableName) => `rgb(var(${variableName}))`;

Also update the JSDoc comment on the same function from @returns {string} RGBA color string to @returns {string} RGB color string.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In packages/tailwind-config/config/utils.js around lines 1 to 120, convertToRGB
currently returns an rgba(...) string; update its implementation to return an
rgb(var(--...)) string (remove the alpha portion and the 'a' in 'rgba') so the
function name and output match, and change the JSDoc from "@returns {string}
RGBA color string" to "@returns {string} RGB color string".

Comment on lines +7 to +29
relative: false,
files: [
// App directories
"./app/**/*.{js,ts,jsx,tsx}",
"./core/**/*.{js,ts,jsx,tsx}",
"./ce/**/*.{js,ts,jsx,tsx}",
"./ee/**/*.{js,ts,jsx,tsx}",

// Component directories
"./components/**/*.tsx",
"./constants/**/*.{js,ts,jsx,tsx}",
"./layouts/**/*.tsx",
"./pages/**/*.tsx",
"./ui/**/*.tsx",

// Shared packages
"../../packages/ui/src/**/*.{js,ts,jsx,tsx}",
"../../packages/propel/src/**/*.{js,ts,jsx,tsx}",
"../../packages/editor/src/**/*.{js,ts,jsx,tsx}",

// Exclude Storybook files
"!../../packages/ui/**/*.stories{js,ts,jsx,tsx}",
],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Good call switching to relative: false; verify each app actually consumes these globs.

Looks right for monorepo apps running Tailwind from their own CWD. Ensure apps don’t rely on presets for content (Tailwind doesn’t merge content from presets); each app should set content or import this module’s files.

Run to confirm usage across apps:


🏁 Script executed:

#!/bin/bash
# List app tailwind configs and check they import/assign content from the shared module
fd -t f -a 'tailwind.config.*' apps | while read -r f; do
  echo "=== $f ==="
  rg -nP 'content\s*:' -n -C1 "$f" || true
  rg -n '@plane/tailwind-config/config/content' "$f" || true
  echo
done

Length of output: 171


I need to examine the actual content of these tailwind config files to understand if they're using presets or if the content configuration is missing.

Now let me examine the actual content of these tailwind config files:

Now I need to examine the actual tailwind config files to understand their current state:


🏁 Script executed:

#!/bin/bash
# Read the three app tailwind config files
for f in apps/admin/tailwind.config.js apps/space/tailwind.config.js apps/web/tailwind.config.js; do
  echo "=== $f ==="
  cat "$f"
  echo ""
done

Length of output: 675


I need to examine the shared tailwind config to see how it incorporates the content configuration:


🏁 Script executed:

#!/bin/bash
# Read the shared tailwind config file
cat packages/tailwind-config/tailwind.config.js

Length of output: 1164


I need to verify Tailwind's actual behavior with presets and the content option:


🌐 Web query:

Tailwind CSS presets content configuration inheritance behavior

💡 Result:

Short answer: the content array is not merged — a project's content config replaces the preset's content. Tailwind treats content as a "replace" option (not extend/merge), so if your top-level tailwind.config.js defines content it will override whatever a preset provided. [1][2]

Example: if a preset defines content: ['./lib//*.html'] and your project config has content: ['./src//.html'], Tailwind will use only ['./src/**/.html'] (not both). [1]

Sources: Tailwind Presets docs (merging logic) and Content configuration docs. [1][2]


Now I need to verify the actual directory structures in the apps to confirm the glob patterns are valid:


🏁 Script executed:

#!/bin/bash
# Check directory structures in each app
for app in apps/admin apps/space apps/web; do
  echo "=== $app directory structure ==="
  ls -la "$app" | head -20
  echo ""
  echo "Checking for key directories:"
  for dir in app core ce ee components constants layouts pages ui; do
    if [ -d "$app/$dir" ]; then
      echo "$dir exists"
    else
      echo "$dir missing"
    fi
  done
  echo ""
done

Length of output: 4117


I found a discrepancy. Let me check if these missing directories are gitignored or if the globs need to be cleaned up:


🏁 Script executed:

#!/bin/bash
# Check if missing directories are in .gitignore
for app in apps/admin apps/space apps/web; do
  echo "=== Checking $app/.gitignore ==="
  if [ -f "$app/.gitignore" ]; then
    grep -E "components|constants|layouts|pages|ui" "$app/.gitignore" || echo "  (no matches)"
  fi
done

echo ""
echo "=== Checking root .gitignore ==="
grep -E "components|constants|layouts|pages|ui" .gitignore || echo "  (no matches)"

echo ""
echo "=== Checking if these dirs exist elsewhere ==="
fd -t d -e 'components|constants|layouts|pages|ui' . --max-depth 2 2>/dev/null | grep -v node_modules | head -20

Length of output: 295


Let me verify the monorepo package paths that are also referenced:


🏁 Script executed:

#!/bin/bash
# Check if the referenced package directories exist
echo "=== Checking referenced packages ==="
for pkg in packages/ui packages/propel packages/editor; do
  if [ -d "$pkg/src" ]; then
    echo "$pkg/src exists"
    ls -la "$pkg/src" | head -5
  else
    echo "$pkg/src missing"
  fi
  echo ""
done

Length of output: 806


Remove dead glob patterns from content.js that don't match actual app directories.

Verification confirms several glob patterns reference directories that don't exist in any of the three apps (admin, space, web):

  • ./components/**/*.tsx — not in any app
  • ./constants/**/*.{js,ts,jsx,tsx} — not in any app
  • ./layouts/**/*.tsx — not in any app
  • ./pages/**/*.tsx — not in any app
  • ./ui/**/*.tsx — not in any app

Only these app-level globs match actual structure:

  • ./app/**/*.{js,ts,jsx,tsx}
  • ./core/**/*.{js,ts,jsx,tsx}
  • ./ce/**/*.{js,ts,jsx,tsx}
  • ./ee/**/*.{js,ts,jsx,tsx}

The monorepo package paths are valid and exist. Clean up content.js to remove the unused patterns or confirm these directories will be added.

🤖 Prompt for AI Agents
packages/tailwind-config/config/content.js lines 7-29: several glob patterns
under files are dead (components, constants, layouts, pages, ui) and should be
removed to avoid scanning non-existent directories; update the files array to
keep only the actual app globs (./app/**/*. {js,ts,jsx,tsx}, ./core/**/*.
{js,ts,jsx,tsx}, ./ce/**/*. {js,ts,jsx,tsx}, ./ee/**/*. {js,ts,jsx,tsx}) and the
valid monorepo package paths (../../packages/ui/src/**/*.{js,ts,jsx,tsx},
../../packages/propel/src/**/*.{js,ts,jsx,tsx},
../../packages/editor/src/**/*.{js,ts,jsx,tsx}), preserve the Storybook
exclusion, and remove the five unused patterns (or alternatively confirm and add
the missing directories before leaving the globs); after editing, run the
Tailwind content scan/build to verify no missing matches.

"../../packages/editor/src/**/*.{js,ts,jsx,tsx}",

// Exclude Storybook files
"!../../packages/ui/**/*.stories{js,ts,jsx,tsx}",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix Storybook exclusion glob and mirror for other shared packages.

Current pattern misses the dot before extensions, so stories aren’t excluded.

Apply:

-    "!../../packages/ui/**/*.stories{js,ts,jsx,tsx}",
+    "!../../packages/ui/**/*.stories.{js,ts,jsx,tsx}",
+    "!../../packages/propel/**/*.stories.{js,ts,jsx,tsx}",
+    "!../../packages/editor/**/*.stories.{js,ts,jsx,tsx}",

Optional (to reduce bloat):

+    "!**/*.{spec,test}.{js,ts,jsx,tsx}",
+    "!**/__tests__/**",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"!../../packages/ui/**/*.stories{js,ts,jsx,tsx}",
"!../../packages/ui/**/*.stories.{js,ts,jsx,tsx}",
"!../../packages/propel/**/*.stories.{js,ts,jsx,tsx}",
"!../../packages/editor/**/*.stories.{js,ts,jsx,tsx}",
🤖 Prompt for AI Agents
packages/tailwind-config/config/content.js around line 28: the Storybook
exclusion glob is missing the dot before the extensions causing stories to not
be excluded; update the pattern to use the correct brace extension syntax (e.g.
change "!../../packages/ui/**/*.stories{js,ts,jsx,tsx}" to use
".stories.{js,ts,jsx,tsx}") and apply the same corrected pattern to the other
shared packages entries so all story files are properly excluded (optionally
remove unused package globs to reduce build bloat).

}

&.ProseMirror-selectednode {
outline: 3px solid rgba(var(--color-primary-100));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix incorrect rgba() syntax; use rgb() or the / alpha syntax.

Lines 79, 123, 129–130 use rgba(var(--color-primary-100)) with no alpha channel argument, which is invalid CSS. Use either:

  • rgb(var(--color-primary-100)) if full opacity is intended, or
  • rgba(var(--color-primary-100) / <alpha>) with the modern CSS syntax.
-  outline: 3px solid rgba(var(--color-primary-100));
+  outline: 3px solid rgb(var(--color-primary-100));

Apply similar fixes at lines 123, 129–130:

-  background-color: rgba(var(--color-primary-100)) !important;
+  background-color: rgb(var(--color-primary-100)) !important;
-  background-color: rgba(var(--color-primary-300)) !important;
-  border-color: rgba(var(--color-primary-300)) !important;
+  background-color: rgb(var(--color-primary-300)) !important;
+  border-color: rgb(var(--color-primary-300)) !important;

Also applies to: 123-123, 129-130

🤖 Prompt for AI Agents
In packages/tailwind-config/styles/editor/editor.css around lines 79, 123, and
129–130, the CSS uses invalid rgba(var(--color-primary-100)) syntax without an
alpha value; update each occurrence to either rgb(var(--color-primary-100)) for
full opacity or use the newer slash alpha form rgba(var(--color-primary-100) /
<alpha>) (e.g., / 0.5) where semi-transparency is needed, ensuring you replace
each invalid rgba() call at the listed lines with one of these valid forms.

Comment on lines +279 to +328
--red-light-100: 255, 247, 247;
--red-light-200: 255, 240, 240;
--red-light-300: 255, 227, 227;
--red-light-400: 255, 209, 209;
--red-light-500: 255, 179, 179;
--red-light-600: 247, 148, 148;
--red-light-700: 230, 115, 115;
--red-light-800: 214, 97, 97;
--red-light-900: 191, 84, 84;
--red-light-1000: 163, 77, 77;
--red-light-1100: 138, 64, 64;

/* Primitive Colors - Red Dark */
--red-dark-100: 102, 41, 41;
--red-dark-200: 163, 77, 77;
--red-dark-300: 191, 84, 84;
--red-dark-400: 214, 97, 97;
--red-dark-500: 230, 115, 115;
--red-dark-600: 247, 148, 148;
--red-dark-700: 255, 179, 179;
--red-dark-800: 255, 209, 209;
--red-dark-900: 255, 227, 227;
--red-dark-1000: 255, 240, 240;
--red-dark-1100: 255, 247, 247;

/* Primitive Colors - Blue Light */
--blue-light-100: 255, 247, 247;
--blue-light-200: 255, 240, 240;
--blue-light-300: 255, 227, 227;
--blue-light-400: 255, 209, 209;
--blue-light-500: 255, 179, 179;
--blue-light-600: 247, 148, 148;
--blue-light-700: 230, 115, 115;
--blue-light-800: 214, 97, 97;
--blue-light-900: 191, 84, 84;
--blue-light-1000: 163, 77, 77;
--blue-light-1100: 138, 64, 64;

/* Primitive Colors - Blue Dark */
--blue-dark-100: 138, 64, 64;
--blue-dark-200: 163, 77, 77;
--blue-dark-300: 191, 84, 84;
--blue-dark-400: 214, 97, 97;
--blue-dark-500: 230, 115, 115;
--blue-dark-600: 247, 148, 148;
--blue-dark-700: 255, 179, 179;
--blue-dark-800: 255, 209, 209;
--blue-dark-900: 255, 227, 227;
--blue-dark-1000: 255, 240, 240;
--blue-dark-1100: 255, 247, 247;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify: Blue-light and red-light palettes have identical RGB values.

Lines 305–315 (blue-light) and 279–289 (red-light) define identical color values across all tones. This appears unintentional and should be verified. Consider whether blue-light should have distinct values from red-light, or if this is placeholder/future customization.


🏁 Script executed:

#!/bin/bash
# Description: Extract and compare blue-light and red-light palette values
# Expected: If they should differ, this will highlight identical RGB tuples

echo "=== Red-light palette values ==="
rg -A 12 "Primitive Colors - Red Light" packages/tailwind-config/styles/themes/variables.css | grep -oP '\d+, \d+, \d+' | sort

echo ""
echo "=== Blue-light palette values ==="
rg -A 12 "Primitive Colors - Blue Light" packages/tailwind-config/styles/themes/variables.css | grep -oP '\d+, \d+, \d+' | sort

echo ""
echo "=== Comparison ==="
red_vals=$(rg -A 12 "Primitive Colors - Red Light" packages/tailwind-config/styles/themes/variables.css | grep -oP '\d+, \d+, \d+' | sort)
blue_vals=$(rg -A 12 "Primitive Colors - Blue Light" packages/tailwind-config/styles/themes/variables.css | grep -oP '\d+, \d+, \d+' | sort)

if [ "$red_vals" = "$blue_vals" ]; then
  echo "MATCH: Red-light and blue-light contain identical values (possible error)"
else
  echo "DIFFER: Palettes have distinct values (expected)"
fi

Length of output: 453


I need to verify if this duplication extends to other color families and check for any documentation explaining it.

Now let me verify if this duplication extends to the dark variants and check the full scope of the issue:

Fix duplicate color definitions between red and blue palettes.

Each color in the default palette includes 11 steps, with 50 being the lightest, and 950 being the darkest, and different color families should have distinct RGB values across their tones. Currently, red-light (lines 279–289) and blue-light (lines 305–315) are identical, and likely red-dark and blue-dark share the same issue. Provide distinct values for the blue palette to maintain semantic color separation.

🤖 Prompt for AI Agents
In packages/tailwind-config/styles/themes/variables.css around lines 279–328 the
blue-light (lines ~305–315) and blue-dark (~316–328) RGB variables are
duplicates of the red palette; replace those duplicate blue values with the
correct blue RGB steps (11 distinct tones matching your design system:
lightest→darkest), ensure the blue-light and blue-dark series use unique
blue-specific RGB triples (not red copies), scan other color families for
similar duplicates and update any found, and add/update a short comment or doc
link in this file noting the source of the blue RGB values so future changes
remain consistent.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
packages/tailwind-config/styles/editor/drag-drop.css (1)

77-106: List item margin calculations are reasonable.

The progressive margin-left adjustments for ordered and unordered list items (lines 93–106) account for increasing list marker width across digit boundaries (1-digit → 2-digit → 3-digit numbers), which aligns with typical typographic alignment. Consider adding brief inline comments to document the intent (e.g., /* Adjust for 2-digit list numbers */).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 44c5653 and 49fc646.

📒 Files selected for processing (1)
  • packages/tailwind-config/styles/editor/drag-drop.css (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build and lint web apps
🔇 Additional comments (3)
packages/tailwind-config/styles/editor/drag-drop.css (3)

108-120: Previous critical issue has been resolved.

The selector syntax has been corrected: .ProseMirror .node-image and .ProseMirror .node-imageComponent now properly target nested class selectors with the required dot and space notation. This resolves the Biome linting error from the prior review.


38-75: Drag-and-drop selection styling looks solid.

The use of CSS custom properties (--horizontal-offset) for conditional offset calculation is clean. The :has() pseudo-class correctly exempts certain block types (images, tables, issue embeds) from the default offset, and the ::after pseudo-element creates a visual selection highlight with appropriate stacking and sizing logic.


1-36: Menu and handle visibility toggles are clear.

The use of opacity transitions and pointer-events: none to hide UI elements is a solid pattern. Consistent application across side-menu, drag-handle, and ai-handle improves maintainability.

@pushya22 pushya22 marked this pull request as draft October 24, 2025 14:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants