@import url('./common/modal.css'); @import url('./common/advancedAnimation.css'); /* Page Container */ .picbeds-page { position: relative; overflow: hidden auto; min-height: 100vh; background: var(--color-background-secondary); } @keyframes ambient-drift { 0%, 100% { transform: translate(0, 0) rotate(0deg); } 33% { transform: translate(2%, -1%) rotate(1deg); } 66% { transform: translate(-1%, 2%) rotate(-0.5deg); } } /* Main Container */ .page-container { position: relative; z-index: 1; display: flex; margin: 0 auto; padding: 2rem; max-width: 1000px; flex-direction: column; gap: 1.5rem; } .page-header { display: flex; justify-content: space-between; align-items: center; border: 1px solid var(--color-border-secondary); border-radius: var(--radius-2xl); padding: 1.5rem 2rem; background: var(--color-background-secondary); box-shadow: var(--shadow-md); flex-wrap: wrap; gap: 1.5rem; } .header-content { display: flex; align-items: center; gap: 1rem; } .header-icon { display: flex; justify-content: center; align-items: center; border-radius: var(--radius-xl); width: 56px; height: 56px; color: var(--color-accent); } .header-text { display: flex; flex-direction: column; gap: 0.25rem; } .title-row { display: flex; align-items: center; gap: 0.75rem; } .page-title { margin: 0; font-size: 1.5rem; font-weight: 700; color: var(--color-text-primary); letter-spacing: -0.025em; } .page-subtitle { margin: 0; font-size: 0.875rem; color: var(--color-text-secondary); } .doc-link-btn { display: inline-flex; align-items: center; border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.375rem 0.75rem; font-size: 0.75rem; font-weight: 500; color: var(--color-accent); background: var(--color-background-secondary); transition: all 0.2s ease; gap: 0.375rem; cursor: pointer; } .doc-link-btn:hover { border-color: var(--color-accent); background: var(--color-background-secondary); transform: translateY(-1px); } .header-actions { display: flex; gap: 0.75rem; } .btn { position: relative; display: inline-flex; justify-content: center; align-items: center; overflow: hidden; border: none; border-radius: var(--radius-lg); padding: 0.5rem 1rem; font-size: 0.875rem; font-family: inherit; font-weight: 600; transition: all var(--transition-medium); gap: 0.5rem; cursor: pointer; } .btn-secondary { color: var(--color-text-primary); background: var(--color-background-secondary); box-shadow: var(--shadow-sm); } .btn-secondary:hover { background: var(--color-surface); transform: translateY(-2px); box-shadow: var(--shadow-md); } .btn-outline { border: 1px solid var(--color-border); color: var(--color-text-secondary); background: transparent; } .btn-outline:hover { border-color: var(--color-accent); color: var(--color-text-primary); background: var(--color-background-tertiary); transform: translateY(-1px); } .btn-success { color: white; background: var(--color-success); box-shadow: var(--shadow-sm); } .btn-success:hover { transform: translateY(-2px); box-shadow: var(--shadow-sm); } .btn-warning { color: white; background: var(--color-warning); box-shadow: var(--shadow-sm); } .btn-warning:hover { transform: translateY(-2px); box-shadow: var(--shadow-sm); } .btn-glow::before { position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent 0%, rgb(255 255 255 / 20%) 50%, transparent 100%); transition: left 0.5s ease; content: ''; } .btn-glow:hover::before { left: 100%; } .main-content { flex: 1; } /* Config Card */ .config-card { overflow: hidden; border: 1px solid var(--color-border-secondary); border-radius: var(--radius-2xl); background: var(--color-background-secondary); box-shadow: 0 4px 24px rgb(0 0 0 / 6%), 0 1px 2px rgb(0 0 0 / 4%); animation: card-enter var(--transition-slow); } @keyframes card-enter { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .card-header { display: flex; align-items: center; border-bottom: 1px solid var(--color-border-secondary); padding: 1.25rem 1.5rem; background: var(--color-background-secondary); gap: 0.75rem; } .card-header-icon { display: flex; justify-content: center; align-items: center; border-radius: var(--radius-lg); width: 36px; height: 36px; color: var(--color-accent); background: color-mix(in srgb, var(--color-accent), transparent 90%); } .card-title { margin: 0; font-size: 1rem; font-weight: 600; color: var(--color-text-primary); } .card-body { padding: 1.5rem; } /* Action Buttons */ .action-buttons { display: flex; margin-top: 2rem; border-top: 1px solid var(--color-border-secondary); padding-top: 1.5rem; gap: 0.75rem; flex-wrap: wrap; } .dropdown-wrapper { position: relative; } .dropdown-trigger { position: relative; } .dropdown-chevron { margin-left: 0.25rem; transition: transform 0.2s ease; } .dropdown-chevron.rotated { transform: rotate(180deg); } .dropdown-menu { position: absolute; right: 0; bottom: calc(100% + 8px); z-index: 1000; overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-xl); min-width: 220px; background: var(--color-surface); box-shadow: 0 -12px 40px rgb(0 0 0 / 15%), 0 -4px 12px rgb(0 0 0 / 8%); } .dropdown-header { padding: 0.75rem 1rem; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; color: var(--color-text-tertiary); background: var(--color-background-tertiary); letter-spacing: 0.05em; } .dropdown-items { overflow-y: auto; max-height: 250px; } .dropdown-item { display: flex; align-items: center; border: none; padding: 0.75rem 1rem; width: 100%; font-size: 0.875rem; text-align: left; color: var(--color-text-primary); background: var(--color-background-tertiary); transition: all 0.15s ease; gap: 0.625rem; cursor: pointer; } .dropdown-item:hover { color: var(--color-accent); } .dropdown-item svg { color: var(--color-text-tertiary); transition: color 0.15s ease; } .dropdown-item:hover svg { color: var(--color-accent); } /* Dropdown Transition */ .dropdown-enter-active, .dropdown-leave-active { transition: all var(--transition-fast); } .dropdown-enter-from, .dropdown-leave-to { opacity: 0; transform: translateY(8px) scale(0.95); } .empty-state-card { overflow: hidden; border: 1px solid var(--color-border-secondary); border-radius: var(--radius-2xl); background: var(--color-surface); box-shadow: 0 4px 24px rgb(0 0 0 / 6%); animation: card-enter var(--transition-slow); } .empty-state { padding: 4rem 2rem; text-align: center; } .empty-icon-wrapper { display: inline-flex; justify-content: center; align-items: center; margin-bottom: 1.5rem; border: 2px dashed var(--color-border); border-radius: var(--radius-2xl); width: 96px; height: 96px; color: var(--color-text-tertiary); background: var(--color-surface-elevated); } .empty-title { margin: 0 0 0.5rem; font-size: 1.25rem; font-weight: 600; color: var(--color-text-primary); } .empty-description { margin: 0; font-size: 0.9rem; color: var(--color-text-secondary); } .loading-overlay { position: fixed; inset: 0; z-index: 2000; display: flex; justify-content: center; align-items: center; background: rgb(0 0 0 / 60%); } .loading-content { display: flex; flex-direction: column; align-items: center; gap: 1.25rem; } .loading-spinner { position: relative; display: flex; justify-content: center; align-items: center; width: 64px; height: 64px; } .spinner-ring { position: absolute; inset: 0; border: 3px solid rgb(255 255 255 / 15%); border-top-color: white; border-radius: var(--radius-round); animation: spin 1s linear infinite; } .spinner-icon { color: white; animation: pulse 2s ease-in-out infinite; } @keyframes spin { to { transform: rotate(360deg); } } @keyframes pulse { 0%, 100% { opacity: 0.6; transform: scale(1); } 50% { opacity: 1; transform: scale(1.1); } } .loading-text { font-size: 0.9rem; font-weight: 500; color: white; } /* Fade Transition */ .fade-enter-active, .fade-leave-active { transition: opacity 0.3s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } @media (width <= 768px) { .page-container { padding: 1rem; gap: 1rem; } .page-header { align-items: stretch; border-radius: var(--radius-xl); padding: 1.25rem; flex-direction: column; } .header-content { justify-content: center; text-align: center; flex-direction: column; } .header-icon { width: 48px; height: 48px; } .title-row { justify-content: center; flex-wrap: wrap; } .page-title { font-size: 1.25rem; } .header-actions { justify-content: center; } .config-card { border-radius: var(--radius-xl); } .card-body { padding: 1.25rem; } .action-buttons { flex-direction: column; } .btn { justify-content: center; width: 100%; } .dropdown-menu { right: auto; left: 0; min-width: 100%; } } @media (width >= 1024px) { .page-container { padding: 2.5rem; } } .btn:focus-visible, .doc-link-btn:focus-visible, .dropdown-item:focus-visible { outline: 1px solid var(--color-accent); outline-offset: 2px; }