diff --git a/package.json b/package.json index ed6ff19..e449155 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,53 @@ { - "name": "@web3/style-guide", - "version": "0.1.0", - "private": true, + "name": "@byteone/web3-style-guide", + "version": "0.2.0", + "description": "Shared Web3 design system: dark-mode CSS custom properties, component styles, and brand tokens.", + "keywords": ["css", "design-system", "web3", "dark-mode", "design-tokens"], + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/byteone/web3-style-guide.git" + }, + "private": false, + "publishConfig": { + "access": "public" + }, "type": "module", + "exports": { + ".": { + "import": "./src/css/web3-style.css", + "style": "./src/css/web3-style.css" + }, + "./tokens": { + "import": "./src/tokens/index.css", + "style": "./src/tokens/index.css" + }, + "./tokens/colors.css": "./src/tokens/colors.css", + "./tokens/typography.css": "./src/tokens/typography.css", + "./tokens/spacing.css": "./src/tokens/spacing.css", + "./css/base.css": "./src/css/base.css", + "./css/card.css": "./src/css/card.css", + "./css/button.css": "./src/css/button.css", + "./css/forms.css": "./src/css/forms.css", + "./css/pixel-modal.css": "./src/css/pixel-modal.css" + }, + "files": [ + "src", + "dist", + "README.md" + ], "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview", "lint": "eslint src --ext ts,tsx,css" }, - "dependencies": { - "react": "^18.3.1", - "react-dom": "^18.3.1" - }, "devDependencies": { "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "typescript": "^5.6.0", "vite": "^8.2.2" } diff --git a/src/css/pixel-modal.css b/src/css/pixel-modal.css new file mode 100644 index 0000000..be4543d --- /dev/null +++ b/src/css/pixel-modal.css @@ -0,0 +1,134 @@ + +/* ========================================================================== + Web3 Style Guide — Modal Components + ========================================================================== */ + +/* Overlay backdrop */ +.pixel-modal-backdrop { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(4, 6, 14, 0.72); + z-index: 1050; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; +} + +/* Modal window container */ +.pixel-modal { + background: rgba(12, 16, 32, 0.95); + border: 1px solid var(--glass-border-color, rgba(255, 255, 255, 0.08)); + border-radius: var(--card-radius, 12px); + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.08); + color: #fff; + width: clamp(320px, 90vw, 720px); + max-height: 85vh; + display: flex; + flex-direction: column; + overflow: hidden; +} + +@keyframes pixelModalFadeIn { + from { + opacity: 0; + transform: scale(0.96) translateY(8px); + } + to { + opacity: 1; + transform: scale(1) translateY(0); + } +} + +/* Header */ +.pixel-modal-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 20px; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); + background: rgba(255, 255, 255, 0.02); + flex-shrink: 0; +} + +.pixel-modal-title { + margin: 0; + font-size: 1.1rem; + font-weight: 600; + color: #fff; + letter-spacing: -0.01em; +} + +.pixel-modal-close { + background: transparent; + border: 0; + color: #8a96a8; + font-size: 1.25rem; + line-height: 1; + padding: 4px 8px; + border-radius: 6px; + cursor: pointer; + transition: color 0.15s ease, background 0.15s ease; +} + +.pixel-modal-close:hover { + color: #fff; + background: rgba(255, 255, 255, 0.08); +} + +/* Body / Scrollable Content */ +.pixel-modal-body { + padding: 20px; + overflow-y: auto; + flex-grow: 1; + color: #aeb6c8; + font-size: 0.92rem; + line-height: 1.5; +} + +.pixel-modal-body * { + background: transparent !important; + box-shadow: none !important; + border-color: rgba(255,255,255,0.08) !important; +} + +/* Force nested legacy content to respect token palette */ +.pixel-modal-body > *, +.pixel-modal-body :global(.card), +.pixel-modal-body :global(.raisedBoxPurple), +.pixel-modal-body :global(.card-purple) { + background: transparent !important; + border-color: rgba(255, 255, 255, 0.08) !important; + color: inherit !important; + box-shadow: none !important; +} + +.pixel-modal-body :global(.text-green), +.pixel-modal-body :global(.text-cyan) { + color: #fff !important; +} + +/* Modal-hide helper for legacy state classes */ +.modal-container { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + z-index: 1050; + background: rgba(4, 6, 14, 0.72); +} + +.modal-hide { + display: none !important; +} + +.modal-show { + display: flex !important; +} diff --git a/src/css/web3-style.css b/src/css/web3-style.css index de460a5..81ce4ec 100644 --- a/src/css/web3-style.css +++ b/src/css/web3-style.css @@ -1,10 +1,816 @@ /* ========================================================================== - Web3 Style Guide — Main Stylesheet - Re-exports all component styles in dependency order + Web3 Style Guide — Base Reset & Global Styles ========================================================================== */ -@import "../tokens/index.css"; -@import "./base.css"; -@import "./card.css"; -@import "./button.css"; -@import "./forms.css"; +@import "./web3-tokens.css"; + +:root { color: var(--color-text-primary); background: var(--color-bg-primary); font-family: var(--font-family-base); } +* { box-sizing: border-box; } +body { min-width: 320px; min-height: 100vh; margin: 0; background: radial-gradient(circle at 12% -10%, rgba(93,106,255,.2), transparent 32rem), radial-gradient(circle at 88% 0%, rgba(44,197,163,.12), transparent 30rem), var(--color-bg-primary); color: var(--color-text-primary); line-height: var(--line-height-body); } +button, input, textarea, select { font: inherit; } +button { -webkit-tap-highlight-color: transparent; } +a { color: inherit; } + +/* ========================================================================== + Header / Navigation + ========================================================================== */ + +header { + position: sticky; + top: 0; + z-index: 100; + display: flex; + align-items: center; + gap: var(--header-gap); + min-height: var(--header-height); + padding: 0; + background: rgba(12, 16, 32, 0.78); + border-bottom: 1px solid var(--color-border-subtle); + backdrop-filter: blur(18px); + width: 100%; + box-sizing: border-box; + transition: transform .35s ease; +} + +header.hide-on-scroll { + transform: translateY(-100%); +} + +header .navbar-brand { + flex: 0 0 auto; + margin: 0; + color: var(--color-text-heading); + font-size: 1.05rem; + font-weight: var(--font-weight-heading); + letter-spacing: var(--letter-spacing-logo); + text-decoration: none; +} + +.pixel-nav { + display: flex; + align-items: center; + gap: 4px; + list-style: none; + margin: 0; + padding: 0; +} + +.pixel-nav-right { + margin-left: auto; +} + + + +.pixel-nav-link { + padding: 8px 10px; + border-radius: 7px; + color: #aeb6c8; + font-size: var(--font-size-base); + font-weight: var(--font-weight-medium); + text-decoration: none; + transition: color .18s ease, background .18s ease; + white-space: nowrap; +} + +.pixel-nav-link:hover, +.pixel-nav-link[aria-current="page"] { + background: rgba(255, 255, 255, 0.07); + color: #fff; +} + +/* ========================================================================== + Main Content Area + ========================================================================== */ + +main { + width: 100%; + margin: 0 auto; + padding: 8px var(--container-padding-x) var(--container-padding-bottom); +} + +/* Add bottom padding to prevent content from being hidden behind floating footer */ +main { + padding-bottom: 100px !important; +} + +header .navbar-toggler { + display: none; + flex-direction: column; + justify-content: center; + gap: 5px; + padding: 6px; + background: transparent; + border: 0; + cursor: pointer; + margin-left: auto; + z-index: 2; +} + +.navbar-toggler-bar { + display: block; + width: 24px; + height: 2px; + background: #aeb6c8; + border-radius: 2px; +} + +@media (max-width: 760px) { + header .navbar-toggler { display: flex; } + .navbar-collapse { display: none !important; } + .navbar-collapse.show { display: flex !important; flex-direction: column; align-items: flex-end; gap: 6px; padding: 16px 5vw; } + .navbar-collapse.show .pixel-nav, + .navbar-collapse.show .pixel-nav-right { flex-direction: column; align-items: flex-end; } +} +/* ========================================================================== + Web3 Style Guide — Card Component (.pixel-card) + ========================================================================== */ + +.pixel-card { + margin-bottom: var(--card-gap); + padding: var(--card-padding); + overflow: hidden; + border: 1px solid var(--color-border-subtle); + border-radius: var(--card-radius); + background: var(--color-bg-secondary); + box-shadow: 0 18px 45px rgba(0, 0, 0, 0.16); +} + +.pixel-card > :first-child { margin-top: 0; } +.pixel-card > :last-child { margin-bottom: 0; } + +.pixel-card h2 { + margin: 0 0 8px; + color: var(--color-text-heading); + font-size: var(--font-size-xl); + letter-spacing: var(--letter-spacing-tight); + line-height: var(--line-height-tight); +} + +.pixel-card h3 { + margin: 28px 0 9px; + color: var(--color-text-subheading); + font-size: var(--font-size-lg); + letter-spacing: var(--letter-spacing-normal); +} + +.pixel-card p { color: var(--color-text-body); } +.pixel-card strong { color: var(--color-text-strong); } +.pixel-card ul { margin: 16px 0 0; padding-left: 20px; color: var(--color-text-body); } +.pixel-card li + li { margin-top: 8px; } +.pixel-card label { display: grid; gap: 7px; margin-top: 18px; color: #dbe0eb; font-size: .9rem; font-weight: var(--font-weight-semibold); } + +/* Inputs inside cards */ +.pixel-card input, +.pixel-card textarea, +.pixel-card select { + width: 100%; + min-height: var(--input-min-height); + padding: var(--input-padding); + border: 1px solid var(--color-border-input); + border-radius: var(--input-radius); + outline: 0; + background: var(--color-bg-input); + color: var(--color-text-input); + transition: border-color .18s ease, box-shadow .18s ease; +} + +.pixel-card textarea { min-height: var(--input-textarea-height); resize: vertical; } +.pixel-card input::placeholder, +.pixel-card textarea::placeholder { color: var(--color-text-placeholder); } + +.pixel-card input:focus, +.pixel-card textarea:focus, +.pixel-card select:focus { + border-color: var(--color-accent-blue); + box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring-color); +} + +.pixel-card small { color: var(--color-text-muted); font-size: var(--font-size-xs); font-weight: var(--font-weight-regular); line-height: var(--line-height-code); } +.pixel-card code { padding: 2px 5px; border-radius: 4px; background: rgba(255, 255, 255, 0.07); color: var(--color-text-code); font-family: var(--font-family-mono); font-size: 0.82em; } + +/* Card with link list (dashboard style) */ +.pixel-card > ul:has(li a) { display: grid; gap: 8px; padding: 0; list-style: none; } +.pixel-card > ul:has(li a) li { margin: 0; border: 1px solid var(--color-border-subtle); border-radius: 9px; background: var(--color-bg-elevated); } +.pixel-card > ul:has(li a) a { display: block; padding: 13px 14px; color: #e8ecff; font-weight: var(--font-weight-semibold); text-decoration: none; } +.pixel-card > ul:has(li a) li:hover { border-color: var(--color-accent-blue-border); } + +/* Responsive */ +@media (max-width: 760px) { + .pixel-card { border-radius: var(--card-border-radius-mobile); } +} +/* ========================================================================== + Web3 Style Guide — Button Component (.pixel-btn) + ========================================================================== */ + +.pixel-btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: var(--btn-min-height); + padding: var(--btn-padding-y) var(--btn-padding-x); + border: 1px solid var(--color-accent-blue); + border-radius: var(--btn-radius); + background: var(--color-accent-blue); + color: #fff; + cursor: pointer; + font-size: var(--font-size-base); + font-weight: var(--font-weight-bold); + line-height: 1; + transition: transform .15s ease, background .15s ease, border-color .15s ease, opacity .15s ease; +} + +.pixel-btn:hover:not(:disabled) { + border-color: var(--color-accent-blue-hover); + background: var(--color-accent-blue-hover); + transform: translateY(-1px); +} + +.pixel-btn:active:not(:disabled) { transform: translateY(0); } +.pixel-btn:disabled { cursor: not-allowed; opacity: 0.45; } + +/* When nested in a form-group, align to start */ +.form-group .pixel-btn { justify-self: start; } +/* ========================================================================== + Web3 Style Guide — Form Components + ========================================================================== */ + +/* Form group wrapper */ +.form-group { display: grid; gap: 14px; margin-top: 20px; } + +/* Error / Status messages */ +.form-error, +.form-status { margin: 0; padding: 10px 12px; border-radius: var(--input-radius); font-size: var(--font-size-base); } +.form-error { background: var(--color-error-bg); color: var(--color-error) !important; } +.form-status { background: var(--color-success-bg); color: var(--color-success) !important; } + +/* Floating Footer */ +.floating-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 100; + padding: var(--footer-padding); + background: rgba(12, 16, 32, 0.85); + backdrop-filter: blur(18px); + -webkit-backdrop-filter: blur(18px); + border-top: 1px solid var(--color-border-subtle); + box-shadow: 0 -8px 32px rgba(0, 0, 0, 0.3); +} + +.footer-content { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + max-width: var(--container-max-width); + margin: 0 auto; +} + +.footer-copyright { + color: var(--color-text-muted); + font-size: var(--font-size-sm); + font-weight: var(--font-weight-medium); + letter-spacing: var(--letter-spacing-micro); +} + +.footer-language { display: flex; align-items: center; gap: 8px; } +.footer-language-label { color: var(--color-text-muted); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } + +.footer-language-select { + min-height: 36px; + padding: 6px 10px; + border: 1px solid var(--color-border-input); + border-radius: var(--input-radius); + background: var(--color-bg-input); + color: var(--color-text-input); + font-size: var(--font-size-sm); + font-weight: var(--font-weight-medium); + cursor: pointer; + outline: none; + transition: border-color .18s ease, box-shadow .18s ease; +} + +.footer-language-select:hover { border-color: var(--color-accent-blue-border); } +.footer-language-select:focus { border-color: var(--color-accent-blue); box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring-color); } +.footer-language-select option { background: var(--color-bg-primary); color: var(--color-text-input); } + +/* Responsive footer */ +@media (max-width: 760px) { + .floating-footer { padding: 10px 20px; } + .footer-content { flex-direction: column; gap: 8px; text-align: center; } + main { padding-bottom: 120px !important; } +} + +/* Treasury Balance Grid */ +.treasury-balance-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 24px; } +.treasury-balance { display: grid; gap: 7px; padding: 18px; border: 1px solid var(--color-border-subtle); border-radius: 10px; background: var(--color-bg-elevated); } +.treasury-balance span { color: var(--color-text-muted); font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); } +.treasury-balance strong { color: var(--color-text-heading); font-size: 1.35rem; letter-spacing: var(--letter-spacing-tight); } +.treasury-address { margin-top: 22px !important; overflow-wrap: anywhere; } + +/* Override bootstrap dropdown styles inside nav when used */ +.navbar-nav .dropdown-menu { + background: var(--color-bg-elevated) !important; + border: 1px solid var(--color-border-subtle) !important; + border-radius: 10px !important; + box-shadow: 0 18px 45px rgba(0,0,0,.25) !important; + padding: 8px !important; + margin-top: 6px !important; +} +.navbar-nav .dropdown-item { + border-radius: 8px !important; + color: #e8ecff !important; + font-weight: var(--font-weight-semibold) !important; +} +.navbar-nav .dropdown-item:hover, +.navbar-nav .dropdown-item:focus { + background: rgba(255,255,255,0.07) !important; +} +.navbar-nav .dropdown-toggle::after { + margin-left: 8px; +} + +/* Custom dropdown (non-Bootstrap) */ +.nav-dropdown { + position: relative; + display: inline-flex; + align-items: center; +} + +.nav-dropdown-toggle { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 8px 10px; + border-radius: 7px; + color: #aeb6c8; + font-size: var(--font-size-base); + font-weight: var(--font-weight-medium); + text-decoration: none; + cursor: pointer; + background: transparent; + border: 0; + font-family: inherit; + line-height: inherit; + transition: color .18s ease, background .18s ease; +} + +.nav-dropdown-toggle:hover, +.nav-dropdown.open .nav-dropdown-toggle, +.nav-dropdown-toggle[aria-expanded="true"] { + background: rgba(255,255,255,0.07); + color: #fff; +} + +.nav-dropdown-toggle::after { + content: ""; + display: inline-block; + width: 0; + height: 0; + margin-left: 6px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid currentColor; + vertical-align: middle; +} + +.nav-dropdown-menu { + position: absolute; + top: calc(100% + 6px); + left: 0; + min-width: 210px; + padding: 8px; + border: 1px solid var(--color-border-subtle); + border-radius: 10px; + background: rgba(6, 10, 22, 0.96); + backdrop-filter: blur(18px); + box-shadow: 0 18px 45px rgba(0,0,0,.42); + opacity: 0; + transform: translateY(-4px); + pointer-events: none; + transition: opacity .18s ease, transform .18s ease; + z-index: 60; +} + +.nav-dropdown.open .nav-dropdown-menu { + opacity: 1 !important; + transform: translateY(0); + pointer-events: auto; +} + +.nav-dropdown-item { + display: block; + width: 100%; + padding: 6px 12px; + border-radius: 8px; + color: #e8ecff; + font-size: .9rem; + font-weight: var(--font-weight-semibold); + text-decoration: none; + background: transparent; + border: 0; + text-align: left; + cursor: pointer; + transition: background .18s ease; +} + +.nav-dropdown-item:hover { + background: rgba(255,255,255,0.07); +} + +/* ========================================================================== + Breadcrumb — web3-style + ========================================================================== */ + +.breadcrumb-bar { + display: flex; + align-items: center; + justify-content: flex-start; + width: 100%; + min-height: 1.8em; + padding: 2px 16px; + background: rgba(12, 16, 32, 0.75); + border: 1px solid var(--color-border-subtle); + border-radius: 12px; + backdrop-filter: blur(18px); +} + +.breadcrumb-content { + display: flex; + align-items: center; + gap: 10px; +} + +.breadcrumb-logo { + display: none; +} + +.breadcrumb-icon { + height: 14px; + border-radius: 50%; +} + +.breadcrumb-nav { + display: flex; + align-items: center; + gap: 6px; + color: #e7eaf1; + font-size: 0.82rem; + font-weight: 500; +} + +.breadcrumb-sep { + color: #6f8bff; + font-size: 0.75rem; + margin: 0 2px; +} + +/* No-mask variant — overlay on dark cards */ +.breadcrumb-nomask { + position: relative; + display: flex; + align-items: center; + justify-content: space-between; + background: rgba(12, 16, 32, 0.75); + border: 1px solid var(--color-border-subtle); + border-radius: 12px; + backdrop-filter: blur(18px); +} + +.breadcrumb-nomask-content { + display: flex; + flex-direction: column; + gap: 6px; +} + +.breadcrumb-nomask-title { + margin: 0; + color: #fff; + font-size: 1.3rem; + font-weight: 700; + text-shadow: 0 1px 4px rgba(0,0,0,0.5); +} + +.breadcrumb-nomask-trail { + display: flex; + align-items: center; + gap: 8px; + color: #aeb6c8; + font-size: 0.85rem; + font-weight: 600; + text-shadow: 0 1px 2px rgba(0,0,0,0.4); +} + +.breadcrumb-nomask-badge { + flex-shrink: 0; +} + +.breadcrumb-nomask-badge img { + max-height: 64px; + max-width: 64px; + border: 2px solid rgba(255,255,255,0.15); + border-radius: 14px; + background: var(--color-bg-elevated); +} + +/* BreadcrumbSimple */ +.breadcrumb-simple { + display: flex; + align-items: center; + gap: 12px; + background: rgba(12, 16, 32, 0.75); + border: 1px solid var(--color-border-subtle); + border-radius: 12px; + backdrop-filter: blur(18px); +} + +.breadcrumb-simple h2 { + margin: 0; + color: #fff; + font-size: 1.2rem; + font-weight: 700; +} + +/* BreadcrumbModal */ +.breadcrumb-modal { + margin: 16px 5vw 0; + padding: 14px 20px; + background: rgba(12, 16, 32, 0.75); + border: 1px solid var(--color-border-subtle); + border-radius: 12px; + backdrop-filter: blur(18px); +} + +.breadcrumb-modal h2 { + margin: 0; + color: #fff; + font-size: 1rem; + font-weight: 600; +} + +/* ========================================================================== + SecCollectionList — Collection cards + ========================================================================== */ + +.pixel-collection-card { + background: var(--color-bg-secondary); + border: 1px solid var(--color-border-subtle); + border-radius: var(--card-radius); + overflow: visible; + box-shadow: 0 18px 45px rgba(0,0,0,.16); + transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease; + position: relative; +} + +.pixel-collection-card:hover { + transform: translateY(-4px); + border-color: var(--color-accent-blue-border); + box-shadow: 0 22px 55px rgba(0,0,0,.25); +} + +.pixel-collection-image { + position: relative; + width: 100%; + aspect-ratio: 4/4; + overflow: hidden; + background-image: linear-gradient(135deg, rgba(12,16,32,.9), rgba(21,27,48,.9)); + background-size: cover; + border-radius: var(--card-radius) var(--card-radius) 0 0; +} + +.pixel-collection-image.is-failed { + background: linear-gradient(270deg, rgba(18,22,40,0.85), rgba(30,38,64,0.85), rgba(18,22,40,0.85)); + background-size: 400% 400%; + animation: pixel-collection-shimmer 3.6s ease infinite; +} + +.pixel-collection-placeholder.is-delayed { + background: linear-gradient(270deg, rgba(12,16,32,0.7), rgba(18,24,48,0.7), rgba(12,16,32,0.7)); + background-size: 300% 300%; + animation: pixel-collection-shimmer 2.5s ease infinite; + border-radius: 8px; +} + +.pixel-collection-placeholder { + width: 100%; + aspect-ratio: 4/4; + display: block; + background: rgba(12,16,32,0.35); +} + +@keyframes pixel-collection-shimmer { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +.pixel-collection-link { + display: block; + text-decoration: none; +} + +.pixel-collection-img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: transform .35s ease; +} + +.pixel-collection-card:hover .pixel-collection-img { + transform: scale(1.04); +} + +.pixel-owner-icon { + position: absolute; + top: 10px; + right: 10px; + width: 36px; + height: 36px; + border-radius: 50%; + border: 2px solid var(--color-border-subtle); + background: var(--color-bg-elevated); + padding: 0; + overflow: hidden; + display: inline-flex; + align-items: center; + justify-content: center; + box-shadow: 0 8px 20px rgba(0,0,0,.25); + transition: border-color .2s ease; +} + +.pixel-owner-icon:hover { + border-color: var(--color-accent-blue-border); +} + +.pixel-owner-icon img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.pixel-collection-body { + padding: 18px 16px 12px; + background: rgba(14, 18, 36, 0.85); + border-bottom-left-radius: var(--card-radius); + border-bottom-right-radius: var(--card-radius); +} + +.pixel-collection-name { + margin: 0 0 2px; + color: var(--color-text-body); + font-size: 0.8rem; + font-weight: var(--font-weight-medium); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.pixel-collection-symbol { + margin: 0; + color: var(--color-text-heading); + font-size: 0.9rem; + font-weight: var(--font-weight-semibold); + line-height: 1.3; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + transition: color .18s ease; +} + +.pixel-collection-link:hover .pixel-collection-symbol { + color: #fff; +} + +@media (max-width: 760px) { + .fix-cards { + --bs-gutter-x: 12px; + } +} + +/* ========================================================================== + SearchFilterBar web3 styles + ========================================================================== */ + +.search-filter-dropdown { + position: relative; + display: inline-flex; + align-items: center; +} + +.search-filter-dropdown-toggle { + position: relative; + padding: 6px 28px 6px 10px; + border-radius: 8px; + background: transparent; + border: 1px solid rgba(255,255,255,0.08); + color: #e8ecff; + font-size: var(--font-size-base); + font-weight: var(--font-weight-medium); + font-family: inherit; + cursor: pointer; + line-height: inherit; + transition: color .18s ease, background .18s ease, border-color .18s ease; + white-space: nowrap; + min-width: max-content; + box-sizing: border-box; + width: max-content; +} + +.search-filter-dropdown-toggle::after { + content: ""; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid currentColor; + pointer-events: none; +} + +.search-filter-dropdown-menu { + position: absolute; + top: calc(100% + 6px); + left: 0; + min-width: 210px; + padding: 8px; + border: 1px solid var(--color-border-subtle); + border-radius: 10px; + background: rgba(6, 10, 22, 0.96); + box-shadow: 0 18px 45px rgba(0,0,0,.42); + z-index: 60; + transition: opacity .18s ease, transform .18s ease; +} + +.search-filter-dropdown-item { + display: block; + width: 100%; + text-align: left; + padding: 6px 12px; + border-radius: 8px; + background: transparent; + border: 0; + color: #e8ecff; + font-size: .9rem; + font-weight: var(--font-weight-semibold); + cursor: pointer; + text-decoration: none; + transition: background .18s ease; + line-height: 1.25; +} + +.search-filter-dropdown-item:hover { + background: rgba(255,255,255,0.07); +} + +/* Prevent collapse when container is empty */ +.search-filter-dropdown { + min-height: 36px; +} + + + + +.volume-tab { + appearance: none; + border: 0; + background: transparent; + color: #aeb6c8; + font-size: 0.78rem; + font-weight: 500; + padding: 2px 8px; + border-radius: 6px; + cursor: pointer; + line-height: 1.25; + transition: background .18s ease, color .18s ease; +} +.volume-tab:hover { + background: rgba(255,255,255,0.06); + color: #fff; +} +.volume-tab[aria-pressed="true"] { + background: rgba(255,255,255,0.08); + color: #fff; +} + +/* Sign-in / form inputs */ +.pixel-input { + width: 100%; + padding: 10px 12px; + border-radius: var(--card-radius, 12px); + background: rgba(12, 16, 32, 0.75); + border: 1px solid rgba(255, 255, 255, 0.08); + color: #fff; + font-size: var(--font-size-base, 0.95rem); + line-height: 1.5; + outline: none; + transition: border-color .18s ease, box-shadow .18s ease; +} +.pixel-input:focus { + border-color: rgba(111,139,255,0.5); + box-shadow: 0 0 0 3px rgba(111,139,255,0.12); +}