UNPKG

@pm7/core

Version:

The First UI Library Built for AI Coding Agents - Core CSS and JavaScript

2,085 lines (1,677 loc) 123 kB
/* PM7 UI Core Styles */ /* Import design tokens */ /* PM7 Color Design Tokens */ :root { /* Primary colors */ --pm7-primary: #1C86EF; --pm7-primary-hover: #1976D2; --pm7-primary-active: #1565C0; --pm7-primary-foreground: #ffffff; /* Neutral colors */ --pm7-background: #ffffff; --pm7-foreground: #000000; --pm7-muted: #f5f5f5; --pm7-muted-foreground: #333333; /* Border colors */ --pm7-border: #e0e0e0; --pm7-border-hover: #c0c0c0; /* Status colors */ --pm7-success: #22c55e; --pm7-success-foreground: #ffffff; --pm7-success-light: #dcfce7; --pm7-success-dark: #166534; --pm7-warning: #f59e0b; --pm7-warning-foreground: #ffffff; --pm7-warning-light: #fef3c7; --pm7-warning-dark: #92400e; --pm7-error: #ef4444; --pm7-error-foreground: #ffffff; --pm7-info: #3b82f6; --pm7-info-foreground: #ffffff; --pm7-info-light: #dbeafe; --pm7-info-dark: #1e40af; /* Destructive alias */ --pm7-destructive: var(--pm7-error); --pm7-destructive-foreground: var(--pm7-error-foreground); /* Surface colors */ --pm7-surface: #ffffff; --pm7-surface-hover: #f9f9f9; --pm7-surface-active: #f0f0f0; /* Text colors */ --pm7-text-primary: var(--pm7-foreground); --pm7-text-secondary: var(--pm7-muted-foreground); --pm7-text-disabled: #999999; /* Component specific */ --pm7-menu-bg: var(--pm7-surface); --pm7-menu-hover: var(--pm7-primary); --pm7-menu-hover-text: var(--pm7-primary-foreground); --pm7-card-footer-bg: #f7fafc; --pm7-tooltip-bg: #1a1a1a; --pm7-tooltip-color: #ffffff; /* Focus ring */ --pm7-ring: var(--pm7-primary); --pm7-ring-offset: #ffffff; /* Input */ --pm7-input: #ffffff; /* Documentation site */ --pm7-sidebar-bg: #F3F4F6; --pm7-sidebar-item-hover: #ffffff; --pm7-footer-bg: #f5f5f5; --pm7-footer-text: var(--pm7-text-secondary); --pm7-header-bg: var(--pm7-surface); /* PM7 specific brand colors */ --pm7-primary-light: #e6f2ff; /* Theme Switch colors */ --pm7-theme-switch-bg: var(--pm7-background); --pm7-theme-switch-thumb-bg-light: #FFD43B; --pm7-theme-switch-thumb-bg-dark: #6E6E6E; --pm7-theme-switch-icon-light: var(--pm7-foreground); --pm7-theme-switch-icon-dark: var(--pm7-background); --pm7-theme-switch-sun-color: #FFB800; --pm7-theme-switch-moon-color: #4A5568; } /* Dark mode - System preference */ @media (prefers-color-scheme: dark) { :root { /* Main colors from old site */ --pm7-background: #121212; --pm7-foreground: #e0e0e0; --pm7-text-primary: #e0e0e0; --pm7-text-secondary: #999999; /* Primary color adjusted for dark mode */ --pm7-primary: #3b9eff; --pm7-primary-hover: #2a8fe5; --pm7-primary-active: #1976D2; --pm7-primary-foreground: #ffffff; /* Neutral colors */ --pm7-muted: #2d2d2d; --pm7-muted-foreground: #e6e6e6; /* Border colors */ --pm7-border: #444; --pm7-border-hover: #666666; /* Surface colors */ --pm7-surface: #1e1e1e; --pm7-surface-hover: #2a2a2a; --pm7-surface-active: #333; /* Component specific */ --pm7-menu-bg: #1e1e1e; --pm7-ring-offset: #121212; --pm7-input: #1e1e1e; /* Card specific */ --pm7-card-footer-bg: #1a1a1a; /* Additional dark mode colors from old site */ --pm7-sidebar-bg: #1E1E1E; --pm7-sidebar-item-hover: var(--pm7-surface-hover); --pm7-sidebar-item-hover-dark: var(--pm7-surface-hover); --pm7-sidebar-active: #2a2a2a; --pm7-header-bg: var(--pm7-surface); --pm7-header-dark-bg: #0a4b87; --pm7-footer-bg: #1a1a1a; --pm7-footer-text: #e0e0e0; --pm7-tab-active-bg: #333; --pm7-tab-active-border: #3b9eff; --pm7-code-bg: #2d2d2d; /* Tooltip stays same in dark mode - already dark */ --pm7-tooltip-bg: #1a1a1a; --pm7-tooltip-color: #ffffff; /* Status colors adjusted for dark mode */ --pm7-success-light: #052e16; --pm7-success-dark: #22c55e; --pm7-warning-light: #451a03; --pm7-warning-dark: #f59e0b; --pm7-info-light: #1e3a8a; --pm7-info-dark: #3b82f6; /* Component focus shadows for dark mode */ --pm7-focus-shadow: 0 0 0 3px rgba(59, 158, 255, 0.2); --pm7-error-focus-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2); --pm7-success-focus-shadow: 0 0 0 3px rgba(34, 197, 94, 0.2); /* Menu hover shadow for dark mode */ --pm7-menu-hover-shadow: rgba(255, 255, 255, 0.05) 0px 5px 15px 0px, rgba(255, 255, 255, 0.1) 0px 15px 35px -5px; /* Scrollbar colors for dark mode */ --pm7-scrollbar-thumb: rgba(255, 255, 255, 0.2); --pm7-scrollbar-thumb-hover: rgba(255, 255, 255, 0.3); /* Theme Switch colors for dark mode */ --pm7-theme-switch-bg: var(--pm7-background); --pm7-theme-switch-thumb-bg-light: #FFD43B; --pm7-theme-switch-thumb-bg-dark: #6E6E6E; --pm7-theme-switch-icon-light: var(--pm7-foreground); --pm7-theme-switch-icon-dark: var(--pm7-background); --pm7-theme-switch-sun-color: #FFB800; --pm7-theme-switch-moon-color: #93C5FD; } } /* Dark mode class override - Using colors from old site */ .dark { /* Main colors from old site */ --pm7-background: #121212; --pm7-foreground: #e0e0e0; --pm7-text-primary: #e0e0e0; --pm7-text-secondary: #999999; /* Primary color adjusted for dark mode */ --pm7-primary: #3b9eff; --pm7-primary-hover: #2a8fe5; --pm7-primary-active: #1976D2; --pm7-primary-foreground: #ffffff; /* Neutral colors */ --pm7-muted: #2d2d2d; --pm7-muted-foreground: #e6e6e6; /* Border colors */ --pm7-border: #444; --pm7-border-hover: #666666; /* Surface colors */ --pm7-surface: #1e1e1e; --pm7-surface-hover: #2a2a2a; --pm7-surface-active: #333; /* Component specific */ --pm7-menu-bg: #1e1e1e; --pm7-ring-offset: #121212; --pm7-input: #1e1e1e; /* Card specific */ --pm7-card-footer-bg: #1a1a1a; /* Additional dark mode colors from old site */ --pm7-sidebar-bg: #1E1E1E; --pm7-sidebar-item-hover: var(--pm7-surface-hover); --pm7-sidebar-item-hover-dark: var(--pm7-surface-hover); --pm7-sidebar-active: #2a2a2a; --pm7-header-bg: var(--pm7-surface); --pm7-header-dark-bg: #0a4b87; --pm7-footer-bg: #1a1a1a; --pm7-footer-text: #e0e0e0; --pm7-tab-active-bg: #333; --pm7-tab-active-border: #3b9eff; --pm7-code-bg: #2d2d2d; /* Tooltip stays same in dark mode - already dark */ --pm7-tooltip-bg: #1a1a1a; --pm7-tooltip-color: #ffffff; /* Status colors adjusted for dark mode */ --pm7-success-light: #052e16; --pm7-success-dark: #22c55e; --pm7-warning-light: #451a03; --pm7-warning-dark: #f59e0b; --pm7-info-light: #1e3a8a; --pm7-info-dark: #3b82f6; /* Component focus shadows */ --pm7-focus-shadow: 0 0 0 3px rgba(28, 134, 239, 0.1); --pm7-error-focus-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); --pm7-success-focus-shadow: 0 0 0 3px rgba(34, 197, 94, 0.1); /* Menu hover shadow */ --pm7-menu-hover-shadow: rgba(0, 0, 0, 0.08) 0px 5px 15px 0px, rgba(25, 28, 33, 0.2) 0px 15px 35px -5px; /* Scrollbar colors */ --pm7-scrollbar-thumb: rgba(0, 0, 0, 0.2); --pm7-scrollbar-thumb-hover: rgba(0, 0, 0, 0.3); /* Theme Switch colors for dark mode */ --pm7-theme-switch-bg: var(--pm7-background); --pm7-theme-switch-thumb-bg-light: #FFD43B; --pm7-theme-switch-thumb-bg-dark: #6E6E6E; --pm7-theme-switch-icon-light: var(--pm7-foreground); --pm7-theme-switch-icon-dark: var(--pm7-background); --pm7-theme-switch-sun-color: #FFB800; --pm7-theme-switch-moon-color: #93C5FD; } /* PM7 Spacing Design Tokens */ :root { /* Base spacing unit (4px) */ --pm7-spacing-unit: 0.25rem; /* Spacing scale */ --pm7-spacing-0: 0; --pm7-spacing-1: calc(var(--pm7-spacing-unit) * 1); /* 4px */ --pm7-spacing-2: calc(var(--pm7-spacing-unit) * 2); /* 8px */ --pm7-spacing-3: calc(var(--pm7-spacing-unit) * 3); /* 12px */ --pm7-spacing-4: calc(var(--pm7-spacing-unit) * 4); /* 16px */ --pm7-spacing-5: calc(var(--pm7-spacing-unit) * 5); /* 20px */ --pm7-spacing-6: calc(var(--pm7-spacing-unit) * 6); /* 24px */ --pm7-spacing-8: calc(var(--pm7-spacing-unit) * 8); /* 32px */ --pm7-spacing-10: calc(var(--pm7-spacing-unit) * 10); /* 40px */ --pm7-spacing-12: calc(var(--pm7-spacing-unit) * 12); /* 48px */ --pm7-spacing-16: calc(var(--pm7-spacing-unit) * 16); /* 64px */ --pm7-spacing-20: calc(var(--pm7-spacing-unit) * 20); /* 80px */ --pm7-spacing-24: calc(var(--pm7-spacing-unit) * 24); /* 96px */ /* Component specific spacing */ --pm7-button-padding-x: var(--pm7-spacing-4); --pm7-button-padding-y: var(--pm7-spacing-2); --pm7-button-padding-x-sm: var(--pm7-spacing-3); --pm7-button-padding-y-sm: var(--pm7-spacing-1); --pm7-button-padding-x-lg: var(--pm7-spacing-6); --pm7-button-padding-y-lg: var(--pm7-spacing-3); --pm7-menu-padding-x: var(--pm7-spacing-4); --pm7-menu-padding-y: var(--pm7-spacing-2); --pm7-menu-item-gap: var(--pm7-spacing-2); --pm7-card-padding: var(--pm7-spacing-6); --pm7-card-padding-sm: var(--pm7-spacing-4); --pm7-card-padding-lg: var(--pm7-spacing-8); --pm7-input-padding-x: var(--pm7-spacing-3); --pm7-input-padding-y: var(--pm7-spacing-2); /* Layout spacing */ --pm7-container-padding: var(--pm7-spacing-4); --pm7-section-gap: var(--pm7-spacing-8); --pm7-element-gap: var(--pm7-spacing-4); } /* PM7 Typography Design Tokens */ :root { /* Font families */ --pm7-font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; --pm7-font-serif: Georgia, serif; --pm7-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; /* Font sizes */ --pm7-text-xs: 0.75rem; /* 12px */ --pm7-text-sm: 0.875rem; /* 14px */ --pm7-text-base: 1rem; /* 16px */ --pm7-text-lg: 1.125rem; /* 18px */ --pm7-text-xl: 1.25rem; /* 20px */ --pm7-text-2xl: 1.5rem; /* 24px */ --pm7-text-3xl: 1.875rem; /* 30px */ --pm7-text-4xl: 2.25rem; /* 36px */ --pm7-text-5xl: 3rem; /* 48px */ /* Line heights */ --pm7-leading-none: 1; --pm7-leading-tight: 1.25; --pm7-leading-snug: 1.375; --pm7-leading-normal: 1.5; --pm7-leading-relaxed: 1.625; --pm7-leading-loose: 2; /* Font weights */ --pm7-font-thin: 100; --pm7-font-light: 300; --pm7-font-normal: 400; --pm7-font-medium: 500; --pm7-font-semibold: 600; --pm7-font-bold: 700; --pm7-font-extrabold: 800; --pm7-font-black: 900; /* Letter spacing */ --pm7-tracking-tighter: -0.05em; --pm7-tracking-tight: -0.025em; --pm7-tracking-normal: 0; --pm7-tracking-wide: 0.025em; --pm7-tracking-wider: 0.05em; --pm7-tracking-widest: 0.1em; /* Font size aliases for components */ --pm7-font-size-xs: var(--pm7-text-xs); --pm7-font-size-sm: var(--pm7-text-sm); --pm7-font-size-base: var(--pm7-text-base); --pm7-font-size-lg: var(--pm7-text-lg); --pm7-font-size-xl: var(--pm7-text-xl); /* Line height aliases for components */ --pm7-line-height-xs: var(--pm7-leading-tight); --pm7-line-height-sm: var(--pm7-leading-snug); --pm7-line-height-base: var(--pm7-leading-normal); --pm7-line-height-lg: var(--pm7-leading-relaxed); --pm7-line-height-xl: var(--pm7-leading-loose); /* Component specific typography */ --pm7-button-font-size: var(--pm7-text-sm); --pm7-button-font-weight: var(--pm7-font-medium); --pm7-button-line-height: var(--pm7-leading-normal); --pm7-menu-font-size: var(--pm7-text-sm); --pm7-menu-font-weight: var(--pm7-font-normal); --pm7-menu-line-height: var(--pm7-leading-normal); --pm7-input-font-size: var(--pm7-text-base); --pm7-input-font-weight: var(--pm7-font-normal); --pm7-input-line-height: var(--pm7-leading-normal); --pm7-heading-font-weight: var(--pm7-font-bold); --pm7-heading-line-height: var(--pm7-leading-tight); } /* PM7 Shadow Design Tokens */ :root { /* Shadow values */ --pm7-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --pm7-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --pm7-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --pm7-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --pm7-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --pm7-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25); --pm7-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05); --pm7-shadow-none: 0 0 #0000; /* Component specific shadows */ --pm7-button-shadow: var(--pm7-shadow-sm); --pm7-button-shadow-hover: var(--pm7-shadow); --pm7-button-shadow-active: var(--pm7-shadow-none); --pm7-card-shadow: var(--pm7-shadow); --pm7-card-shadow-hover: var(--pm7-shadow-md); --pm7-menu-shadow: var(--pm7-shadow-lg); --pm7-menu-hover-shadow: rgba(0, 0, 0, 0.08) 0px 5px 15px 0px, rgba(25, 28, 33, 0.2) 0px 15px 35px -5px; --pm7-dialog-shadow: var(--pm7-shadow-xl); --pm7-toast-shadow: var(--pm7-shadow-lg); /* Focus shadow */ --pm7-focus-shadow: 0 0 0 3px rgb(28 134 239 / 0.2); } /* Dark mode adjustments */ @media (prefers-color-scheme: dark) { :root { --pm7-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.1); --pm7-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2), 0 1px 2px -1px rgb(0 0 0 / 0.2); --pm7-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.2), 0 2px 4px -2px rgb(0 0 0 / 0.2); --pm7-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.3), 0 4px 6px -4px rgb(0 0 0 / 0.2); --pm7-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.3), 0 8px 10px -6px rgb(0 0 0 / 0.2); --pm7-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5); } } .dark { --pm7-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.1); --pm7-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2), 0 1px 2px -1px rgb(0 0 0 / 0.2); --pm7-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.2), 0 2px 4px -2px rgb(0 0 0 / 0.2); --pm7-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.3), 0 4px 6px -4px rgb(0 0 0 / 0.2); --pm7-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.3), 0 8px 10px -6px rgb(0 0 0 / 0.2); --pm7-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5); --pm7-menu-hover-shadow: rgba(255, 255, 255, 0.05) 0px 5px 15px 0px, rgba(255, 255, 255, 0.1) 0px 15px 35px -5px; } /* PM7 Border Design Tokens */ :root { /* Border radius */ --pm7-radius-none: 0; --pm7-radius-sm: 0.125rem; /* 2px */ --pm7-radius: 0.375rem; /* 6px */ --pm7-radius-md: 0.5rem; /* 8px */ --pm7-radius-lg: 0.75rem; /* 12px */ --pm7-radius-xl: 1rem; /* 16px */ --pm7-radius-2xl: 1.5rem; /* 24px */ --pm7-radius-full: 9999px; /* Border width */ --pm7-border-width-0: 0; --pm7-border-width: 1px; --pm7-border-width-2: 2px; --pm7-border-width-4: 4px; --pm7-border-width-8: 8px; /* Component specific borders */ --pm7-button-radius: var(--pm7-radius); --pm7-button-border-width: 1px; --pm7-menu-radius: var(--pm7-radius); --pm7-menu-border-width: 1px; --pm7-card-radius: var(--pm7-radius-md); --pm7-card-border-width: 1px; --pm7-input-radius: var(--pm7-radius); --pm7-input-border-width: 1px; --pm7-dialog-radius: var(--pm7-radius-lg); --pm7-toast-radius: var(--pm7-radius); } /* Import base styles */ /* PM7 CSS Reset - Minimal reset for consistent cross-browser styling */ /* Box sizing */ *, *::before, *::after { box-sizing: border-box; } /* Remove default margin */ body, h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd { margin: 0; } /* Remove list styles on ul, ol elements with a list role */ ul[role='list'], ol[role='list'] { list-style: none; padding: 0; margin: 0; } /* Set core root defaults */ html:focus-within { scroll-behavior: smooth; } /* Set core body defaults */ body { min-height: 100vh; text-rendering: optimizeSpeed; line-height: 1.5; } /* A elements that don't have a class get default styles */ a:not([class]) { -webkit-text-decoration-skip: ink; text-decoration-skip-ink: auto; } /* Make images easier to work with */ img, picture, video, canvas, svg { display: block; max-width: 100%; } /* Inherit fonts for inputs and buttons */ input, button, textarea, select { font: inherit; } /* Remove all animations, transitions and smooth scroll for people that prefer not to see them */ @media (prefers-reduced-motion: reduce) { html:focus-within { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* PM7 Root Styles */ :root { /* Apply font family */ font-family: var(--pm7-font-sans); font-size: 16px; line-height: var(--pm7-leading-normal); font-weight: var(--pm7-font-normal); /* Text rendering */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; /* Colors */ background-color: var(--pm7-background); color: var(--pm7-foreground); } /* Selection colors */ ::-moz-selection { background-color: var(--pm7-primary); color: var(--pm7-primary-foreground); } ::selection { background-color: var(--pm7-primary); color: var(--pm7-primary-foreground); } /* Focus visible */ :focus-visible { outline: 2px solid var(--pm7-ring); outline-offset: 2px; } /* Remove focus for mouse users */ :focus:not(:focus-visible) { outline: none; } /* Scrollbar styling */ ::-webkit-scrollbar { width: 12px; height: 12px; } ::-webkit-scrollbar-track { background: var(--pm7-muted); } ::-webkit-scrollbar-thumb { background: var(--pm7-border); border-radius: var(--pm7-radius); border: 3px solid var(--pm7-muted); } ::-webkit-scrollbar-thumb:hover { background: var(--pm7-border-hover); } /* Firefox scrollbar */ * { scrollbar-width: thin; scrollbar-color: var(--pm7-border) var(--pm7-muted); } /* Import component styles */ /* PM7 Button Component */ .pm7-button { /* Base styles */ display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; border-radius: var(--pm7-button-radius); font-size: var(--pm7-button-font-size); font-weight: var(--pm7-button-font-weight); line-height: var(--pm7-button-line-height); padding: var(--pm7-button-padding-y) var(--pm7-button-padding-x); transition-property: color, background-color, border-color, box-shadow, transform; transition-duration: 200ms; transition-timing-function: ease; -webkit-user-select: none; -moz-user-select: none; user-select: none; cursor: pointer; border: var(--pm7-button-border-width) solid transparent; text-decoration: none; position: relative; overflow: hidden; /* Focus */ --pm7-button-focus-shadow: 0 0 0 3px rgb(28 134 239 / 0.2); } /* Remove button defaults */ .pm7-button { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; background-image: none; } /* Focus styles */ .pm7-button:focus-visible { outline: 2px solid transparent; outline-offset: 2px; box-shadow: var(--pm7-button-focus-shadow); } /* Dark mode focus shadow */ .dark .pm7-button { --pm7-button-focus-shadow: 0 0 0 3px rgb(59 158 255 / 0.3); } /* Ensure anchor tags with button classes override link styles */ a.pm7-button, a.pm7-button:link, a.pm7-button:visited, a.pm7-button:hover, a.pm7-button:active, a.pm7-button:focus { text-decoration: none !important; color: inherit !important; } /* Disabled state */ .pm7-button:disabled, .pm7-button[disabled], .pm7-button[aria-disabled="true"] { pointer-events: none; opacity: 0.5; cursor: not-allowed; background-color: var(--pm7-muted) !important; color: var(--pm7-muted-foreground) !important; border-color: var(--pm7-muted) !important; } /* Dark mode disabled state - handled by CSS variables */ /* Active state */ .pm7-button:active:not(:disabled) { transform: translateY(1px); } /* Button variants */ /* Primary (default) */ .pm7-button--primary, .pm7-button--default { background-color: var(--pm7-primary); color: var(--pm7-primary-foreground); box-shadow: var(--pm7-button-shadow); } /* Ensure primary buttons maintain white text when used as links */ a.pm7-button--primary, a.pm7-button--primary:link, a.pm7-button--primary:visited, a.pm7-button--primary:hover, a.pm7-button--primary:active, a.pm7-button--primary:focus { color: var(--pm7-primary-foreground) !important; } .pm7-button--primary:hover:not(:disabled), .pm7-button--default:hover:not(:disabled) { background-color: var(--pm7-primary-hover); box-shadow: var(--pm7-button-shadow-hover); } .pm7-button--primary:active:not(:disabled), .pm7-button--default:active:not(:disabled) { background-color: var(--pm7-primary-active); box-shadow: var(--pm7-button-shadow-active); } /* Secondary */ .pm7-button--secondary { background-color: var(--pm7-muted); color: var(--pm7-foreground); } .pm7-button--secondary:hover:not(:disabled) { background-color: var(--pm7-muted-foreground); color: var(--pm7-background); } /* Outline */ .pm7-button--outline { border-color: var(--pm7-border); background-color: transparent; color: var(--pm7-foreground); } .pm7-button--outline:hover:not(:disabled) { background-color: var(--pm7-muted); border-color: var(--pm7-border-hover); } /* Ghost */ .pm7-button--ghost { background-color: transparent; color: var(--pm7-foreground); } .pm7-button--ghost:hover:not(:disabled) { background-color: var(--pm7-muted); color: var(--pm7-foreground); } /* On Dark Background Modifier - for buttons on dark backgrounds in light mode */ .pm7-button--on-dark.pm7-button--outline { color: white; border-color: rgba(255, 255, 255, 0.3); } .pm7-button--on-dark.pm7-button--outline:hover:not(:disabled) { background-color: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.5); color: white; } .pm7-button--on-dark.pm7-button--ghost { color: white; } .pm7-button--on-dark.pm7-button--ghost:hover:not(:disabled) { background-color: rgba(255, 255, 255, 0.1); color: white; } /* Destructive */ .pm7-button--destructive { background-color: var(--pm7-error); color: var(--pm7-error-foreground); } .pm7-button--destructive:hover:not(:disabled) { background-color: var(--pm7-error); opacity: 0.9; } /* Link */ .pm7-button--link { background-color: transparent; color: var(--pm7-primary); text-decoration: underline; text-underline-offset: 4px; padding: 0; height: auto; } .pm7-button--link:hover:not(:disabled) { text-decoration: none; } /* Button sizes */ /* Small */ .pm7-button--sm { height: 36px; padding: var(--pm7-button-padding-y-sm) var(--pm7-button-padding-x-sm); font-size: var(--pm7-text-sm); } /* Medium (default) */ .pm7-button--md { height: 40px; } /* Large */ .pm7-button--lg { height: 48px; padding: var(--pm7-button-padding-y-lg) var(--pm7-button-padding-x-lg); font-size: var(--pm7-text-base); } /* Icon button */ .pm7-button--icon { padding: 0; width: 40px; height: 40px; } .pm7-button--icon.pm7-button--sm { width: 36px; height: 36px; } .pm7-button--icon.pm7-button--lg { width: 48px; height: 48px; } /* Button with icon */ .pm7-button > svg { width: 1em; height: 1em; flex-shrink: 0; } .pm7-button > svg:first-child:not(:last-child) { margin-right: var(--pm7-spacing-2); } .pm7-button > svg:last-child:not(:first-child) { margin-left: var(--pm7-spacing-2); } /* Full width */ .pm7-button--full { width: 100%; } /* Button group */ .pm7-button-group { display: inline-flex; isolation: isolate; } .pm7-button-group > .pm7-button { border-radius: 0; margin-right: -1px; position: relative; } .pm7-button-group > .pm7-button:first-child { border-top-left-radius: var(--pm7-button-radius); border-bottom-left-radius: var(--pm7-button-radius); } .pm7-button-group > .pm7-button:last-child { border-top-right-radius: var(--pm7-button-radius); border-bottom-right-radius: var(--pm7-button-radius); margin-right: 0; } .pm7-button-group > .pm7-button:hover, .pm7-button-group > .pm7-button:focus { z-index: 1; } /* 6stars effect */ .pm7-button__6stars { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; pointer-events: none; opacity: 0; /* Faster transition for better responsiveness */ transition: opacity 0.15s ease; } .pm7-button--primary:hover .pm7-button__6stars, .pm7-button--default:hover .pm7-button__6stars { opacity: 1; } .pm7-button__6stars .star { position: absolute; width: 4px; height: 4px; background: var(--pm7-primary-foreground); border-radius: 50%; animation: pm7-star-float 3s linear infinite; opacity: 0; } .pm7-button__6stars .star:nth-child(1) { top: 20%; left: 10%; animation-delay: 0s; } .pm7-button__6stars .star:nth-child(2) { top: 80%; left: 80%; animation-delay: 0.5s; } .pm7-button__6stars .star:nth-child(3) { top: 10%; left: 50%; animation-delay: 1s; } .pm7-button__6stars .star:nth-child(4) { top: 50%; left: 20%; animation-delay: 1.5s; } .pm7-button__6stars .star:nth-child(5) { top: 60%; left: 70%; animation-delay: 2s; } .pm7-button__6stars .star:nth-child(6) { top: 30%; left: 90%; animation-delay: 2.5s; } @keyframes pm7-star-float { 0% { transform: translateY(0) scale(0); opacity: 0; } 10% { opacity: 1; transform: translateY(-10px) scale(1); } 90% { opacity: 1; transform: translateY(-80px) scale(1); } 100% { transform: translateY(-100px) scale(0); opacity: 0; } } /* Slider Button */ .pm7-button--slider { position: relative; padding: 0; width: 280px; height: 56px; background: var(--pm7-muted); border: 2px solid var(--pm7-border); overflow: hidden; cursor: default; -webkit-user-select: none; -moz-user-select: none; user-select: none; transition: background-color 0.3s ease, border-color 0.3s ease; } .pm7-button--slider:hover { background: var(--pm7-muted); } .pm7-button--slider:active { transform: none; } .pm7-button--slider.pm7-button--sm { width: 220px; height: 44px; } .pm7-button--slider.pm7-button--lg { width: 340px; height: 64px; } /* Slider track */ .pm7-button--slider::before { content: ''; position: absolute; top: 50%; left: 4px; right: 4px; height: calc(100% - 8px); background: transparent; border-radius: calc(var(--pm7-button-radius) - 2px); transform: translateY(-50%); pointer-events: none; } /* Slider text */ .pm7-button--slider-text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: var(--pm7-muted-foreground); font-size: var(--pm7-button-font-size); font-weight: var(--pm7-button-font-weight); white-space: nowrap; pointer-events: none; transition: opacity 0.3s ease; z-index: 1; } /* Slider handle */ .pm7-button--slider-handle { position: absolute; top: 4px; left: 4px; width: 48px; height: calc(100% - 8px); background: var(--pm7-primary); border-radius: calc(var(--pm7-button-radius) - 2px); display: flex; align-items: center; justify-content: center; cursor: grab; transition: transform 0.1s ease, background-color 0.2s ease, width 0.2s ease; z-index: 2; } .pm7-button--slider.pm7-button--sm .pm7-button--slider-handle { width: 36px; } .pm7-button--slider.pm7-button--lg .pm7-button--slider-handle { width: 56px; } .pm7-button--slider-handle:active { cursor: grabbing; } .pm7-button--slider-handle::after { content: ''; display: block; width: 16px; height: 16px; background: var(--pm7-primary-foreground); -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; } /* Slider states */ .pm7-button--slider[data-pm7-slider-dragging="true"] .pm7-button--slider-handle { transition: none; } .pm7-button--slider[data-pm7-slider-complete="true"] { background: var(--pm7-success-light); border-color: var(--pm7-success); } .pm7-button--slider[data-pm7-slider-complete="true"] .pm7-button--slider-text { opacity: 0; } .pm7-button--slider[data-pm7-slider-complete="true"] .pm7-button--slider-handle { background: var(--pm7-success); } /* Success check animation */ .pm7-button--slider-handle::before { content: ''; position: absolute; width: 20px; height: 20px; background: var(--pm7-primary-foreground); -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; opacity: 0; transform: scale(0.5); transition: opacity 0.3s ease, transform 0.3s ease; } .pm7-button--slider[data-pm7-slider-complete="true"] .pm7-button--slider-handle::before { opacity: 1; transform: scale(1); } .pm7-button--slider[data-pm7-slider-complete="true"] .pm7-button--slider-handle::after { opacity: 0; } /* Disabled state */ .pm7-button--slider:disabled, .pm7-button--slider[disabled], .pm7-button--slider[aria-disabled="true"] { cursor: not-allowed; } .pm7-button--slider:disabled .pm7-button--slider-handle, .pm7-button--slider[disabled] .pm7-button--slider-handle, .pm7-button--slider[aria-disabled="true"] .pm7-button--slider-handle { cursor: not-allowed; background: var(--pm7-muted-foreground); } /* Dark mode adjustments */ .dark .pm7-button--slider[data-pm7-slider-complete="true"] { background: rgba(34, 197, 94, 0.2); } /* PM7 Menu Component */ /* Menu bar container for application-style menus */ .pm7-menu-bar { display: flex; align-items: center; gap: 0; /* No gap between menu items for seamless hover */ background: var(--pm7-surface); border: 1px solid var(--pm7-border); border-radius: var(--pm7-radius); padding: 2px; } /* Borderless variant for traditional toolbar appearance */ .pm7-menu-bar--borderless { border: none; background: transparent; padding: 0; border-radius: 0; } /* Menu items in a menu bar */ .pm7-menu-bar .pm7-menu-trigger { border-radius: 4px; border: none; height: 100%; margin: 2px; padding: 4px 10px; } /* Hover state for ALL menu bar triggers - higher specificity to override button styles */ .pm7-menu-bar .pm7-menu-trigger.pm7-button:hover, .pm7-menu-bar .pm7-menu-trigger.pm7-button--ghost:hover { background-color: var(--pm7-menu-hover) !important; color: var(--pm7-menu-hover-text) !important; box-shadow: var(--pm7-menu-hover-shadow) !important; position: relative; z-index: 1; } /* Active state (open menu) - comes AFTER hover to override it */ .pm7-menu-bar .pm7-menu-trigger.pm7-button[aria-expanded="true"] { background-color: var(--pm7-muted); color: var(--pm7-foreground); border-radius: 4px; box-shadow: none; } /* Base menu container */ .pm7-menu { position: relative; display: inline-block; } /* Menu trigger button */ .pm7-menu-trigger { display: inline-flex; align-items: center; justify-content: center; cursor: pointer; padding: var(--pm7-spacing-2); background: transparent; border-radius: var(--pm7-radius); color: var(--pm7-foreground); } /* Only remove border when not using button classes that have borders */ .pm7-menu-trigger:not(.pm7-button--outline):not(.pm7-button--secondary) { border: none; } /* Override button transition for instant menu feedback */ .pm7-menu-trigger.pm7-button { transition: none !important; } .pm7-menu-trigger.pm7-button:hover { background-color: var(--pm7-menu-hover); color: var(--pm7-menu-hover-text); box-shadow: var(--pm7-menu-hover-shadow); position: relative; z-index: 1; } .pm7-menu-trigger:focus-visible { outline: 2px solid var(--pm7-ring); outline-offset: 2px; } /* Menu content dropdown */ .pm7-menu-content { position: absolute; top: 100%; left: 0; z-index: 50; min-width: 12rem; max-width: 18.8rem; margin-top: 4px; padding: 0.5rem; background-color: var(--pm7-menu-bg); border: 1px solid var(--pm7-border); border-radius: var(--pm7-menu-radius); box-shadow: var(--pm7-menu-shadow); /* Hard display none/block */ display: none; } /* Menu open state */ .pm7-menu-content--open, .pm7-menu-content[data-state="open"] { display: block; } /* Menu alignment */ /* These classes are dynamically added by JavaScript based on data-position */ .pm7-menu[data-position="bottom-end"] .pm7-menu-content { left: auto; right: 0; } .pm7-menu[data-position="bottom-start"] .pm7-menu-content { left: 0; right: auto; } .pm7-menu[data-position="top-start"] .pm7-menu-content { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 4px; left: 0; right: auto; } .pm7-menu[data-position="top-end"] .pm7-menu-content { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 4px; left: auto; right: 0; } .pm7-menu[data-position="left-start"] .pm7-menu-content { left: auto; right: 100%; top: 0; margin-right: 4px; } .pm7-menu[data-position="left-end"] .pm7-menu-content { left: auto; right: 100%; bottom: 0; margin-right: 4px; } .pm7-menu[data-position="right-start"] .pm7-menu-content { left: 100%; right: auto; top: 0; margin-left: 4px; } .pm7-menu[data-position="right-end"] .pm7-menu-content { left: 100%; right: auto; bottom: 0; margin-left: 4px; } .pm7-menu[data-position="center"] .pm7-menu-content { left: 50%; transform: translateX(-50%); right: auto; } /* Start alignment (explicit left) */ .pm7-menu-content--start { left: 0; right: auto; } /* Menu items */ .pm7-menu-item { display: flex; align-items: center; gap: var(--pm7-menu-item-gap); padding: var(--pm7-menu-padding-y) var(--pm7-menu-padding-x); margin: 2px 0; border-radius: calc(var(--pm7-menu-radius) - 2px); font-size: var(--pm7-menu-font-size); font-weight: var(--pm7-menu-font-weight); line-height: var(--pm7-menu-line-height); color: var(--pm7-foreground); cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; text-decoration: none; background: transparent; border: none; width: 100%; text-align: left; } .pm7-menu-item:not(.pm7-menu-item--clicking):hover { background-color: var(--pm7-menu-hover); color: var(--pm7-menu-hover-text); /* Original PM7 shadow effect */ box-shadow: var(--pm7-menu-hover-shadow); position: relative; z-index: 1; } /* Remove all effects when clicking */ .pm7-menu-item--clicking { background-color: transparent !important; color: var(--pm7-foreground) !important; box-shadow: none !important; } /* Active/selected state */ .pm7-menu-item[data-active="true"] { background-color: var(--pm7-primary); color: var(--pm7-primary-foreground); } .pm7-menu-item:focus-visible { outline: 2px solid var(--pm7-ring); outline-offset: -2px; } /* Disabled menu items */ .pm7-menu-item:disabled, .pm7-menu-item[disabled], .pm7-menu-item[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; pointer-events: none; } /* Destructive menu items - ensure proper contrast on hover */ .pm7-menu-item--destructive:not(.pm7-menu-item--clicking):hover { color: var(--pm7-destructive-foreground) !important; /* Use proper contrast color */ } /* Menu item icons */ .pm7-menu-item-icon { width: 1rem; height: 1rem; flex-shrink: 0; } .pm7-menu-item-icon svg { width: 100%; height: 100%; } /* Menu separator */ .pm7-menu-separator { height: 1px; background-color: var(--pm7-border); margin: 8px 0; border: none; display: block; width: 100%; } /* Keyboard shortcut hint */ .pm7-menu-shortcut { margin-left: auto; padding-left: 2rem; color: var(--pm7-muted-foreground); font-size: 0.75rem; opacity: 0.7; } /* Ensure shortcut inherits hover color */ .pm7-menu-item:hover .pm7-menu-shortcut { color: inherit; opacity: 0.9; } /* Dark mode styles */ .dark .pm7-menu-item:not(.pm7-menu-item--clicking):hover { /* Adjusted shadow for dark mode */ box-shadow: var(--pm7-menu-hover-shadow); } /* Menu label - small uppercase labels */ .pm7-menu-label { padding: var(--pm7-menu-padding-y) var(--pm7-menu-padding-x); font-size: var(--pm7-text-xs); font-weight: var(--pm7-font-semibold); color: var(--pm7-muted-foreground); text-transform: uppercase; letter-spacing: var(--pm7-tracking-wider); } /* Menu section title - larger prominent headings */ .pm7-menu-section-title { padding: 12px 16px 8px; font-size: 16px; font-weight: 600; color: var(--pm7-foreground); margin: 0; line-height: 1.2; } /* Performance optimizations */ .pm7-menu-content { /* Use transform for better performance */ will-change: transform, opacity; /* Enable hardware acceleration */ transform: translateZ(0); backface-visibility: hidden; -webkit-font-smoothing: antialiased; } .pm7-menu-item { /* Optimize repaints */ will-change: background-color; /* Prevent text shifting on hover */ -webkit-font-smoothing: subpixel-antialiased; } /* Checkbox menu item */ .pm7-menu-item--checkbox { position: relative; padding-left: calc(var(--pm7-menu-padding-x) + 1.5rem); /* Space for checkmark */ } .pm7-menu-item--checkbox::before { content: ''; position: absolute; left: var(--pm7-menu-padding-x); top: 50%; transform: translateY(-50%); width: 1rem; height: 1rem; border: 1px solid var(--pm7-border); border-radius: 50%; /* Make it round like radio button */ background-color: var(--pm7-background); transition: none; } .pm7-menu-item--checkbox[data-checked="true"]::before { background-color: var(--pm7-primary); border-color: var(--pm7-primary); } .pm7-menu-item--checkbox[data-checked="true"]::after { content: ''; position: absolute; left: calc(var(--pm7-menu-padding-x) + 0.3125rem); top: 50%; width: 0.375rem; height: 0.375rem; background-color: var(--pm7-primary-foreground); border-radius: 50%; transform: translateY(-50%); } /* Checkbox hover state - invert colors for visibility */ .pm7-menu-item--checkbox:hover::before { background-color: var(--pm7-menu-hover-text); border-color: var(--pm7-menu-hover-text); } .pm7-menu-item--checkbox[data-checked="true"]:hover::before { background-color: var(--pm7-menu-hover-text); border-color: var(--pm7-menu-hover-text); } .pm7-menu-item--checkbox[data-checked="true"]:hover::after { background-color: var(--pm7-menu-hover); } /* Radio menu item */ .pm7-menu-item--radio { position: relative; padding-left: calc(var(--pm7-menu-padding-x) + 1.5rem); /* Space for radio dot */ } .pm7-menu-item--radio::before { content: ''; position: absolute; left: var(--pm7-menu-padding-x); top: 50%; transform: translateY(-50%); width: 1rem; height: 1rem; border: 1px solid var(--pm7-border); border-radius: 50%; background-color: var(--pm7-background); transition: none; } .pm7-menu-item--radio[data-checked="true"]::before { background-color: var(--pm7-primary); border-color: var(--pm7-primary); } .pm7-menu-item--radio[data-checked="true"]::after { content: ''; position: absolute; left: calc(var(--pm7-menu-padding-x) + 0.3125rem); top: 50%; width: 0.375rem; height: 0.375rem; background-color: var(--pm7-primary-foreground); border-radius: 50%; transform: translateY(-50%); } /* Radio hover state - invert colors for visibility */ .pm7-menu-item--radio:hover::before { background-color: var(--pm7-menu-hover-text); border-color: var(--pm7-menu-hover-text); } .pm7-menu-item--radio[data-checked="true"]:hover::before { background-color: var(--pm7-menu-hover-text); border-color: var(--pm7-menu-hover-text); } .pm7-menu-item--radio[data-checked="true"]:hover::after { background-color: var(--pm7-menu-hover); } /* Switch menu item */ .pm7-menu-item--switch { display: flex; align-items: center; justify-content: space-between; } .pm7-menu-switch { position: relative; width: 2.5rem; /* 40px */ height: 1.25rem; /* 20px */ background-color: var(--pm7-muted); border-radius: 0.625rem; /* 10px */ transition: background-color 0.2s ease; flex-shrink: 0; } .pm7-menu-switch::before { content: ''; position: absolute; top: 2px; left: 2px; width: 1rem; /* 16px */ height: 1rem; /* 16px */ background-color: var(--pm7-background); border-radius: 50%; transition: transform 0.2s ease; box-shadow: var(--pm7-shadow-sm); } .pm7-menu-item--switch[data-checked="true"] .pm7-menu-switch { background-color: var(--pm7-primary); } .pm7-menu-item--switch[data-checked="true"] .pm7-menu-switch::before { transform: translateX(1.25rem); /* 20px */ } /* Submenu */ .pm7-menu-item--has-submenu { position: relative; } .pm7-menu-item--has-submenu::after { content: '\25B6'; /* Right-pointing triangle */ margin-left: auto; font-size: 0.75rem; opacity: 0.7; transition: transform 0.2s; } .pm7-menu-item--has-submenu[data-submenu-open="true"]::after { transform: rotate(90deg); } /* Submenu container */ .pm7-submenu { position: absolute; top: -8px; left: 100%; min-width: 180px; margin-left: 4px; /* Visual separation */ padding: 0.5rem; background-color: var(--pm7-menu-bg); border: 1px solid var(--pm7-border); border-radius: var(--pm7-menu-radius); box-shadow: var(--pm7-menu-shadow); display: none; z-index: 100; } /* Create invisible bridge to maintain hover state */ .pm7-submenu::before { content: ''; position: absolute; top: 0; right: 100%; width: 8px; /* Bridge width - covers the margin-left gap */ height: 100%; background: transparent; z-index: 1; /* Above submenu background */ } /* Reset positioning for submenus - they should not inherit parent menu positioning */ .pm7-submenu.pm7-menu-content--top { top: -8px !important; bottom: auto !important; margin-bottom: 0 !important; margin-top: 0 !important; } /* Show submenu on hover or when active */ .pm7-menu-item--has-submenu:hover > .pm7-submenu, .pm7-menu-item--has-submenu[data-submenu-open="true"] > .pm7-submenu, .pm7-submenu:hover { display: block; } /* Dark mode submenu */ @media (prefers-color-scheme: dark) { .pm7-submenu { border-color: var(--pm7-border-dark); } } /* Mobile responsive breakpoint */ @media (max-width: 640px) { .pm7-menu-content { position: fixed; left: var(--pm7-spacing-4); right: var(--pm7-spacing-4); max-width: none; } .pm7-submenu { position: relative; top: auto; left: auto; margin-left: 0; margin-top: var(--pm7-spacing-2); } } /* Menu icon */ .pm7-menu-icon { margin-left: var(--pm7-spacing-2); transition: transform 0.2s ease; } .pm7-menu-trigger[aria-expanded="true"] .pm7-menu-icon { transform: rotate(180deg); } /* RTL support */ [dir="rtl"] .pm7-menu-item { text-align: right; } [dir="rtl"] .pm7-menu-item-icon { margin-right: 0; margin-left: var(--pm7-menu-item-gap); } [dir="rtl"] .pm7-menu-item--has-submenu::after { content: '\25C0'; /* Left-pointing triangle */ margin-left: 0; margin-right: auto; } [dir="rtl"] .pm7-submenu { left: auto; right: 100%; margin-left: 0; margin-right: 4px; } /* RTL bridge positioning */ [dir="rtl"] .pm7-submenu::before { right: auto; left: 100%; } /* Flat variant without shadows - at end for highest specificity */ /* Individual flat menu */ .pm7-menu--flat .pm7-menu-content { box-shadow: none !important; border: 1px solid var(--pm7-border); } .pm7-menu--flat .pm7-menu-trigger.pm7-button:hover { box-shadow: none !important; } .pm7-menu--flat .pm7-menu-trigger.pm7-button[aria-expanded="true"] { box-shadow: none !important; } .pm7-menu--flat .pm7-menu-item:not(.pm7-menu-item--clicking):hover { box-shadow: none !important; } .pm7-menu--flat .pm7-submenu { box-shadow: none !important; border: 1px solid var(--pm7-border); } /* Flat menu bar - applies to all menus within */ .pm7-menu-bar--flat .pm7-menu-content { box-shadow: none !important; border: 1px solid var(--pm7-border); } .pm7-menu-bar--flat .pm7-menu-trigger.pm7-button:hover, .pm7-menu-bar--flat .pm7-menu-trigger.pm7-button--ghost:hover { box-shadow: none !important; } .pm7-menu-bar--flat .pm7-menu-trigger.pm7-button[aria-expanded="true"] { box-shadow: none !important; } .pm7-menu-bar--flat .pm7-menu-item:not(.pm7-menu-item--clicking):hover { box-shadow: none !important; } .pm7-menu-bar--flat .pm7-submenu { box-shadow: none !important; border: 1px solid var(--pm7-border); } /* Flat hover variant - only removes hover shadows, keeps dropdown shadows */ /* Individual flat hover menu */ .pm7-menu--flat-hover .pm7-menu-trigger.pm7-button:hover { box-shadow: none !important; } .pm7-menu--flat-hover .pm7-menu-trigger.pm7-button[aria-expanded="true"] { box-shadow: none !important; } .pm7-menu--flat-hover .pm7-menu-item:not(.pm7-menu-item--clicking):hover { box-shadow: none !important; } /* Flat hover menu bar - applies to all menus within */ .pm7-menu-bar--flat-hover .pm7-menu-trigger.pm7-button:hover, .pm7-menu-bar--flat-hover .pm7-menu-trigger.pm7-button--ghost:hover { box-shadow: none !important; } .pm7-menu-bar--flat-hover .pm7-menu-trigger.pm7-button[aria-expanded="true"] { box-shadow: none !important; } .pm7-menu-bar--flat-hover .pm7-menu-item:not(.pm7-menu-item--clicking):hover { box-shadow: none !important; } /* PM7 Dialog Component */ /* Dialog backdrop */ .pm7-dialog-overlay { position: fixed; inset: 0; z-index: 10000; background-color: rgba(0, 0, 0, 0.5); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); opacity: 0; visibility: hidden; transition: opacity 200ms, visibility 200ms; } .pm7-dialog-overlay--open, .pm7-dialog[data-state="open"] .pm7-dialog-overlay { opacity: 1; visibility: visible; } /* Dialog container */ .pm7-dialog { position: fixed; inset: 0; z-index: 10000; display: none; pointer-events: none; /* Prevent blocking when hidden */ } /* Hide original dialog structure before transformation */ [data-pm7-dialog] { display: none; } /* Show when open */ [data-pm7-dialog][data-state="open"] { display: block !important; } /* Hide dialog content until transformed */ .pm7-dialog:not([data-state]) { display: none; } .pm7-dialog[data-state="closed"] { display: none; } .pm7-dialog[data-state="open"] { display: block; pointer-events: auto; /* Re-enable when visible */ } /* Closing state - keep visible for animation */ .pm7-dialog[data-state="closing"] { display: block; pointer-events: none; } /* Ensure content stays centered during close */ .pm7-dialog[data-state="closing"] .pm7-dialog-content { opacity: 0; visibility: hidden; transition: opacity 200ms, visibility 200ms; transform: translate(-50%, -50%); } /* Dialog content */ .pm7-dialog-content { position: fixed; left: 50%; top: 50%; z-index: 10001; transform: translate(-50%, -50%); width: 100%; max-width: 600px; max-height: 90vh; background-color: var(--pm7-background); border: 1px solid var(--pm7-border); border-radius: var(--pm7-radius-lg); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); opacity: 0; visibility: hidden; transition: opacity 200ms, visibility 200ms; overflow: hidden; display: flex; flex-direction: column; } /* Dark mode overlay */ .dark .pm7-dialog-overlay { background-color: rgba(0, 0, 0, 0.7); } /* Dark mode content shadow */ .dark .pm7-dialog-content { box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.3); } .pm7-dialog--open .pm7-dialog-content, .pm7-dialog[data-state="open"] .pm7-dialog-content { opacity: 1; visibility: visible; } /* Dialog sizes - using compound selectors for higher specificity */ .pm7-dialog-content.pm7-dialog-content--sm { max-width: 400px; } .pm7-dialog-content.pm7-dialog-content--md { max-width: 600px; } .pm7-dialog-content.pm7-dialog-content--lg { max-width: 800px; } .pm7-dialog-content.pm7-dialog-content--xl { max-width: 1000px; } .pm7-dialog-content.pm7-dialog-content--full { width: calc(100vw - 2rem); height: calc(100vh - 2rem); max-width: none; max-height: none; } /* Dialog header */ .pm7-dialog-header { position: relative; padding: var(--pm7-spacing-6); padding-right: calc(var(--pm7-spacing-6) + 2.25rem + var(--pm7-spacing-2)); /* Adjust for icon + close button + gap */ display: flex; justify-content: space-between; align-items: flex-start; flex-shrink: 0; } .pm7-dialog-header-text { flex-grow: 1; } .pm7-dialog-header-actions { display: flex; align-items: center; gap: var(--pm7-spacing-2);