diff --git a/components/CameraScannerView.js b/components/CameraScannerView.js index 576a6a7..0ff38a1 100644 --- a/components/CameraScannerView.js +++ b/components/CameraScannerView.js @@ -205,8 +205,7 @@ export default function CameraScannerView({ {isStreaming && (
{card.oracle_text && ( -
+

{card.oracle_text}

)} @@ -350,7 +350,7 @@ export default function CardDetailView(props) { {/* Price Graph Placeholder */} -
+

Price Trend

@@ -364,11 +364,7 @@ export default function CardDetailView(props) { {/* Price Statistics Cards */}
{/* Current Price */} -
+
πŸ’°
@@ -393,11 +389,7 @@ export default function CardDetailView(props) { href={`https://www.tcgplayer.com/search/${card.game.toLowerCase()}/product?productName=${encodeURIComponent(card.name)}`} target="_blank" rel="noopener noreferrer" - className="p-6 rounded-xl border transition-all duration-200 hover:shadow-lg hover:scale-105" - style={{ - backgroundColor: 'var(--bg-secondary)', - borderColor: 'var(--border)' - }} + className="glass-panel p-6 rounded-xl transition-all duration-200 hover:shadow-lg hover:scale-105" >
πŸƒ @@ -415,11 +407,7 @@ export default function CardDetailView(props) { href={`https://www.ebay.com/sch/i.html?_nkw=${encodeURIComponent(card.name + ' ' + card.game)}`} target="_blank" rel="noopener noreferrer" - className="p-6 rounded-xl border transition-all duration-200 hover:shadow-lg hover:scale-105" - style={{ - backgroundColor: 'var(--bg-secondary)', - borderColor: 'var(--border)' - }} + className="glass-panel p-6 rounded-xl transition-all duration-200 hover:shadow-lg hover:scale-105" >
πŸ›’ diff --git a/components/CardEditorForm.js b/components/CardEditorForm.js index 50e074a..0e434af 100644 --- a/components/CardEditorForm.js +++ b/components/CardEditorForm.js @@ -1,4 +1,4 @@ -/* eslint-disable @next/next/no-img-element -- External card image URLs; next/image migration is out of scope. */ +import { Button } from './ui'; const RARITY_OPTIONS = [ 'common', 'uncommon', 'rare', 'mythic', 'legendary', @@ -23,17 +23,15 @@ export default function CardEditorForm({

Edit Card Details

- +
{message && ( @@ -48,7 +46,7 @@ export default function CardEditorForm({
{/* Basic Information */} -
+

Basic Information

@@ -161,7 +159,7 @@ export default function CardEditorForm({
{/* Game Mechanics */} -
+

Game Mechanics

@@ -274,7 +272,7 @@ export default function CardEditorForm({
{/* Card Text */} -
+

Card Text

@@ -298,7 +296,7 @@ export default function CardEditorForm({
{/* Images */} -
+

Card Images

@@ -341,7 +339,7 @@ export default function CardEditorForm({
{/* Pricing */} -
+

Pricing Information

diff --git a/components/CardEditorPreview.js b/components/CardEditorPreview.js index 96475db..7c33c20 100644 --- a/components/CardEditorPreview.js +++ b/components/CardEditorPreview.js @@ -6,7 +6,7 @@ export default function CardEditorPreview({ formData }) {

Card Preview

-
+
-

+
+

Find Card to Edit

- onSearchQueryChange(e.target.value)} - className="w-full p-3 rounded-lg border transition-all duration-200" - style={{ - backgroundColor: 'var(--bg-primary)', - borderColor: 'var(--border)', - color: 'var(--text-primary)', - }} + onClear={() => onSearchQueryChange('')} + placeholder="Search for cards by name…" />
@@ -36,8 +34,8 @@ export default function CardEditorSearchPanel({ {searchLoading && (
)} @@ -45,19 +43,21 @@ export default function CardEditorSearchPanel({ {searchResults.length > 0 && (
{searchResults.map((searchCard) => ( -
onSelectCard(searchCard)} - className="p-4 rounded-lg border cursor-pointer transition-all duration-200 hover:shadow-lg hover:scale-105" + className="glass-panel p-4 rounded-lg cursor-pointer text-left hover:scale-[1.02] focus:outline-none focus-visible:ring-2" style={{ - backgroundColor: 'var(--bg-primary)', - borderColor: 'var(--border)', + transition: + 'transform var(--motion-duration-default) var(--motion-ease-out), box-shadow var(--motion-duration-default) var(--motion-ease-out)', + '--tw-ring-color': 'var(--accent-ember)', }} >
{searchCard.image_url ? (
-

+

{searchCard.name}

@@ -86,7 +89,7 @@ export default function CardEditorSearchPanel({

-
+ ))}
)} diff --git a/components/CardEditorView.js b/components/CardEditorView.js index de3f8a2..469adb5 100644 --- a/components/CardEditorView.js +++ b/components/CardEditorView.js @@ -1,6 +1,7 @@ import CardEditorForm from './CardEditorForm'; import CardEditorPreview from './CardEditorPreview'; import CardEditorSearchPanel from './CardEditorSearchPanel'; +import { Button } from './ui'; export default function CardEditorView({ card, @@ -20,31 +21,26 @@ export default function CardEditorView({ }) { return (
-
+

Admin Tools

- - + Card Import +
@@ -86,7 +82,7 @@ export default function CardEditorView({ {showEmptyState && (
-
πŸ”
+

Search for a Card to Edit

diff --git a/components/CardsPageView.js b/components/CardsPageView.js index 20d4276..4d8b4c9 100644 --- a/components/CardsPageView.js +++ b/components/CardsPageView.js @@ -97,7 +97,7 @@ export default function CardsPageView(props) {
{/* Quick Filters */} -
+

Quick Filters diff --git a/components/CollectionsPageView.js b/components/CollectionsPageView.js index 3ce9fb9..e74c79a 100644 --- a/components/CollectionsPageView.js +++ b/components/CollectionsPageView.js @@ -71,7 +71,7 @@ export default function CollectionsPageView(props) {

-
+
{roleInfo.icon} {roleInfo.label} Permissions: @@ -118,8 +117,7 @@ export default function PermissionIndicator({ userRole, isPublic, showTooltip = {/* Visibility Tooltip */} {showDetails && showTooltip && (
{visibilityInfo.icon} {visibilityInfo.label} diff --git a/components/ScanDisambiguationDialog.js b/components/ScanDisambiguationDialog.js index 4a499c5..b6d72ac 100644 --- a/components/ScanDisambiguationDialog.js +++ b/components/ScanDisambiguationDialog.js @@ -19,8 +19,7 @@ export default function ScanDisambiguationDialog({
) : ( -
πŸƒ
+
πŸƒ
)}
{candidate.name}
diff --git a/components/ScannedCardItem.js b/components/ScannedCardItem.js index c5dd3d2..c70071a 100644 --- a/components/ScannedCardItem.js +++ b/components/ScannedCardItem.js @@ -61,8 +61,7 @@ export default function ScannedCardItem({ }} >
-
+
{card.image_url ? ( {card.name} ) : ( diff --git a/components/ScannerDestinationPicker.js b/components/ScannerDestinationPicker.js index 0d5ece5..dc234d9 100644 --- a/components/ScannerDestinationPicker.js +++ b/components/ScannerDestinationPicker.js @@ -83,8 +83,7 @@ export default function ScannerDestinationPicker({ return (
diff --git a/components/ScannerPageView.js b/components/ScannerPageView.js index 597fd75..3559730 100644 --- a/components/ScannerPageView.js +++ b/components/ScannerPageView.js @@ -55,8 +55,7 @@ export default function ScannerPageView({ )}

@@ -99,8 +98,7 @@ export default function ScannerPageView({

@@ -126,8 +124,7 @@ export default function ScannerPageView({

@@ -196,14 +193,9 @@ export default function ScannerPageView({ {queue.selectedCards.size > 0 && (
{ const router = useRouter(); @@ -128,29 +129,26 @@ const CardImport = () => {
{/* Admin Navigation */} -
+

Admin Tools

- - + Card Import +
@@ -166,7 +164,7 @@ const CardImport = () => {
{/* Catalog sync */} -
+

@@ -177,18 +175,16 @@ const CardImport = () => { Pending scan submissions for those sets are auto-linked to the catalog when a unique match exists.

- +
{syncResult && ( @@ -265,7 +261,7 @@ const CardImport = () => {
{/* Import Form */}
-
+

Import Settings

@@ -301,17 +297,16 @@ const CardImport = () => {

- +
@@ -343,7 +338,7 @@ const CardImport = () => { {/* Popular Sets */}
-
+

Popular Sets

@@ -402,7 +397,7 @@ const CardImport = () => {
{/* Import Tips */} -
+

Import Tips

diff --git a/pages/admin/card-submissions.js b/pages/admin/card-submissions.js index 2d23587..b02d39f 100644 --- a/pages/admin/card-submissions.js +++ b/pages/admin/card-submissions.js @@ -83,8 +83,7 @@ function CardSubmissionsAdmin() { return (
  • diff --git a/pages/dashboard.js b/pages/dashboard.js index 6ec1f65..c05274b 100644 --- a/pages/dashboard.js +++ b/pages/dashboard.js @@ -118,7 +118,7 @@ export default function Dashboard() {
    {/* Stats Cards */}
    -
    +
    @@ -132,7 +132,7 @@ export default function Dashboard() {
    -
    +
    @@ -148,7 +148,7 @@ export default function Dashboard() {
    -
    +
    @@ -170,7 +170,7 @@ export default function Dashboard() {

    Recent Lists

    {collections.length === 0 ? (
    -
    +
    @@ -189,7 +189,7 @@ export default function Dashboard() {
    {collections.slice(0, 6).map((collection) => ( -
    +
    diff --git a/pages/my-cards.js b/pages/my-cards.js index 66139b5..03fc940 100644 --- a/pages/my-cards.js +++ b/pages/my-cards.js @@ -432,7 +432,7 @@ export default function MyCards() { {/* No Cards Found */} {cards.length === 0 && !loading && (
    -
    +
    diff --git a/pages/settings.js b/pages/settings.js index c1cfe72..f6cdff3 100644 --- a/pages/settings.js +++ b/pages/settings.js @@ -431,7 +431,7 @@ export default function Settings() {

    Two-Factor Authentication

    -
    +

    Enable 2FA @@ -544,7 +544,7 @@ export default function Settings() {

    {/* Email Notifications */} -
    +

    Email Notifications @@ -568,7 +568,7 @@ export default function Settings() {

    {/* Marketing Emails */} -
    +

    Marketing Emails diff --git a/styles/globals.css b/styles/globals.css index a1b9888..51c1b72 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -426,6 +426,35 @@ body { border: 1px solid var(--border); } +/* ============================================================ + .glass-panel β€” canonical "content card" utility for body + surfaces on authenticated pages. The Liquid Glass recipe in + class form so pages can apply it without importing the + primitive for every flat container. Added by + glass-body-panels PR after PR #96 left admin/settings/dashboard + body cards on solid --bg-secondary. + + Composition matches . Always pair with rounded-* + from Tailwind (the class itself doesn't set border-radius + because consumers vary between rounded-xl and rounded-2xl). + ============================================================ */ +.glass-panel { + background-color: var(--glass-surface-mid); + backdrop-filter: blur(var(--glass-blur-mid)) saturate(var(--glass-saturate)); + -webkit-backdrop-filter: blur(var(--glass-blur-mid)) saturate(var(--glass-saturate)); + border: 1px solid var(--rim-light-outer); + box-shadow: var(--elevation-ambient), inset 0 1px 0 var(--rim-light-inner); +} + +.glass-panel-strong { + background-color: var(--glass-surface-high); + backdrop-filter: blur(var(--glass-blur-high)) saturate(var(--glass-saturate)); + -webkit-backdrop-filter: blur(var(--glass-blur-high)) saturate(var(--glass-saturate)); + border: 1px solid var(--rim-light-outer); + box-shadow: var(--elevation-pronounced), inset 0 1px 0 var(--rim-light-inner); +} + /* Gradient text effects β€” Deck Hearth warm palette only. The pre-Deck-Hearth aliases (.glow-blue / .glow-purple / .glow-pink, .gradient-text-blue / .gradient-text-purple, .gradient-bg-purple)