/* ============================================================ GLASSGRID — COMPONENT VISUAL STYLES Visual rules for each named component. Structure lives in layout.css. Colors/effects ONLY via token variables. ============================================================ */ /* ═══ NAVBAR ═══ */ .navbar { /* layout in layout.css */ } .navbar__logo { font: var(--text-subheading); background: var(--color-accent-gradient); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; letter-spacing: var(--letter-spacing-tight); } .navbar__icon-btn { width: 36px; height: 36px; border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; transition: background var(--duration-fast) var(--ease-out); color: var(--color-text-secondary); } .navbar__icon-btn:hover, .navbar__icon-btn:active { background: var(--color-interactive-hover); color: var(--color-text-primary); } /* ═══ BOTTOM NAVIGATION ═══ */ .bottombar-item { cursor: pointer; transition: transform var(--duration-fast) var(--ease-spring); color: var(--color-text-muted); border-radius: var(--radius-lg); } .bottombar-item:active { transform: scale(0.92); } .bottombar-item.active { color: var(--color-accent-primary); } .bottombar-item__label { font: var(--text-micro); letter-spacing: var(--letter-spacing-wide); } .bottombar-item__dot { width: 4px; height: 4px; border-radius: var(--radius-full); background: var(--color-accent-primary); margin: 0 auto; } /* ═══ POST CARD ═══ */ .post-card { background: var(--color-glass-fill); border: 1px solid var(--color-glass-border); box-shadow: var(--shadow-md); transition: box-shadow var(--duration-normal) var(--ease-out); } .post-card:focus-within { box-shadow: var(--shadow-lg); } .post-card__username { font-weight: var(--font-weight-semibold); font-size: var(--font-size-sm); color: var(--color-text-primary); letter-spacing: var(--letter-spacing-tight); } .post-card__handle { font-size: var(--font-size-xs); color: var(--color-text-muted); } .post-card__timestamp { font-size: var(--font-size-xs); color: var(--color-text-muted); margin-left: auto; } .post-card__more-btn { color: var(--color-text-muted); transition: color var(--duration-fast); border-radius: var(--radius-full); width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; } .post-card__more-btn:hover { color: var(--color-text-primary); } .post-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--duration-slow) var(--ease-out); } /* ── Action Icons ── */ .post-card__like-btn { display: flex; align-items: center; gap: var(--space-2); color: var(--color-like-default); transition: color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-spring); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } .post-card__like-btn.liked { color: var(--color-like-active); } .post-card__like-btn:active { transform: scale(0.88); } .post-card__comment-btn { display: flex; align-items: center; gap: var(--space-2); color: var(--color-comment); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); transition: transform var(--duration-fast) var(--ease-spring); } .post-card__comment-btn:active { transform: scale(0.88); } .post-card__save-btn { margin-left: auto; color: var(--color-save-default); transition: color var(--duration-fast) var(--ease-out); } .post-card__save-btn.saved { color: var(--color-save-active); } .post-card__caption-text { font-size: var(--font-size-sm); color: var(--color-text-secondary); line-height: var(--line-height-normal); } .post-card__caption-username { font-weight: var(--font-weight-semibold); color: var(--color-text-primary); margin-right: var(--space-2); } .post-card__view-comments { font-size: var(--font-size-xs); color: var(--color-text-muted); cursor: pointer; transition: color var(--duration-fast); } .post-card__view-comments:hover { color: var(--color-text-accent); } /* ═══ STORY REEL ═══ */ .story-item__ring { background: var(--story-ring-gradient); } .story-item__ring--seen { background: var(--color-glass-border-md); } .story-item__avatar { border: 2px solid var(--color-bg-base); border-radius: var(--radius-full); } .story-item__label { font: var(--text-micro); color: var(--color-text-secondary); max-width: 60px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: center; } .story-item--add .story-item__ring { background: var(--color-glass-fill-md); border: 1px dashed var(--color-glass-border-md); } /* ═══ PROFILE HEADER ═══ */ .profile-header__stat-value { font: var(--text-subheading); color: var(--color-text-primary); } .profile-header__stat-label { font: var(--text-micro); color: var(--color-text-muted); text-transform: uppercase; letter-spacing: var(--letter-spacing-wider); } .profile-header__stat-divider { width: 1px; background: var(--color-border-subtle); height: 32px; align-self: center; } .profile-header__name { font: var(--text-subheading); color: var(--color-text-primary); } .profile-header__username { font: var(--text-caption); color: var(--color-text-accent); } .profile-header__bio { font: var(--text-caption); color: var(--color-text-secondary); line-height: var(--line-height-loose); } .profile-header__location { font: var(--text-micro); color: var(--color-text-muted); display: flex; align-items: center; gap: var(--space-1); } /* ═══ COMMENT BOX ═══ */ .comment-box__item__body { padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); background: var(--color-glass-fill); border: 1px solid var(--color-glass-border); flex: 1; } .comment-box__item__username { font-weight: var(--font-weight-semibold); font-size: var(--font-size-xs); color: var(--color-text-primary); margin-bottom: var(--space-1); } .comment-box__item__text { font-size: var(--font-size-sm); color: var(--color-text-secondary); line-height: var(--line-height-normal); } .comment-box__item__meta { display: flex; align-items: center; gap: var(--space-4); margin-top: var(--space-2); } .comment-box__item__time { font: var(--text-micro); color: var(--color-text-muted); } .comment-box__item__like { font: var(--text-micro); color: var(--color-text-muted); transition: color var(--duration-fast); } .comment-box__item__like.liked { color: var(--color-like-active); } .comment-box__item__reply { font: var(--text-micro); color: var(--color-text-muted); font-weight: var(--font-weight-medium); transition: color var(--duration-fast); } .comment-box__item__reply:hover { color: var(--color-text-accent); } .comment-box__input-row { border-top: 1px solid var(--color-glass-border); } .comment-box__input { flex: 1; height: 40px; padding: 0 var(--space-4); border-radius: var(--radius-full); font-size: var(--font-size-sm); color: var(--color-text-primary); } .comment-box__submit { color: var(--color-accent-primary); font-weight: var(--font-weight-semibold); font-size: var(--font-size-sm); transition: opacity var(--duration-fast); } .comment-box__submit:disabled { opacity: 0.4; cursor: not-allowed; } /* ═══ BUTTONS ═══ */ .btn-primary { background: var(--color-accent-gradient); color: var(--color-text-primary); font-weight: var(--font-weight-semibold); font-size: var(--font-size-sm); box-shadow: var(--shadow-glow); } .btn-primary:hover { box-shadow: var(--shadow-glow-accent); transform: translateY(-1px); } .btn-primary:active { transform: scale(0.97) translateY(0); } .btn-secondary { background: var(--color-glass-fill-md); border: 1px solid var(--color-glass-border-md); color: var(--color-text-primary); font-weight: var(--font-weight-medium); font-size: var(--font-size-sm); } .btn-secondary:hover { background: var(--color-glass-fill-lg); } .btn-ghost { color: var(--color-text-secondary); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } .btn-ghost:hover { background: var(--color-interactive-hover); color: var(--color-text-primary); } .btn-danger { background: rgba(239, 68, 68, 0.15); border: 1px solid rgba(239, 68, 68, 0.3); color: var(--color-error); font-weight: var(--font-weight-medium); font-size: var(--font-size-sm); } .btn-danger:hover { background: rgba(239, 68, 68, 0.25); } /* ═══ AVATAR ═══ */ .avatar { background: var(--color-glass-fill-lg); border: 1.5px solid var(--avatar-border-color); } .avatar--ring { padding: 2px; background: var(--story-ring-gradient); border: none; } .avatar--ring .avatar__img { border: 2px solid var(--color-bg-base); border-radius: var(--radius-full); } /* ═══ BADGE ═══ */ .badge-accent { background: rgba(168, 85, 247, 0.15); border: 1px solid rgba(168, 85, 247, 0.3); color: var(--color-accent-primary); } .badge-success { background: rgba(74, 222, 128, 0.12); border: 1px solid rgba(74, 222, 128, 0.25); color: var(--color-success); } .badge-error { background: rgba(248, 113, 113, 0.12); border: 1px solid rgba(248, 113, 113, 0.25); color: var(--color-error); } /* ═══ EXPLORE GRID ═══ */ .explore-grid-item img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--duration-slow) var(--ease-out); } .explore-grid-item:hover img { transform: scale(1.04); } .explore-grid-item__overlay { position: absolute; inset: 0; background: var(--color-bg-scrim); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity var(--duration-normal) var(--ease-out); } .explore-grid-item:hover .explore-grid-item__overlay { opacity: 1; } .explore-grid-item__stats { display: flex; gap: var(--space-4); color: var(--color-text-primary); font-weight: var(--font-weight-semibold); font-size: var(--font-size-sm); } /* ═══ TOAST ═══ */ .toast { background: var(--color-glass-fill-lg); backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); border: 1px solid var(--color-glass-border-md); box-shadow: var(--shadow-lg); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); color: var(--color-text-primary); white-space: nowrap; } /* ═══ INPUT ═══ */ .input-field { width: 100%; height: 48px; padding: 0 var(--space-4); border-radius: var(--input-radius); font-size: var(--font-size-base); color: var(--color-text-primary); } .textarea-field { width: 100%; padding: var(--space-3) var(--space-4); border-radius: var(--input-radius); font-size: var(--font-size-base); color: var(--color-text-primary); resize: none; line-height: var(--line-height-normal); } /* ═══ SECTION HEADERS ═══ */ .section-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-2) var(--page-padding); } .section-header__title { font: var(--text-subheading); color: var(--color-text-primary); letter-spacing: var(--letter-spacing-tight); } .section-header__action { font-size: var(--font-size-sm); color: var(--color-text-accent); font-weight: var(--font-weight-medium); } /* ═══ ADMIN PANEL ═══ */ .admin-nav-item { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); color: var(--color-text-secondary); transition: all var(--duration-fast) var(--ease-out); cursor: pointer; } .admin-nav-item:hover { background: var(--color-interactive-hover); color: var(--color-text-primary); } .admin-nav-item.active { background: var(--color-glass-fill-md); color: var(--color-text-accent); border: 1px solid var(--color-glass-border); } .admin-card { border-radius: var(--card-radius); padding: var(--space-5); } .admin-card__title { font: var(--text-subheading); color: var(--color-text-primary); margin-bottom: var(--space-4); } .admin-card__label { font: var(--text-micro); color: var(--color-text-muted); text-transform: uppercase; letter-spacing: var(--letter-spacing-wider); margin-bottom: var(--space-2); } .admin-token-swatch { width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--color-glass-border-md); cursor: pointer; flex-shrink: 0; } .admin-token-name { font: var(--text-caption); color: var(--color-text-secondary); font-family: var(--font-family-mono); flex: 1; } .admin-token-value { font: var(--text-micro); color: var(--color-text-muted); font-family: var(--font-family-mono); } .theme-card { border-radius: var(--card-radius); padding: var(--space-4); cursor: pointer; transition: all var(--duration-normal) var(--ease-out); position: relative; overflow: hidden; } .theme-card.selected { border-color: var(--color-accent-primary); box-shadow: var(--shadow-glow); } .theme-card__preview { display: flex; gap: var(--space-2); margin-bottom: var(--space-3); } .theme-card__dot { width: 20px; height: 20px; border-radius: var(--radius-full); } /* ═══ TOGGLE SWITCH ═══ */ .toggle-switch { position: relative; width: 48px; height: 26px; flex-shrink: 0; } .toggle-switch__track { width: 100%; height: 100%; border-radius: var(--radius-full); background: var(--color-glass-fill-md); border: 1px solid var(--color-glass-border-md); transition: background var(--duration-normal) var(--ease-out); cursor: pointer; display: flex; align-items: center; padding: 0 var(--space-1); } .toggle-switch__track.on { background: rgba(168, 85, 247, 0.25); border-color: var(--color-accent-primary); } .toggle-switch__thumb { width: 20px; height: 20px; border-radius: var(--radius-full); background: var(--color-text-muted); transition: transform var(--duration-normal) var(--ease-spring), background var(--duration-normal) var(--ease-out); flex-shrink: 0; } .toggle-switch__track.on .toggle-switch__thumb { transform: translateX(22px); background: var(--color-accent-primary); } /* ═══ DIVIDER ═══ */ .divider { height: 1px; background: var(--color-border-subtle); margin: var(--space-4) 0; }