UNPKG

@papernote/ui

Version:

A modern React component library with a paper notebook aesthetic - minimal, professional, and expressive

2,969 lines (2,351 loc) 107 kB
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); /* Component styles */ /** * Spreadsheet Component Styles * * Custom styling for react-spreadsheet to match notebook-ui's paper aesthetic */ /* Container */ .spreadsheet-container { width: 100%; overflow: auto; background-color: #fafaf9; /* paper-50 */ border-radius: 0.5rem; border: 1px solid #e7e5e4; /* stone-200 */ } /* Spreadsheet base */ .notebook-spreadsheet { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 0.875rem; color: #1c1917; /* ink-900 */ } /* Table styling */ .notebook-spreadsheet table { border-collapse: separate; border-spacing: 0; background-color: #ffffff; width: 100%; } /* Cell styling */ .notebook-spreadsheet td { border: 1px solid #e7e5e4; /* stone-200 */ padding: 0; background-color: #ffffff; transition: background-color 0.15s ease; } /* Cell hover */ .notebook-spreadsheet td:hover { background-color: #fafaf9; /* paper-50 */ } /* Selected cell */ .notebook-spreadsheet td.Spreadsheet__active-cell { border: 2px solid #334155; /* primary-700 */ box-shadow: 0 0 0 1px #334155; background-color: #ffffff; z-index: 10; } /* Header cells (row/column labels) */ .notebook-spreadsheet th { background-color: #f5f5f4; /* stone-100 */ color: #57534e; /* ink-600 */ border: 1px solid #e7e5e4; /* stone-200 */ padding: 0.5rem; font-weight: 600; font-size: 0.75rem; text-align: center; position: sticky; z-index: 5; } /* Column headers */ .notebook-spreadsheet thead th { top: 0; z-index: 10; } /* Row headers */ .notebook-spreadsheet tbody th { left: 0; z-index: 5; } /* Corner header (top-left cell) */ .notebook-spreadsheet thead th:first-child { left: 0; z-index: 15; } /* Cell input */ .notebook-spreadsheet .Spreadsheet__data-editor { width: 100%; height: 100%; border: none; outline: none; padding: 0.5rem; font-family: inherit; font-size: inherit; color: inherit; background-color: #ffffff; box-sizing: border-box; } .notebook-spreadsheet .Spreadsheet__data-editor:focus { background-color: #ffffff; border: 2px solid #334155; /* primary-700 */ padding: calc(0.5rem - 1px); } /* Cell with formula indicator */ .notebook-spreadsheet .Spreadsheet__cell--formula { font-style: italic; background-color: #f0fdf4; /* success-50 */ } /* Read-only cells */ .notebook-spreadsheet .Spreadsheet__cell--readonly { background-color: #f5f5f4; /* stone-100 */ color: #78716c; /* ink-500 */ } /* Selection highlight */ .notebook-spreadsheet .Spreadsheet__cell--selected { background-color: #e0f2fe; /* primary-100 */ } /* Cell error state */ .notebook-spreadsheet .Spreadsheet__cell--error { background-color: #fef2f2; /* error-50 */ color: #991b1b; /* error-800 */ } /* Cell value display */ .notebook-spreadsheet .Spreadsheet__value { padding: 0.5rem; min-height: 2rem; display: flex; align-items: center; } /* Number cells - align right */ .notebook-spreadsheet .Spreadsheet__cell--number .Spreadsheet__value { justify-content: flex-end; font-variant-numeric: tabular-nums; } /* Empty cells */ .notebook-spreadsheet .Spreadsheet__cell--empty .Spreadsheet__value { color: #a8a29e; /* ink-400 */ } /* Copy/paste indicator */ .notebook-spreadsheet .Spreadsheet__floating-rect { border: 2px dashed #334155; /* primary-700 */ background-color: rgba(51, 65, 85, 0.1); pointer-events: none; } /* Scrollbar styling for webkit browsers */ .spreadsheet-container::-webkit-scrollbar { width: 12px; height: 12px; } .spreadsheet-container::-webkit-scrollbar-track { background-color: #fafaf9; /* paper-50 */ border-radius: 0.5rem; } .spreadsheet-container::-webkit-scrollbar-thumb { background-color: #d6d3d1; /* stone-300 */ border-radius: 0.5rem; border: 2px solid #fafaf9; } .spreadsheet-container::-webkit-scrollbar-thumb:hover { background-color: #a8a29e; /* ink-400 */ } /* Loading state */ .spreadsheet-container.loading { opacity: 0.6; pointer-events: none; } /* Responsive adjustments */ @media (max-width: 768px) { .notebook-spreadsheet { font-size: 0.75rem; } .notebook-spreadsheet .Spreadsheet__value { padding: 0.375rem; min-height: 1.75rem; } .notebook-spreadsheet .Spreadsheet__data-editor { padding: 0.375rem; } .notebook-spreadsheet th { padding: 0.375rem; font-size: 0.6875rem; } } /* Print styles */ @media print { .spreadsheet-container { border: none; overflow: visible; } .notebook-spreadsheet td, .notebook-spreadsheet th { border-color: #000; } .notebook-spreadsheet .Spreadsheet__active-cell { border: 1px solid #000; box-shadow: none; } } *, ::before, ::after{ --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } ::backdrop{ --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } /* ! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. 5. Use the user's configured `sans` font-feature-settings by default. 6. Use the user's configured `sans` font-variation-settings by default. 7. Disable tap highlights on iOS */ html, :host { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Inter, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji; /* 4 */ font-feature-settings: normal; /* 5 */ font-variation-settings: normal; /* 6 */ -webkit-tap-highlight-color: transparent; /* 7 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font-family by default. 2. Use the user's configured `mono` font-feature-settings by default. 3. Use the user's configured `mono` font-variation-settings by default. 4. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: JetBrains Mono Variable, JetBrains Mono, Fira Code, Monaco, Consolas, Liberation Mono, Courier New, monospace; /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-feature-settings: inherit; /* 1 */ font-variation-settings: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ letter-spacing: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, input:where([type='button']), input:where([type='reset']), input:where([type='submit']) { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Reset default styling for dialogs. */ dialog { padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } /* Make elements with the HTML hidden attribute stay hidden by default */ [hidden]:where(:not([hidden="until-found"])) { display: none; } body { font-family: 'Inter', sans-serif; --tw-bg-opacity: 1; background-color: rgb(245 245 244 / var(--tw-bg-opacity, 1)); --tw-text-opacity: 1; color: rgb(87 83 78 / var(--tw-text-opacity, 1)); /* Desk-like background for page contrast */ } h1, h2, h3, h4, h5, h6{ font-weight: 500; --tw-text-opacity: 1; color: rgb(28 25 23 / var(--tw-text-opacity, 1)); } h1{ font-size: 1.875rem; line-height: 2.5rem; letter-spacing: -0.025em; } h2{ font-size: 1.5rem; line-height: 2.25rem; letter-spacing: -0.025em; } h3{ font-size: 1.25rem; line-height: 2rem; } h4{ font-size: 1.125rem; line-height: 1.875rem; } .\!container{ width: 100% !important; } .container{ width: 100%; } @media (min-width: 640px){ .\!container{ max-width: 640px !important; } .container{ max-width: 640px; } } @media (min-width: 768px){ .\!container{ max-width: 768px !important; } .container{ max-width: 768px; } } @media (min-width: 1024px){ .\!container{ max-width: 1024px !important; } .container{ max-width: 1024px; } } @media (min-width: 1280px){ .\!container{ max-width: 1280px !important; } .container{ max-width: 1280px; } } @media (min-width: 1536px){ .\!container{ max-width: 1536px !important; } .container{ max-width: 1536px; } } /* Button Styles - Minimal & Professional */ /* Input Styles - Comfortable & Clear */ .input{ display: block; width: 100%; border-radius: 0.5rem; border-width: 1px; --tw-border-opacity: 1; border-color: rgb(214 211 209 / var(--tw-border-opacity, 1)); --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); padding-left: 1rem; padding-right: 1rem; padding-top: 0.625rem; padding-bottom: 0.625rem; font-size: 0.875rem; line-height: 1.375rem; --tw-text-opacity: 1; color: rgb(41 37 36 / var(--tw-text-opacity, 1)); } .input::-moz-placeholder{ --tw-placeholder-opacity: 1; color: rgb(168 162 158 / var(--tw-placeholder-opacity, 1)); } .input::placeholder{ --tw-placeholder-opacity: 1; color: rgb(168 162 158 / var(--tw-placeholder-opacity, 1)); } .input{ transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } .input:hover{ --tw-border-opacity: 1; border-color: rgb(168 162 158 / var(--tw-border-opacity, 1)); } .input:focus{ --tw-border-opacity: 1; border-color: rgb(168 165 153 / var(--tw-border-opacity, 1)); outline: 2px solid transparent; outline-offset: 2px; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); --tw-ring-opacity: 1; --tw-ring-color: rgb(168 165 153 / var(--tw-ring-opacity, 1)); } .\!label{ margin-bottom: 0.5rem; display: flex; align-items: center; font-size: 0.875rem; line-height: 1.375rem; font-weight: 500; --tw-text-opacity: 1; color: rgb(68 64 60 / var(--tw-text-opacity, 1)); } .label{ margin-bottom: 0.5rem; display: flex; align-items: center; font-size: 0.875rem; line-height: 1.375rem; font-weight: 500; --tw-text-opacity: 1; color: rgb(68 64 60 / var(--tw-text-opacity, 1)); } /* Card Styles - Paper-like */ .card{ border-radius: 0.75rem; border-width: 1px; --tw-border-opacity: 1; border-color: rgb(231 229 228 / var(--tw-border-opacity, 1)); --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); background-image: url("data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e%3cfilter id='noise'%3e%3cfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3e%3cfeColorMatrix type='saturate' values='0'/%3e%3c/filter%3e%3crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.015'/%3e%3c/svg%3e"); padding: 2rem; --tw-shadow: 0 2px 4px 0 rgb(0 0 0 / 0.04), 0 1px 2px 0 rgb(0 0 0 / 0.02); --tw-shadow-colored: 0 2px 4px 0 var(--tw-shadow-color), 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); transition-property: box-shadow; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } .card:hover{ --tw-shadow: 0 2px 4px 0 rgb(0 0 0 / 0.06); --tw-shadow-colored: 0 2px 4px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } /* Badge Styles - Muted & Professional */ .\!badge{ display: inline-flex; align-items: center; border-radius: 9999px; padding-left: 0.75rem; padding-right: 0.75rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-size: 0.75rem; line-height: 1.125rem; font-weight: 500; } .badge{ display: inline-flex; align-items: center; border-radius: 9999px; padding-left: 0.75rem; padding-right: 0.75rem; padding-top: 0.25rem; padding-bottom: 0.25rem; font-size: 0.75rem; line-height: 1.125rem; font-weight: 500; } /* Table Styles - Clean & Minimal */ .table{ min-width: 100%; } .table > :not([hidden]) ~ :not([hidden]){ --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); --tw-divide-opacity: 1; border-color: rgb(231 229 228 / var(--tw-divide-opacity, 1)); } /* Navigation Styles - Notebook-like */ /* Switch Toggle Styles - Refined */ .switch{ position: relative; display: inline-block; height: 1.5rem; width: 2.75rem; } .switch input{ height: 0px; width: 0px; opacity: 0; } .slider{ position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; cursor: pointer; border-radius: 9999px; --tw-bg-opacity: 1; background-color: rgb(214 211 209 / var(--tw-bg-opacity, 1)); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } .slider:before{ position: absolute; left: 0.125rem; bottom: 0.125rem; height: 1.25rem; width: 1.25rem; border-radius: 9999px; --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; --tw-content: ''; content: var(--tw-content); } input:checked + .slider{ --tw-bg-opacity: 1; background-color: rgb(139 136 120 / var(--tw-bg-opacity, 1)); } input:checked + .slider:before{ --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } /* Stat Card Styles - Paper-like */ /* Notebook Page Container - Creates bounded page effect NOTE: This class is deprecated - Page component now handles responsive layout via props Keeping for backward compatibility only */ .notebook-page{ border-radius: 0.125rem; border-left-width: 4px; --tw-border-opacity: 1; border-color: rgb(214 211 209 / var(--tw-border-opacity, 1)); --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); background-image: url("data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e%3cfilter id='noise'%3e%3cfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3e%3cfeColorMatrix type='saturate' values='0'/%3e%3c/filter%3e%3crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.015'/%3e%3c/svg%3e"); --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.08); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); max-width: 1400px; /* Responsive margins - fixed left/top, responsive right/bottom */ margin-top: 1rem; margin-left: 1rem; margin-right: 1rem; margin-bottom: 1rem; /* Responsive padding - fixed left/top, responsive right/bottom */ padding-top: 3rem; padding-left: 5rem; /* Extra left padding for binding margin */ padding-right: 1rem; padding-bottom: 1rem; min-height: calc(100vh - 2rem); position: relative; } /* Responsive padding/margin increases on larger screens */ @media (min-width: 640px) { .notebook-page { margin-right: 1.5rem; margin-bottom: 2rem; padding-right: 2rem; padding-bottom: 2rem; } } @media (min-width: 768px) { .notebook-page { margin-right: 2rem; margin-bottom: 2rem; padding-right: 3rem; padding-bottom: 3rem; } } @media (min-width: 1024px) { .notebook-page { margin-right: auto; /* Center on large screens */ padding-right: 4rem; padding-bottom: 4rem; } } /* Notebook binding effect on sidebar */ .notebook-binding { position: relative; } .notebook-binding::after { content: ''; position: absolute; right: 0; top: 0; bottom: 0; width: 3px; background: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.03) 10%, rgba(0,0,0,0.05) 50%, rgba(0,0,0,0.03) 90%, transparent 100% ); box-shadow: 2px 0 4px rgba(0,0,0,0.04); } /* Ruled lines for notebook page (very subtle) */ .notebook-ruled { background-image: linear-gradient(transparent 0%, transparent calc(100% - 1px), rgba(231, 229, 228, 0.3) 100%); background-size: 100% 2rem; background-position: 0 1.5rem; } /* Left margin line for notebook page */ .notebook-margin { position: relative; } .notebook-margin::before { content: ''; position: absolute; left: 3rem; top: 0; bottom: 0; width: 1px; background-color: rgba(239, 68, 68, 0.05); /* Very subtle red margin line */ } /* Page Navigation / TOC - Sits in gutter between sidebar and page */ /* Tab-style navigation items */ .page-nav-item.active{ --tw-border-opacity: 1; border-color: rgb(139 136 120 / var(--tw-border-opacity, 1)); --tw-bg-opacity: 1; background-color: rgb(250 250 248 / var(--tw-bg-opacity, 1)); font-weight: 500; --tw-text-opacity: 1; color: rgb(42 41 34 / var(--tw-text-opacity, 1)); } /* Alternative: Dot navigation style (simpler) */ .page-nav-dot{ pointer-events: auto; height: 0.5rem; width: 0.5rem; cursor: pointer; border-radius: 9999px; --tw-bg-opacity: 1; background-color: rgb(214 211 209 / var(--tw-bg-opacity, 1)); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; } .page-nav-dot:hover{ --tw-bg-opacity: 1; background-color: rgb(168 165 153 / var(--tw-bg-opacity, 1)); transform: scale(1.2); } .page-nav-dot.active{ height: 0.625rem; width: 0.625rem; --tw-bg-opacity: 1; background-color: rgb(139 136 120 / var(--tw-bg-opacity, 1)); } .sr-only{ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .pointer-events-none{ pointer-events: none; } .pointer-events-auto{ pointer-events: auto; } .\!visible{ visibility: visible !important; } .visible{ visibility: visible; } .invisible{ visibility: hidden; } .collapse{ visibility: collapse; } .static{ position: static; } .fixed{ position: fixed; } .absolute{ position: absolute; } .relative{ position: relative; } .sticky{ position: sticky; } .inset-0{ inset: 0px; } .inset-y-0{ top: 0px; bottom: 0px; } .-bottom-0\.5{ bottom: -0.125rem; } .-right-0\.5{ right: -0.125rem; } .-right-1{ right: -0.25rem; } .-right-2\.5{ right: -0.625rem; } .-top-1{ top: -0.25rem; } .bottom-0{ bottom: 0px; } .bottom-1{ bottom: 0.25rem; } .bottom-4{ bottom: 1rem; } .bottom-6{ bottom: 1.5rem; } .bottom-full{ bottom: 100%; } .left-0{ left: 0px; } .left-0\.5{ left: 0.125rem; } .left-1\/2{ left: 50%; } .left-2{ left: 0.5rem; } .left-3{ left: 0.75rem; } .left-4{ left: 1rem; } .left-5{ left: 1.25rem; } .left-6{ left: 1.5rem; } .left-full{ left: 100%; } .right-0{ right: 0px; } .right-2{ right: 0.5rem; } .right-3{ right: 0.75rem; } .right-4{ right: 1rem; } .right-6{ right: 1.5rem; } .right-full{ right: 100%; } .top-0{ top: 0px; } .top-0\.5{ top: 0.125rem; } .top-1\/2{ top: 50%; } .top-10{ top: 2.5rem; } .top-2{ top: 0.5rem; } .top-20{ top: 5rem; } .top-3{ top: 0.75rem; } .top-4{ top: 1rem; } .top-full{ top: 100%; } .-z-10{ z-index: -10; } .z-10{ z-index: 10; } .z-20{ z-index: 20; } .z-30{ z-index: 30; } .z-40{ z-index: 40; } .z-50{ z-index: 50; } .z-\[9998\]{ z-index: 9998; } .z-\[9999\]{ z-index: 9999; } .col-span-1{ grid-column: span 1 / span 1; } .col-span-10{ grid-column: span 10 / span 10; } .col-span-11{ grid-column: span 11 / span 11; } .col-span-12{ grid-column: span 12 / span 12; } .col-span-2{ grid-column: span 2 / span 2; } .col-span-3{ grid-column: span 3 / span 3; } .col-span-4{ grid-column: span 4 / span 4; } .col-span-5{ grid-column: span 5 / span 5; } .col-span-6{ grid-column: span 6 / span 6; } .col-span-7{ grid-column: span 7 / span 7; } .col-span-8{ grid-column: span 8 / span 8; } .col-span-9{ grid-column: span 9 / span 9; } .row-span-1{ grid-row: span 1 / span 1; } .row-span-2{ grid-row: span 2 / span 2; } .row-span-3{ grid-row: span 3 / span 3; } .row-span-4{ grid-row: span 4 / span 4; } .row-span-5{ grid-row: span 5 / span 5; } .row-span-6{ grid-row: span 6 / span 6; } .-mx-6{ margin-left: -1.5rem; margin-right: -1.5rem; } .mx-1{ margin-left: 0.25rem; margin-right: 0.25rem; } .mx-2{ margin-left: 0.5rem; margin-right: 0.5rem; } .mx-4{ margin-left: 1rem; margin-right: 1rem; } .mx-6{ margin-left: 1.5rem; margin-right: 1.5rem; } .mx-auto{ margin-left: auto; margin-right: auto; } .my-1{ margin-top: 0.25rem; margin-bottom: 0.25rem; } .my-2{ margin-top: 0.5rem; margin-bottom: 0.5rem; } .my-4{ margin-top: 1rem; margin-bottom: 1rem; } .my-6{ margin-top: 1.5rem; margin-bottom: 1.5rem; } .-mb-4{ margin-bottom: -1rem; } .-mb-\[1px\]{ margin-bottom: -1px; } .-mb-px{ margin-bottom: -1px; } .-ml-2{ margin-left: -0.5rem; } .-ml-px{ margin-left: -1px; } .-mr-1{ margin-right: -0.25rem; } .-mr-2{ margin-right: -0.5rem; } .-mr-\[1px\]{ margin-right: -1px; } .mb-1{ margin-bottom: 0.25rem; } .mb-1\.5{ margin-bottom: 0.375rem; } .mb-2{ margin-bottom: 0.5rem; } .mb-3{ margin-bottom: 0.75rem; } .mb-4{ margin-bottom: 1rem; } .mb-6{ margin-bottom: 1.5rem; } .mb-8{ margin-bottom: 2rem; } .ml-1{ margin-left: 0.25rem; } .ml-1\.5{ margin-left: 0.375rem; } .ml-2{ margin-left: 0.5rem; } .ml-3{ margin-left: 0.75rem; } .ml-4{ margin-left: 1rem; } .ml-5{ margin-left: 1.25rem; } .ml-auto{ margin-left: auto; } .mr-1{ margin-right: 0.25rem; } .mr-2{ margin-right: 0.5rem; } .mr-4{ margin-right: 1rem; } .mt-0\.5{ margin-top: 0.125rem; } .mt-1{ margin-top: 0.25rem; } .mt-1\.5{ margin-top: 0.375rem; } .mt-2{ margin-top: 0.5rem; } .mt-3{ margin-top: 0.75rem; } .mt-4{ margin-top: 1rem; } .mt-5{ margin-top: 1.25rem; } .mt-6{ margin-top: 1.5rem; } .mt-8{ margin-top: 2rem; } .mt-\[-30px\]{ margin-top: -30px; } .mt-auto{ margin-top: auto; } .line-clamp-1{ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; } .line-clamp-2{ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .line-clamp-3{ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } .line-clamp-4{ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; } .line-clamp-5{ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; } .line-clamp-6{ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 6; } .block{ display: block; } .inline-block{ display: inline-block; } .inline{ display: inline; } .flex{ display: flex; } .inline-flex{ display: inline-flex; } .table{ display: table; } .grid{ display: grid; } .hidden{ display: none; } .aspect-square{ aspect-ratio: 1 / 1; } .h-0{ height: 0px; } .h-0\.5{ height: 0.125rem; } .h-1{ height: 0.25rem; } .h-1\.5{ height: 0.375rem; } .h-10{ height: 2.5rem; } .h-12{ height: 3rem; } .h-14{ height: 3.5rem; } .h-16{ height: 4rem; } .h-2{ height: 0.5rem; } .h-2\.5{ height: 0.625rem; } .h-24{ height: 6rem; } .h-3{ height: 0.75rem; } .h-3\.5{ height: 0.875rem; } .h-32{ height: 8rem; } .h-4{ height: 1rem; } .h-5{ height: 1.25rem; } .h-6{ height: 1.5rem; } .h-64{ height: 16rem; } .h-7{ height: 1.75rem; } .h-8{ height: 2rem; } .h-9{ height: 2.25rem; } .h-96{ height: 24rem; } .h-\[18px\]{ height: 18px; } .h-\[32rem\]{ height: 32rem; } .h-auto{ height: auto; } .h-full{ height: 100%; } .h-px{ height: 1px; } .h-screen{ height: 100vh; } .max-h-32{ max-height: 8rem; } .max-h-48{ max-height: 12rem; } .max-h-60{ max-height: 15rem; } .max-h-64{ max-height: 16rem; } .max-h-\[400px\]{ max-height: 400px; } .max-h-\[600px\]{ max-height: 600px; } .max-h-\[85vh\]{ max-height: 85vh; } .min-h-0{ min-height: 0px; } .min-h-\[200px\]{ min-height: 200px; } .min-h-\[400px\]{ min-height: 400px; } .min-h-\[40px\]{ min-height: 40px; } .min-h-\[42px\]{ min-height: 42px; } .min-h-\[calc\(100vh-2rem\)\]{ min-height: calc(100vh - 2rem); } .min-h-screen{ min-height: 100vh; } .min-h-touch{ min-height: 2.75rem; } .min-h-touch-sm{ min-height: 2.25rem; } .w-0\.5{ width: 0.125rem; } .w-1{ width: 0.25rem; } .w-1\.5{ width: 0.375rem; } .w-1\/2{ width: 50%; } .w-10{ width: 2.5rem; } .w-11{ width: 2.75rem; } .w-12{ width: 3rem; } .w-14{ width: 3.5rem; } .w-16{ width: 4rem; } .w-18{ width: 4.5rem; } .w-2{ width: 0.5rem; } .w-2\.5{ width: 0.625rem; } .w-2\/3{ width: 66.666667%; } .w-20{ width: 5rem; } .w-24{ width: 6rem; } .w-3{ width: 0.75rem; } .w-3\.5{ width: 0.875rem; } .w-3\/4{ width: 75%; } .w-4{ width: 1rem; } .w-4\/6{ width: 66.666667%; } .w-48{ width: 12rem; } .w-5{ width: 1.25rem; } .w-5\/6{ width: 83.333333%; } .w-56{ width: 14rem; } .w-6{ width: 1.5rem; } .w-64{ width: 16rem; } .w-7{ width: 1.75rem; } .w-72{ width: 18rem; } .w-8{ width: 2rem; } .w-80{ width: 20rem; } .w-9{ width: 2.25rem; } .w-96{ width: 24rem; } .w-\[32rem\]{ width: 32rem; } .w-auto{ width: auto; } .w-fit{ width: -moz-fit-content; width: fit-content; } .w-full{ width: 100%; } .w-px{ width: 1px; } .w-screen{ width: 100vw; } .min-w-0{ min-width: 0px; } .min-w-32{ min-width: 8rem; } .min-w-48{ min-width: 12rem; } .min-w-5{ min-width: 1.25rem; } .min-w-64{ min-width: 16rem; } .min-w-\[150px\]{ min-width: 150px; } .min-w-\[16px\]{ min-width: 16px; } .min-w-\[18px\]{ min-width: 18px; } .min-w-\[200px\]{ min-width: 200px; } .min-w-\[20px\]{ min-width: 20px; } .min-w-\[250px\]{ min-width: 250px; } .min-w-\[320px\]{ min-width: 320px; } .min-w-\[72px\]{ min-width: 72px; } .min-w-full{ min-width: 100%; } .min-w-touch-sm{ min-width: 2.25rem; } .max-w-2xl{ max-width: 42rem; } .max-w-4xl{ max-width: 56rem; } .max-w-5xl{ max-width: 64rem; } .max-w-6xl{ max-width: 72rem; } .max-w-7xl{ max-width: 80rem; } .max-w-\[200px\]{ max-width: 200px; } .max-w-\[calc\(100\%-0\.25rem\)\]{ max-width: calc(100% - 0.25rem); } .max-w-full{ max-width: 100%; } .max-w-lg{ max-width: 32rem; } .max-w-md{ max-width: 28rem; } .max-w-none{ max-width: none; } .max-w-sm{ max-width: 24rem; } .max-w-xl{ max-width: 36rem; } .max-w-xs{ max-width: 20rem; } .flex-1{ flex: 1 1 0%; } .flex-shrink-0{ flex-shrink: 0; } .shrink{ flex-shrink: 1; } .grow{ flex-grow: 1; } .border-collapse{ border-collapse: collapse; } .origin-bottom{ transform-origin: bottom; } .origin-top{ transform-origin: top; } .-translate-x-1\/2{ --tw-translate-x: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-x-full{ --tw-translate-x: -100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-y-1\/2{ --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-0{ --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-4{ --tw-translate-x: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-5{ --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-7{ --tw-translate-x: 1.75rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-full{ --tw-translate-x: 100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-0{ --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-20{ --tw-translate-y: 5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-full{ --tw-translate-y: 100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-rotate-90{ --tw-rotate: -90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-0{ --tw-rotate: 0deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-180{ --tw-rotate: 180deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-90{ --tw-rotate: 90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-100{ --tw-scale-x: 1; --tw-scale-y: 1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-105{ --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-110{ --tw-scale-x: 1.1; --tw-scale-y: 1.1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-75{ --tw-scale-x: .75; --tw-scale-y: .75; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .transform{ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @keyframes bounce{ 0%, 100%{ transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8,0,1,1); } 50%{ transform: none; animation-timing-function: cubic-bezier(0,0,0.2,1); } } .animate-bounce{ animation: bounce 1s infinite; } @keyframes fadeIn{ 0%{ opacity: 0; } 100%{ opacity: 1; } } .animate-fade-in{ animation: fadeIn 0.5s ease-in-out; } @keyframes pulse{ 50%{ opacity: .5; } } .animate-pulse{ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes scaleIn{ 0%{ transform: scale(0.9); opacity: 0; } 100%{ transform: scale(1); opacity: 1; } } .animate-scale-in{ animation: scaleIn 0.2s ease-out; } @keyframes shimmer{ 0%{ transform: translateX(-100%); } 100%{ transform: translateX(100%); } } .animate-shimmer{ animation: shimmer 2s linear infinite; } @keyframes slideIn{ 0%{ transform: translateX(-10px); opacity: 0; } 100%{ transform: translateX(0); opacity: 1; } } .animate-slide-in{ animation: slideIn 0.3s ease-out; } @keyframes slideInBottom{ 0%{ transform: translateY(100%); opacity: 0; } 100%{ transform: translateY(0); opacity: 1; } } .animate-slide-in-bottom{ animation: slideInBottom 0.3s ease-out; } @keyframes slideInLeft{ 0%{ transform: translateX(-100%); opacity: 0; } 100%{ transform: translateX(0); opacity: 1; } } .animate-slide-in-left{ animation: slideInLeft 0.3s ease-out; } @keyframes slideInRight{ 0%{ transform: translateX(100%); opacity: 0; } 100%{ transform: translateX(0); opacity: 1; } } .animate-slide-in-right{ animation: slideInRight 0.3s ease-out; } @keyframes slideInTop{ 0%{ transform: translateY(-100%); opacity: 0; } 100%{ transform: translateY(0); opacity: 1; } } .animate-slide-in-top{ animation: slideInTop 0.3s ease-out; } @keyframes slideOutBottom{ 0%{ transform: translateY(0); opacity: 1; } 100%{ transform: translateY(100%); opacity: 0; } } .animate-slide-out-bottom{ animation: slideOutBottom 0.3s ease-in; } @keyframes slideOutLeft{ 0%{ transform: translateX(0); opacity: 1; } 100%{ transform: translateX(-100%); opacity: 0; } } .animate-slide-out-left{ animation: slideOutLeft 0.3s ease-in; } @keyframes slideOutRight{ 0%{ transform: translateX(0); opacity: 1; } 100%{ transform: translateX(100%); opacity: 0; } } .animate-slide-out-right{ animation: slideOutRight 0.3s ease-in; } @keyframes slideOutTop{ 0%{ transform: translateY(0); opacity: 1; } 100%{ transform: translateY(-100%); opacity: 0; } } .animate-slide-out-top{ animation: slideOutTop 0.3s ease-in; } @keyframes spin{ to{ transform: rotate(360deg); } } .animate-spin{ animation: spin 1s linear infinite; } .cursor-col-resize{ cursor: col-resize; } .cursor-default{ cursor: default; } .cursor-grab{ cursor: grab; } .cursor-move{ cursor: move; } .cursor-not-allowed{ cursor: not-allowed; } .cursor-pointer{ cursor: pointer; } .select-none{ -webkit-user-select: none; -moz-user-select: none; user-select: none; } .resize-none{ resize: none; } .resize-y{ resize: vertical; } .resize-x{ resize: horizontal; } .resize{ resize: both; } .list-inside{ list-style-position: inside; } .list-disc{ list-style-type: disc; } .appearance-none{ -webkit-appearance: none; -moz-appearance: none; appearance: none; } .grid-cols-1{ grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-12{ grid-template-columns: repeat(12, minmax(0, 1fr)); } .grid-cols-2{ grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-cols-3{ grid-template-columns: repeat(3, minmax(0, 1fr)); } .grid-cols-4{ grid-template-columns: repeat(4, minmax(0, 1fr)); } .grid-cols-6{ grid-template-columns: repeat(6, minmax(0, 1fr)); } .grid-cols-7{ grid-template-columns: repeat(7, minmax(0, 1fr)); } .flex-row{ flex-direction: row; } .flex-row-reverse{ flex-direction: row-reverse; } .flex-col{ flex-direction: column; } .flex-col-reverse{ flex-direction: column-reverse; } .flex-wrap{ flex-wrap: wrap; } .items-start{ align-items: flex-start; } .items-end{ align-items: flex-end; } .items-center{ align-items: center; } .items-stretch{ align-items: stretch; } .justify-start{ justify-content: flex-start; } .justify-end{ justify-content: flex-end; } .justify-center{ justify-content: center; } .justify-between{ justify-content: space-between; } .justify-around{ justify-content: space-around; } .gap-0{ gap: 0px; } .gap-0\.5{ gap: 0.125rem; } .gap-1{ gap: 0.25rem; } .gap-1\.5{ gap: 0.375rem; } .gap-12{ gap: 3rem; } .gap-2{ gap: 0.5rem; } .gap-2\.5{ gap: 0.625rem; } .gap-3{ gap: 0.75rem; } .gap-4{ gap: 1rem; } .gap-6{ gap: 1.5rem; } .gap-8{ gap: 2rem; } .space-x-1 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(0.25rem * var(--tw-space-x-reverse)); margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-12 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(3rem * var(--tw-space-x-reverse)); margin-left: calc(3rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-2 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(0.5rem * var(--tw-space-x-reverse)); margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-3 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(0.75rem * var(--tw-space-x-reverse)); margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-4 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(1rem * var(--tw-space-x-reverse)); margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-6 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(1.5rem * var(--tw-space-x-reverse)); margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-8 > :not([hidden]) ~ :not([hidden]){ --tw-space-x-reverse: 0; margin-right: calc(2rem * var(--tw-space-x-reverse)); margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); } .space-y-1 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } .space-y-12 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(3rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(3rem * var(--tw-space-y-reverse)); } .space-y-2 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .space-y-3 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .space-y-4 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } .space-y-6 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } .space-y-8 > :not([hidden]) ~ :not([hidden]){ --tw-space-y-reverse: 0; margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(2rem * var(--tw-space-y-reverse)); } .overflow-auto{ overflow: auto; } .overflow-hidden{ overflow: hidden; } .overflow-visible{ overflow: visible; } .overflow-x-auto{ overflow-x: auto; } .overflow-y-auto{ overflow-y: auto; } .overflow-y-visible{ overflow-y: visible; } .truncate{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .whitespace-nowrap{ white-space: nowrap; } .whitespace-pre-line{ white-space: pre-line; } .whitespace-pre-wrap{ white-space: pre-wrap; } .break-words{ overflow-wrap: break-word; } .break-all{ word-break: break-all; } .\!rounded{ border-radius: 0.25rem !important; } .rounded{ border-radius: 0.25rem; } .rounded-full{ border-radius: 9999px; } .rounded-lg{ border-radius: 0.5rem; } .rounded-md{ border-radius: 0.375rem; } .rounded-none{ border-radius: 0px; } .rounded-sm{ border-radius: 0.125rem; } .rounded-xl{ border-radius: 0.75rem; } .rounded-b-lg{ border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } .rounded-b-xl{ border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } .rounded-l-lg{ border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } .rounded-l-md{ border-top-left-radius: 0.37