@import "tailwindcss"; * { box-sizing: border-box; } :root { /* ===== COLORS ===== */ --color-primary: #2e7d32; --color-primary-soft: #e6efe9; --color-bg: #f6faf7; --color-surface: #ffffff; --color-text-main: #1f2d24; --color-text-secondary: #5f6f66; --color-text-muted: #8a9b92; --color-border: rgba(0, 0, 0, 0.06); /* ===== SHADOWS ===== */ --shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.05); --shadow-md: 0 8px 20px rgba(0, 0, 0, 0.08); --shadow-lg: 0 20px 40px rgba(0, 0, 0, 0.12); /* ===== RADIUS ===== */ --radius-sm: 10px; --radius-md: 14px; --radius-lg: 18px; /* ===== SPACING ===== */ --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; } html, body { background: var(--color-bg); color: var(--color-text-main); font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif; line-height: 1.5; } body { background: var(--background); color: var(--foreground); font-family: Arial, Helvetica, sans-serif; } /* Navigation */ .navbar { display: flex; align-items: center; gap: 1.5rem; } .navbar a { color: white; text-decoration: none; padding: 0.3rem 0.6rem; border-radius: 6px; transition: background-color 0.2s ease; } .navbar a:hover { background-color: rgba(255, 255, 255, 0.2); } .navbar a.active { background-color: rgba(255, 255, 255, 0.35); } /* Hide horizontal scrollbar but keep scroll */ .hide-scrollbar { scrollbar-width: none; /* Firefox */ -ms-overflow-style: none; /* IE / Edge */ } .hide-scrollbar::-webkit-scrollbar { display: none; /* Chrome / Safari */ } @keyframes skeleton { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } } @keyframes heart-pop { 0% { transform: scale(1); } 40% { transform: scale(1.25); } 70% { transform: scale(0.95); } 100% { transform: scale(1); } } @keyframes comment-wiggle { 0% { transform: translateX(0); } 30% { transform: translateX(-2px); } 60% { transform: translateX(2px); } 100% { transform: translateX(0); } } @keyframes slideUp { from { transform: translateY(100%); } to { transform: translateY(0); } } @keyframes spin { to { transform: rotate(360deg); } } .postcard { background: var(--color-surface); border-radius: var(--radius-lg); border: 1px solid var(--color-border); box-shadow: var(--shadow-sm); padding: var(--space-md); display: flex; flex-direction: column; gap: var(--space-sm); transition: box-shadow 0.2s ease, transform 0.2s ease; } .postcard:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); } .postcard-content { font-size: 0.95rem; color: var(--color-text-secondary); } .postcard-actions { display: flex; gap: var(--space-md); align-items: center; font-size: 0.85rem; color: var(--color-text-muted); } .postcard-action { display: flex; align-items: center; gap: 0.3rem; cursor: pointer; user-select: none; } .postcard-action:hover { color: var(--color-text-main); } .postcard--discovery { border: 1px solid var(--color-primary); box-shadow: 0 0 0 1px rgba(236, 214, 15, 0.925), var(--shadow-sm); } .feed-header, .explore-header { padding: var(--space-lg) var(--space-md) var(--space-md); } /*.feed-header p, .explore-header p { color: var(--color-text-secondary); margin: 0.25rem 0 0; }*/ .post-list { display: flex; flex-direction: column; gap: var(--space-md); padding-bottom: calc(var(--space-xl) + 60px); } .fresh-scroll, .trending-scroll { display: flex; gap: var(--space-sm); overflow-x: auto; padding: var(--space-sm) var(--space-md); } .hide-scrollbar::-webkit-scrollbar { display: none; } .fresh-item, .trending-item { background: var(--color-surface); border-radius: var(--radius-md); padding: var(--space-sm); min-width: 80px; display: flex; flex-direction: column; align-items: center; gap: 0.3rem; box-shadow: var(--shadow-sm); border: 1px solid var(--color-border); } .profile-header { display: flex; gap: var(--space-lg); padding: var(--space-lg); margin: var(--space-md); background: var(--color-surface); border-radius: var(--radius-lg); border: 1px solid var(--color-border); box-shadow: var(--shadow-sm); } .profile-avatar { width: 72px; height: 72px; border-radius: 50%; background: var(--color-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 2rem; } .profile-info h1 { font-size: 1.3rem; margin: 0; } .profile-username { font-size: 0.85rem; color: var(--color-text-muted); } .profile-bio { margin-top: var(--space-sm); font-size: 0.9rem; color: var(--color-text-secondary); } .profile-stats { display: flex; gap: var(--space-lg); margin-top: var(--space-md); } .profile-stats div { text-align: center; } .profile-stats strong { font-size: 1.05rem; font-weight: 600; } .profile-stats span { font-size: 0.75rem; color: var(--color-text-muted); } .profile-pets { margin-top: var(--space-lg); padding: 0 var(--space-md); } .profile-pets h2 { font-size: 1.1rem; margin-bottom: var(--space-sm); } .pets-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: var(--space-md); } .pet-card { background: var(--color-surface); border-radius: var(--radius-md); border: 1px solid var(--color-border); box-shadow: var(--shadow-sm); padding: var(--space-sm); text-align: center; transition: box-shadow 0.2s ease, transform 0.2s ease; } .profile-posts { margin-top: var(--space-xl); } .profile-posts h2 { font-size: 1.1rem; margin: 0 var(--space-md) var(--space-sm); } .pet-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); } .post-preview-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.35); display: flex; justify-content: center; align-items: flex-end; z-index: 50; overflow: hidden; } .post-preview-modal { background: var(--color-surface); width: 100%; max-width: 600px; /* 🔥 DAS FEHLT */ max-height: calc(100vh - 70px); /* Platz für Statusbar */ overflow-y: auto; border-radius: var(--radius-lg) var(--radius-lg) 0 0; padding: var(--space-lg); box-shadow: var(--shadow-lg); padding-bottom: calc(var(--space-xl) + 60px); } .explore-filter { display: flex; gap: var(--space-sm); margin-top: var(--space-md); } .filter-button { padding: 0.4rem 0.8rem; border-radius: 999px; border: 1px solid var(--color-border); background: var(--color-surface); font-size: 0.85rem; color: var(--color-text-secondary); cursor: pointer; } .filter-button.active { background: var(--color-primary); color: white; border-color: var(--color-primary); } .explore-header, .explore-trending, .explore-posts { padding: 0 var(--space-md); } .explore-trending, .explore-posts { margin-top: var(--space-lg); } .explore-header h1 { font-size: 1.4rem; margin-bottom: 0.2rem; } .explore-header p { font-size: 0.9rem; color: var(--color-text-secondary); } .explore-trending strong, .explore-posts strong { display: block; margin-bottom: var(--space-sm); } .feed-header { padding: var(--space-lg) var(--space-md) var(--space-md); } .feed-header h1 { font-size: 1.4rem; margin-bottom: 0.2rem; } .feed-header p { font-size: 0.9rem; color: var(--color-text-secondary); } .feed-posts { margin-top: var(--space-md); } .feed-posts .postcard { margin-bottom: var(--space-md); } .feed-header h1::after { content: '•'; margin-left: 0.4rem; color: var(--color-primary); } .pets-page { padding-bottom: calc(var(--space-xl) + 60px); /* Abstand zur BottomNav */ } .pets-header { padding: var(--space-lg) var(--space-md) var(--space-md); } .pets-header h1 { font-size: 1.4rem; margin-bottom: 0.25rem; } .pets-header p { font-size: 0.9rem; color: var(--color-text-secondary); margin: 0; } .pets-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: var(--space-md); padding: 0 var(--space-md); } .pet-card { background: var(--color-surface); border-radius: var(--radius-lg); border: 1px solid var(--color-border); box-shadow: var(--shadow-sm); padding: var(--space-md); text-align: center; text-decoration: none; color: inherit; display: flex; flex-direction: column; gap: 0.3rem; transition: box-shadow 0.2s ease, transform 0.2s ease; } .pet-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); } .pet-avatar { width: 56px; height: 56px; border-radius: 50%; background: var(--color-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 1.6rem; margin: 0 auto var(--space-sm); } .pet-name { font-size: 1rem; font-weight: 600; } .pet-meta { font-size: 0.8rem; color: var(--color-text-muted); } .pet-age { font-size: 0.75rem; color: var(--color-text-secondary); } .pets-actions { margin-top: var(--space-xl); padding: 0 var(--space-md); } .button-primary { display: inline-flex; justify-content: center; align-items: center; gap: 0.4rem; padding: 0.8rem 1.2rem; border-radius: 12px; background: var(--color-primary); color: white; font-weight: 600; text-decoration: none; border: none; cursor: pointer; box-shadow: var(--shadow-sm); transition: box-shadow 0.2s ease, transform 0.15s ease; } .button-primary:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); } .button-secondary { display: inline-flex; justify-content: center; align-items: center; padding: 0.8rem 1.2rem; border-radius: 12px; background: var(--color-surface); color: var(--color-text-main); border: 1px solid var(--color-border); font-weight: 500; cursor: pointer; } .button-danger { display: inline-flex; justify-content: center; align-items: center; gap: 0.4rem; padding: 0.8rem 1.2rem; border-radius: 12px; /* 🔴 gleiche Rundung wie grün */ background: #c62828; color: white; font-weight: 600; border: none; cursor: pointer; text-decoration: none; box-shadow: var(--shadow-sm); transition: box-shadow 0.2s ease, transform 0.15s ease; } .button-danger:hover { background: #b71c1c; box-shadow: var(--shadow-md); } .button-danger:active { transform: scale(0.98); } .badge { display: inline-block; padding: 0.15rem 0.5rem; font-size: 0.7rem; border-radius: 999px; background: var(--color-border); color: var(--color-text-muted); } .badge-pet { background: var(--color-primary-soft); color: var(--color-primary); } .postcard--discovery { border: 1px solid var(--color-primary); box-shadow: 0 0 0 1px rgba(46, 125, 50, 0.15), var(--shadow-sm); } .empty-state { padding: var(--space-xl); margin: var(--space-md); text-align: center; background: var(--color-surface); border-radius: var(--radius-lg); border: 1px dashed var(--color-border); color: var(--color-text-secondary); } .empty-state strong { display: block; font-size: 1rem; font-weight: 600; color: var(--color-text-main); margin-bottom: 0.3rem; } .empty-state span { font-size: 0.85rem; line-height: 1.4; } .empty-state--explore { border-style: solid; } .empty-state--pets { border-style: dashed; } button:active, .button-primary:active { transform: scale(0.98); } a { -webkit-tap-highlight-color: transparent; } section + section { margin-top: var(--space-xl); } h1, h2, h3 { line-height: 1.25; } .pet-detail-page { padding-bottom: calc(var(--space-xl) + 60px); /* Platz für BottomNav */ } .pet-detail-header { display: flex; gap: var(--space-lg); padding: var(--space-lg); margin: var(--space-md); background: var(--color-surface); border-radius: var(--radius-lg); border: 1px solid var(--color-border); box-shadow: var(--shadow-sm); align-items: center; } .pet-detail-avatar { width: 72px; height: 72px; border-radius: 50%; background: var(--color-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 2rem; flex-shrink: 0; } .pet-detail-info h1 { font-size: 1.4rem; margin: 0; } .pet-detail-meta { display: block; font-size: 0.9rem; color: var(--color-text-secondary); margin-top: 0.2rem; } .pet-detail-owner { display: block; font-size: 0.8rem; color: var(--color-text-muted); margin-top: 0.3rem; } .pet-detail-posts { margin-top: var(--space-xl); } .pet-detail-posts h2 { font-size: 1.1rem; margin: 0 var(--space-md) var(--space-sm); } .container { max-width: 720px; margin: 0 auto; } .divider { height: 1px; background: var(--color-border); margin: var(--space-lg) 0; } button:disabled, .button-primary:disabled, .button-secondary:disabled, .button-danger:disabled { opacity: 0.55; cursor: not-allowed; box-shadow: none; transform: none; } .button-primary.is-loading, .button-secondary.is-loading, .button-danger.is-loading { position: relative; pointer-events: none; color: transparent; /* Text ausblenden */ } .button-primary.is-loading::after, .button-secondary.is-loading::after, .button-danger.is-loading::after { content: ''; width: 16px; height: 16px; border: 2px solid rgba(255, 255, 255, 0.4); border-top-color: white; border-radius: 50%; position: absolute; animation: spin 0.8s linear infinite; } select { appearance: none; -webkit-appearance: none; -moz-appearance: none; width: 100%; padding: 0.7rem 2.4rem 0.7rem 0.9rem; border-radius: var(--radius-lg); border: 1px solid var(--color-border); background-color: var(--color-surface); color: var(--color-text-main); font-size: 0.9rem; line-height: 1.3; box-shadow: var(--shadow-sm); cursor: pointer; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24'%3E%3Cpath fill='%235f6f66' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.9rem center; } select:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 2px rgba(46, 125, 50, 0.15); } select:disabled { background-color: var(--color-primary-soft); color: var(--color-text-muted); cursor: not-allowed; } .postcard-title-row { display: flex; align-items: center; gap: 0.5rem; } .birthday-dot { margin-left: auto; display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 12px; background: var(--color-primary-soft); border: 1px solid rgba(46, 125, 50, 0.25); box-shadow: var(--shadow-sm); font-size: 0.95rem; } /* Birthday Highlight */ .postcard--birthday { border-color: rgba(46, 125, 50, 0.35); box-shadow: 0 0 0 2px rgba(46, 125, 50, 0.18), var(--shadow-sm); } /* =========================== UX Polish – PostCard hierarchy & actions (safe additions, no refactor) =========================== */ .postcard-title { font-size: 1.05rem; font-weight: 600; color: var(--color-text-main, #111); } .postcard-meta { font-size: 0.75rem; color: var(--color-text-muted, #6b7280); white-space: nowrap; } .postcard-text { margin-top: var(--space-sm, 10px); font-size: 0.95rem; line-height: 1.55; color: var(--color-text-secondary, #1f2937); max-width: 65ch; } /* Click affordance: main area opens preview, actions do not */ .postcard-main { cursor: pointer; } .postcard-actions { cursor: default; margin-top: var(--space-sm, 10px); padding-top: var(--space-sm, 10px); border-top: 1px solid var(--color-border, rgba(0,0,0,0.08)); } .post-locked-hint { margin-top: 0.5rem; font-size: 0.85rem; opacity: 0.7; }