@import "tailwindcss"; @theme { --color-surface-950: #09090b; --color-surface-900: #111113; --color-surface-800: #1a1a1f; --color-surface-700: #252529; --color-surface-600: #35353b; --color-accent-500: #6366f1; --color-accent-400: #818cf8; --color-accent-600: #4f46e5; } @utility glass { background: linear-gradient( 135deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0.01) ); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.06); } @utility glow-border { border: 1px solid rgba(99, 102, 241, 0.2); box-shadow: 0 0 20px rgba(99, 102, 241, 0.05), inset 0 0 20px rgba(99, 102, 241, 0.02); } @utility gradient-text { background: linear-gradient(135deg, #e4e4e7, #818cf8); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } @utility input-field { width: 100%; padding: 0.75rem 1rem; border-radius: 0.75rem; border: 1px solid rgba(255, 255, 255, 0.08); background: var(--color-surface-800); color: #e4e4e7; font-size: 0.875rem; line-height: 1.25rem; outline: none; transition: all 0.2s ease; &::placeholder { color: #52525b; } &:focus { border-color: var(--color-accent-500); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1), 0 0 20px rgba(99, 102, 241, 0.05); } } @utility btn-primary { width: 100%; padding: 0.75rem 1rem; border-radius: 0.75rem; font-size: 0.875rem; font-weight: 500; color: white; background: linear-gradient( 135deg, var(--color-accent-500), var(--color-accent-600) ); outline: none; transition: all 0.2s ease; cursor: pointer; &:hover { box-shadow: 0 0 30px rgba(99, 102, 241, 0.3), 0 4px 15px rgba(99, 102, 241, 0.2); transform: translateY(-1px); } &:active { transform: translateY(0); } } @utility btn-small { padding: 0.375rem 0.75rem; border-radius: 0.5rem; font-size: 0.75rem; font-weight: 500; color: white; background: linear-gradient( 135deg, var(--color-accent-500), var(--color-accent-600) ); outline: none; transition: all 0.2s ease; cursor: pointer; &:hover { box-shadow: 0 0 20px rgba(99, 102, 241, 0.3), 0 2px 10px rgba(99, 102, 241, 0.2); transform: translateY(-1px); } &:active { transform: translateY(0); } } @utility fade-in { animation: fadeIn 0.4s ease-out; } @utility slide-up { animation: slideUp 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } .loading-bar { position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 9999; opacity: 0; pointer-events: none; transition: opacity 0.2s ease; } .loading-bar.htmx-request { opacity: 1; } .loading-bar::before { content: ""; position: absolute; top: 0; left: 0; width: 0%; height: 100%; background: linear-gradient( 90deg, var(--color-accent-500), var(--color-accent-400) ); } .loading-bar.htmx-request::before { animation: loading-fill 8s cubic-bezier(0.1, 0.4, 0.2, 0.9) forwards; } .loading-bar::after { content: ""; position: absolute; top: 0; right: 0; width: 80px; height: 100%; background: linear-gradient( 90deg, transparent, rgba(129, 140, 248, 0.6) ); box-shadow: 0 0 12px rgba(129, 140, 248, 0.4); opacity: 0; } .loading-bar.htmx-request::after { animation: loading-fill 8s cubic-bezier(0.1, 0.4, 0.2, 0.9) forwards; opacity: 1; } @keyframes loading-fill { 0% { width: 0%; } 20% { width: 40%; } 50% { width: 65%; } 80% { width: 85%; } 100% { width: 98%; } } .nav-link { color: #a1a1aa; } .nav-link:hover { color: #e4e4e7; background: rgba(255, 255, 255, 0.04); } .nav-link.active { color: #f4f4f5; background: rgba(255, 255, 255, 0.06); } .dropdown { position: relative; } .dropdown-menu { display: none; position: absolute; top: calc(100% + 0.375rem); left: 0; right: 0; z-index: 50; border-radius: 0.75rem; border: 1px solid rgba(255, 255, 255, 0.08); background: var(--color-surface-800); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4), 0 0 20px rgba(0, 0, 0, 0.2); overflow: hidden; } .dropdown.open .dropdown-menu { display: block; } .dropdown.open [data-dropdown-chevron] { transform: rotate(180deg); } .dropdown-search { width: 100%; padding: 0.5rem 0.75rem; border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 0.5rem; background: var(--color-surface-900); color: #e4e4e7; font-size: 0.8125rem; outline: none; transition: border-color 0.2s ease; } .dropdown-search::placeholder { color: #52525b; } .dropdown-search:focus { border-color: var(--color-accent-500); } .dropdown-options { max-height: 12rem; overflow-y: auto; padding: 0.25rem; } .dropdown-options::-webkit-scrollbar { width: 4px; } .dropdown-options::-webkit-scrollbar-track { background: transparent; } .dropdown-options::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.1); border-radius: 2px; } .dropdown-option { display: block; width: 100%; text-align: left; padding: 0.5rem 0.75rem; border-radius: 0.5rem; cursor: pointer; transition: background 0.15s ease; } .dropdown-option:hover { background: rgba(255, 255, 255, 0.04); } .dropdown-option.selected { background: rgba(99, 102, 241, 0.1); } .dropdown-compact .dropdown-menu { top: calc(100% + 0.25rem); min-width: 10rem; border-radius: 0.5rem; left: auto; right: 0; } .dropdown-compact .dropdown-options { max-height: 9rem; padding: 0.125rem; } .dropdown-compact .dropdown-option { padding: 0.3rem 0.5rem; border-radius: 0.375rem; font-size: 0.6875rem; } .dropdown-compact .dropdown-option p { font-size: 0.6875rem; } .alert-toast { padding: 0.75rem 1rem; border-radius: 0.75rem; border: 1px solid rgba(239, 68, 68, 0.2); background: linear-gradient( 135deg, rgba(239, 68, 68, 0.08), rgba(239, 68, 68, 0.04) ); backdrop-filter: blur(20px); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3), 0 0 20px rgba(239, 68, 68, 0.05); animation: alertSlideIn 0.3s ease-out; min-width: 20rem; max-width: 28rem; } .alert-toast.dismissing { animation: alertSlideOut 0.2s ease-in forwards; } @keyframes alertSlideIn { from { opacity: 0; transform: translateX(1rem); } to { opacity: 1; transform: translateX(0); } } @keyframes alertSlideOut { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(1rem); } } ::selection { background-color: var(--color-accent-500); color: white; } input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus { -webkit-text-fill-color: #e4e4e7; -webkit-box-shadow: 0 0 0px 1000px var(--color-surface-800) inset; transition: background-color 5000s ease-in-out 0s; } .webmail-btn { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.375rem 0.75rem; border-radius: 0.5rem; font-size: 0.8125rem; font-weight: 500; white-space: nowrap; transition: all 0.15s ease; cursor: pointer; height: 2rem; } .webmail-btn-primary { background: rgba(99, 102, 241, 0.8); color: white; border: 1px solid rgba(129, 140, 248, 0.2); } .webmail-btn-primary:hover { background: var(--color-accent-500); } .webmail-btn-ghost { background: transparent; color: #a1a1aa; border: 1px solid transparent; } .webmail-btn-ghost:hover { color: #e4e4e7; background: rgba(255, 255, 255, 0.04); } .webmail-btn-danger { background: transparent; color: #a1a1aa; border: 1px solid transparent; } .webmail-btn-danger:hover { color: var(--color-red-400); background: rgba(239, 68, 68, 0.08); } .webmail-btn-icon { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border-radius: 0.375rem; color: #71717a; transition: all 0.15s ease; cursor: pointer; } .webmail-btn-icon:hover { color: #e4e4e7; background: rgba(255, 255, 255, 0.04); } .webmail-btn-icon.danger:hover { color: var(--color-red-400); background: rgba(239, 68, 68, 0.08); } .webmail-compose-field { width: 100%; background: transparent; color: #e4e4e7; font-size: 0.875rem; outline: none; } .webmail-compose-field::placeholder { color: #52525b; } .webmail-tag-input { position: relative; } .webmail-tag-input .tags-container { display: flex; flex-wrap: wrap; gap: 0.25rem; align-items: center; flex: 1; min-width: 0; } .webmail-tag-input .tags-container > span { display: contents; } .webmail-tag { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.125rem 0.5rem; border-radius: 0.375rem; background: rgba(99, 102, 241, 0.15); color: var(--color-accent-400); font-size: 0.75rem; line-height: 20px; white-space: nowrap; max-width: 200px; } .webmail-tag .remove { display: inline-flex; cursor: pointer; color: rgba(129, 140, 248, 0.6); margin-left: 0.125rem; } .webmail-tag .remove:hover { color: var(--color-red-400); } .webmail-autocomplete { display: none; position: absolute; top: 100%; left: 0; right: 0; z-index: 60; max-height: 12rem; overflow-y: auto; border-radius: 0.5rem; border: 1px solid rgba(255, 255, 255, 0.08); background: var(--color-surface-800); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4); margin-top: 0.25rem; } .webmail-autocomplete.visible { display: block; } .webmail-autocomplete-option { display: block; width: 100%; text-align: left; padding: 0.5rem 0.75rem; cursor: pointer; transition: background 0.1s ease; } .webmail-autocomplete-option:hover { background: rgba(255, 255, 255, 0.04); } .webmail-editor { min-height: 200px; padding: 1.5rem; color: #d4d4d8; font-size: 0.875rem; line-height: 1.625; outline: none; } .webmail-editor:empty::before { content: attr(data-placeholder); color: #52525b; } .webmail-editor p { margin-bottom: 0.5rem; } .webmail-editor b, .webmail-editor strong { font-weight: 600; } .webmail-editor i, .webmail-editor em { font-style: italic; } .webmail-editor u { text-decoration: underline; } .webmail-editor ul { list-style: disc; padding-left: 1.5rem; margin-bottom: 0.5rem; } .webmail-editor ol { list-style: decimal; padding-left: 1.5rem; margin-bottom: 0.5rem; } .webmail-editor blockquote { border-left: 3px solid rgba(99, 102, 241, 0.3); padding-left: 1rem; margin-left: 0; color: #a1a1aa; margin-bottom: 0.5rem; } .webmail-editor a { color: var(--color-accent-400); text-decoration: underline; } .webmail-toolbar { display: flex; align-items: center; gap: 0.125rem; padding: 0.375rem 0.5rem; border-bottom: 1px solid rgba(255, 255, 255, 0.04); } .webmail-toolbar button { display: inline-flex; align-items: center; justify-content: center; width: 1.75rem; height: 1.75rem; border-radius: 0.25rem; color: #71717a; font-size: 0.8125rem; cursor: pointer; transition: all 0.1s ease; } .webmail-toolbar button:hover { color: #e4e4e7; background: rgba(255, 255, 255, 0.06); } .webmail-toolbar button.active { color: var(--color-accent-400); background: rgba(99, 102, 241, 0.15); } .webmail-toolbar .separator { width: 1px; height: 1rem; background: rgba(255, 255, 255, 0.06); margin: 0 0.25rem; }