summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app/.opencode
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-09-18 10:59:01 -0400
committerFrank <[email protected]>2025-09-18 10:59:01 -0400
commit4ceabdffa07b1af8d99eb73622a4d549d99ec6d2 (patch)
tree72e2ae62084a9e24cc76caffbd1f30dafc69ea56 /packages/console/app/.opencode
parentc87480cf931a6f8f8b55552558ef521f1918b578 (diff)
downloadopencode-4ceabdffa07b1af8d99eb73622a4d549d99ec6d2.tar.gz
opencode-4ceabdffa07b1af8d99eb73622a4d549d99ec6d2.zip
wip: zen
Diffstat (limited to 'packages/console/app/.opencode')
-rw-r--r--packages/console/app/.opencode/agent/css.md149
1 files changed, 149 insertions, 0 deletions
diff --git a/packages/console/app/.opencode/agent/css.md b/packages/console/app/.opencode/agent/css.md
new file mode 100644
index 000000000..d0ec43a48
--- /dev/null
+++ b/packages/console/app/.opencode/agent/css.md
@@ -0,0 +1,149 @@
+---
+description: use whenever you are styling a ui with css
+---
+
+you are very good at writing clean maintainable css using modern techniques
+
+css is structured like this
+
+```css
+[data-page="home"] {
+ [data-component="header"] {
+ [data-slot="logo"] {
+ }
+ }
+}
+```
+
+top level pages are scoped using `data-page`
+
+pages can break down into components using `data-component`
+
+components can break down into slots using `data-slot`
+
+structure things so that this hierarchy is followed IN YOUR CSS - you should rarely need to
+nest components inside other components. you should NEVER nest components inside
+slots. you should NEVER nest slots inside other slots.
+
+**IMPORTANT: This hierarchy rule applies to CSS structure, NOT JSX/DOM structure.**
+
+The hierarchy in css file does NOT have to match the hierarchy in the dom - you
+can put components or slots at the same level in CSS even if one goes inside another in the DOM.
+
+Your JSX can nest however makes semantic sense - components can be inside slots,
+slots can contain components, etc. The DOM structure should be whatever makes the most
+semantic and functional sense.
+
+It is more important to follow the pages -> components -> slots structure IN YOUR CSS,
+while keeping your JSX/DOM structure logical and semantic.
+
+use data attributes to represent different states of the component
+
+```css
+[data-component="modal"] {
+ opacity: 0;
+
+ &[data-state="open"] {
+ opacity: 1;
+ }
+}
+```
+
+this will allow jsx to control the syling
+
+avoid selectors that just target an element type like `> span` you should assign
+it a slot name. it's ok to do this sometimes where it makes sense semantically
+like targeting `li` elements in a list
+
+in terms of file structure `./src/style/` contains all universal styling rules.
+these should not contain anything specific to a page
+
+`./src/style/token` contains all the tokens used in the project
+
+`./src/style/component` is for reusable components like buttons or inputs
+
+page specific styles should go next to the page they are styling so
+`./src/routes/about.tsx` should have its styles in `./src/routes/about.css`
+
+`about.css` should be scoped using `data-page="about"`
+
+## Example of correct implementation
+
+JSX can nest however makes sense semantically:
+
+```jsx
+<div data-slot="left">
+ <div data-component="title">Section Title</div>
+ <div data-slot="content">Content here</div>
+</div>
+```
+
+CSS maintains clean hierarchy regardless of DOM nesting:
+
+```css
+[data-page="home"] {
+ [data-component="screenshots"] {
+ [data-slot="left"] {
+ /* styles */
+ }
+ [data-slot="content"] {
+ /* styles */
+ }
+ }
+
+ [data-component="title"] {
+ /* can be at same level even though nested in DOM */
+ }
+}
+```
+
+## Reusable Components
+
+If a component is reused across multiple sections of the same page, define it at the page level:
+
+```jsx
+<!-- Used in multiple places on the same page -->
+<section data-component="install">
+ <div data-component="method">
+ <h3 data-component="title">npm</h3>
+ </div>
+ <div data-component="method">
+ <h3 data-component="title">bun</h3>
+ </div>
+</section>
+
+<section data-component="screenshots">
+ <div data-slot="left">
+ <div data-component="title">Screenshot Title</div>
+ </div>
+</section>
+```
+
+```css
+[data-page="home"] {
+ /* Reusable title component defined at page level since it's used in multiple components */
+ [data-component="title"] {
+ text-transform: uppercase;
+ font-weight: 400;
+ }
+
+ [data-component="install"] {
+ /* install-specific styles */
+ }
+
+ [data-component="screenshots"] {
+ /* screenshots-specific styles */
+ }
+}
+```
+
+This is correct because the `title` component has consistent styling and behavior across the page.
+
+## Key Clarifications
+
+1. **JSX Nesting is Flexible**: Components can be nested inside slots, slots can contain components - whatever makes semantic sense
+2. **CSS Hierarchy is Strict**: Follow pages → components → slots structure in CSS
+3. **Reusable Components**: Define at the appropriate level where they're shared (page level if used across the page, component level if only used within that component)
+4. **DOM vs CSS Structure**: These don't need to match - optimize each for its purpose
+
+See ./src/routes/index.css and ./src/routes/index.tsx for a complete example.