philippurbschat.de/plants/components.css

761 lines
18 KiB
CSS

/* Version: 30.09.2025 08:00 */
/* =============================================== */
/* === PLANT CARDS (GRID VIEW) === */
/* =============================================== */
.plant-card {
background-color: transparent;
width: 100%;
aspect-ratio: 1 / 1.35;
perspective: 1000px;
opacity: 0;
transform: translateY(20px);
animation: fadeIn 0.5s ease-out forwards;
}
.list-view .plant-card {
display: none;
}
.plant-card.menu-open {
position: relative;
z-index: 10;
}
.plant-card-inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.6s, box-shadow 0.3s ease;
transform-style: preserve-3d;
border-radius: var(--border-radius-large);
border: 1px solid var(--border-color);
box-shadow: 0 4px 10px var(--shadow-color);
}
.plant-card:hover .plant-card-inner {
box-shadow: 0 8px 20px var(--shadow-color-hover);
}
.plant-card-inner.is-flipped {
transform: rotateY(180deg);
}
.plant-card-front, .plant-card-back {
position: absolute;
width: 100%;
height: 100%;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
background-color: var(--surface-color);
border-radius: var(--border-radius-large);
overflow: hidden;
display: flex;
flex-direction: column;
}
.plant-card-back {
transform: rotateY(180deg);
padding: 25px 20px 20px;
justify-content: flex-start;
cursor: pointer;
}
.plant-img-container {
width: 100%;
aspect-ratio: 1 / 1;
overflow: hidden;
position: relative;
}
.plant-img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.plant-name-overlay {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(to top, rgba(0,0,0,0.6), transparent);
padding: 20px 15px 15px;
}
.plant-name-overlay h3 {
margin: 0;
color: white;
font-size: 1.5rem;
text-shadow: 1px 1px 3px rgba(0,0,0,0.5);
}
.plant-info {
padding: 15px;
flex-grow: 1;
display: flex;
flex-direction: column;
justify-content: center;
}
.card-actions {
display: flex;
flex-direction: column;
gap: 12px;
width: 100%;
}
.action-btn {
width: 100%;
height: auto;
background-color: transparent;
border: 1px solid var(--border-color);
border-radius: 10px;
position: relative;
overflow: hidden;
display: flex;
align-items: center;
padding: 10px 12px;
font-size: 0.9rem;
cursor: pointer;
transition: background-color 0.2s, border-color 0.2s;
}
.action-btn:hover {
background-color: #fafafa;
border-color: #e0e0e0;
}
.action-btn:active {
background-color: #f5f5f5;
transform: none !important;
}
.action-btn-progress {
position: absolute;
bottom: 0;
left: 0;
height: 4px;
border-radius: 0;
transition: width 0.4s ease, background-color 0.4s ease;
}
.action-btn-content {
position: relative;
z-index: 1;
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
font-weight: 600;
pointer-events: none;
color: var(--text-color);
padding: 0;
}
.action-btn.simple {
background-color: transparent;
border-color: var(--border-color);
}
.action-btn.simple:hover {
background-color: #f5f5f5;
}
.action-btn.simple .action-btn-content {
justify-content: flex-start;
color: var(--text-color);
}
.action-btn.simple .care-status,
.action-btn.simple .action-btn-progress {
display: none;
}
.action-btn-content .care-status {
font-size: 0.8rem;
font-weight: 600;
color: var(--text-light);
background-color: transparent;
padding: 0;
}
.water-btn .action-btn-progress[data-status="green"],
.water-btn .action-btn-progress[data-status="yellow"] {
background-color: var(--status-blue);
}
.fertilize-btn .action-btn-progress[data-status="green"] {
background-color: var(--secondary-color);
}
.action-btn-progress[data-status="yellow"] {
background-color: var(--status-yellow);
}
.action-btn-progress[data-status="red"] {
background-color: var(--status-red);
}
.action-btn-progress[data-status="disabled"] {
background-color: #e0e0e0;
}
.action-btn:disabled {
cursor: wait;
}
.action-btn.is-loading .action-btn-content > span:first-child {
display: none;
}
.action-btn.is-loading .care-status {
animation: pulse 1.5s infinite ease-in-out;
}
.plant-card-back h3 {
margin-top: 0;
margin-bottom: 15px;
color: var(--primary-color);
}
.care-tips-content {
flex-grow: 1;
overflow-y: auto;
font-size: 0.85rem;
line-height: 1.5;
padding-right: 5px;
}
.care-tips-content p {
margin: 0 0 1em 0;
}
.care-tips-content p:last-child {
margin-bottom: 0;
}
.care-tips-content strong {
color: var(--primary-color);
font-weight: 700;
}
.care-tips-latin-name {
background-color: #f8f8f8;
border-radius: 8px;
padding: 10px 12px;
margin-bottom: 15px;
font-size: 0.9em;
border: 1px solid var(--border-color);
display: flex;
justify-content: space-between;
align-items: flex-start; /* HIER IST DIE ÄNDERUNG */
cursor: pointer;
transition: background-color 0.2s, box-shadow 0.2s;
}
.care-tips-latin-name:hover {
background-color: #fefefe;
box-shadow: 0 2px 8px var(--shadow-color);
}
.care-tips-latin-name strong {
color: var(--primary-color);
display: block;
font-weight: 600;
font-size: 0.9em;
margin-bottom: 2px;
}
.care-tips-latin-name em {
font-style: italic;
color: var(--text-color);
}
.latin-name-hint {
font-size: 0.8em;
font-weight: 600;
color: var(--text-light);
transition: color 0.2s;
flex-shrink: 0;
padding-left: 10px;
}
.care-tips-latin-name:hover .latin-name-hint {
color: var(--text-color);
}
.back-controls {
margin-top: auto;
padding-top: 15px;
text-align: center;
color: var(--text-light);
font-size: 0.85rem;
flex-shrink: 0;
}
.back-controls svg {
vertical-align: middle;
margin-right: 5px;
}
.card-overlay {
position: absolute;
top: 10px;
right: 10px;
display: flex;
gap: 8px;
z-index: 5;
}
.card-btn {
width: 36px;
height: 36px;
border-radius: 50%;
border: none;
background-color: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(5px);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--text-color);
transition: background-color 0.2s, transform 0.2s;
}
.card-btn:hover {
background-color: white;
transform: scale(1.1);
}
.card-btn:active {
transform: scale(1);
}
.menu-container {
position: relative;
}
.menu-dropdown {
display: none;
position: absolute;
top: 40px;
right: 0;
background: white;
border-radius: var(--border-radius);
box-shadow: 0 4px 15px var(--shadow-color);
overflow: hidden;
z-index: 10;
width: 150px;
}
.menu-dropdown.show {
display: block;
}
.menu-dropdown button {
display: block;
width: 100%;
padding: 12px 15px;
background: none;
border: none;
text-align: left;
cursor: pointer;
font-size: 0.95rem;
color: var(--text-color);
}
.menu-dropdown button:hover {
background-color: #f5f5f5;
}
.menu-dropdown .delete-btn:hover {
background-color: var(--status-red);
color: white;
}
/* =============================================== */
/* === LIST VIEW === */
/* =============================================== */
.plant-list-item {
display: none;
}
.list-view .plant-list-item {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 15px;
background-color: var(--surface-color);
padding: 12px;
border-radius: var(--border-radius-large);
border: 1px solid var(--border-color);
opacity: 0;
transform: translateY(20px);
animation: fadeIn 0.5s ease-out forwards;
width: 100%;
transition: background-color 0.3s ease;
}
.plant-list-item.menu-open {
position: relative;
z-index: 10;
}
.plant-list-item.tips-visible {
background-color: #f9f9f9;
}
.list-item-img-container {
width: 70px;
height: 70px;
flex-shrink: 0;
border-radius: var(--border-radius);
overflow: hidden;
}
.list-item-img {
width: 100%;
height: 100%;
object-fit: cover;
}
.list-item-info {
flex-grow: 1;
}
.list-item-info h3 {
margin: 0 0 4px 0;
font-size: 1.2rem;
}
.list-item-actions {
display: flex;
gap: 10px;
align-items: center;
}
.list-item-actions .action-btn {
min-width: 165px;
}
.list-item-menu {
display: flex;
gap: 8px;
}
.list-item-care-tips {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s ease-out;
width: 100%;
font-size: 0.85rem;
box-sizing: border-box;
color: var(--text-color);
grid-column: 1 / -1;
}
.list-item-care-tips-content {
padding: 0;
border-top: 1px solid transparent;
transition: padding 0.4s ease-out, border-color 0.4s ease-out;
}
.list-item-care-tips-content p {
margin: 0 0 1em 0;
}
.list-item-care-tips-content p:last-child {
margin-bottom: 0;
}
.list-item-care-tips-content strong {
color: var(--primary-color);
font-weight: 700;
}
.plant-list-item.tips-visible .list-item-care-tips {
max-height: 500px;
}
.plant-list-item.tips-visible .list-item-care-tips-content {
padding: 15px 0 5px;
margin-top: 10px;
border-top: 1px solid var(--border-color);
}
/* =============================================== */
/* === MOBILE & RESPONSIVE STYLES === */
/* =============================================== */
.plant-compact-card {
display: none;
}
.plant-detail-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(30, 32, 30, 0.6);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
z-index: 1100;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s ease;
}
.plant-detail-overlay.show {
opacity: 1;
visibility: visible;
}
.plant-detail-content {
position: relative;
width: 100%;
max-width: 380px;
transform: scale(0.95);
transition: transform 0.3s ease;
}
.plant-detail-content .plant-card {
display: block;
opacity: 1;
transform: none;
}
.plant-detail-overlay.show .plant-detail-content {
transform: scale(1);
}
.plant-detail-close-btn {
position: absolute;
top: 15px;
right: 15px;
width: 32px;
height: 32px;
border-radius: 50%;
border: none;
background-color: rgba(255, 255, 255, 0.9);
color: var(--text-color);
font-size: 1.5rem;
line-height: 1;
cursor: pointer;
z-index: 1101;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
display: flex;
align-items: center;
justify-content: center;
}
@media (max-width: 768px) {
.add-btn span {
display: none;
}
.user-menu .username {
display: none;
}
.list-view .plant-list-item {
display: grid;
}
.list-view .plant-card {
display: none;
}
.list-view .plant-list-item {
grid-template-columns: 60px 1fr;
grid-template-rows: auto auto;
gap: 2px 12px;
align-items: center;
position: relative;
padding: 12px;
}
.list-view .list-item-img-container {
grid-row: 1 / 3;
width: 60px;
height: 60px;
}
.list-view .list-item-info {
grid-column: 2;
grid-row: 1;
align-self: end;
}
.list-view .list-item-info h3 {
font-size: 1.1rem;
margin-bottom: 2px;
}
.list-view .list-item-actions {
grid-column: 2;
grid-row: 2;
align-self: start;
flex-direction: row;
gap: 8px;
width: 100%;
}
.list-view .list-item-actions .action-btn {
flex: 1;
min-width: 0;
padding: 6px 8px;
height: auto;
border-radius: 8px;
}
.list-view .list-item-actions .action-btn-progress {
top: 0;
bottom: 0;
height: 100%;
opacity: 0.15;
}
.list-view .list-item-actions .action-btn-content span:first-child {
font-size: 0.8rem;
}
.list-view .list-item-actions .action-btn-content .care-status {
font-size: 0.75rem;
}
.list-view .list-item-menu {
position: absolute;
top: 8px;
right: 8px;
}
.compact-view-enabled.plant-grid:not(.list-view) {
grid-template-columns: repeat(3, 1fr);
gap: 15px;
align-items: start;
}
.compact-view-enabled:not(.list-view) .plant-list-item,
.compact-view-enabled:not(.list-view) .plant-card {
display: none;
}
.compact-view-enabled:not(.list-view) .plant-compact-card {
display: flex;
flex-direction: column;
width: 100%;
background-color: var(--surface-color);
border-radius: var(--border-radius);
overflow: hidden;
position: relative;
box-shadow: 0 2px 6px var(--shadow-color);
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
-webkit-tap-highlight-color: transparent;
opacity: 0;
transform: translateY(20px);
animation: fadeIn 0.5s ease-out forwards;
}
.plant-compact-card:active {
transform: scale(0.96);
box-shadow: 0 1px 3px var(--shadow-color);
}
.compact-img-container {
width: 100%;
aspect-ratio: 1 / 1;
position: relative;
flex-shrink: 0;
overflow: hidden;
}
.compact-img {
width: 100%;
height: 100%;
object-fit: cover;
}
.compact-name-overlay {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(to top, rgba(0,0,0,0.7), transparent);
padding: 15px 8px 8px;
color: white;
text-align: center;
font-size: 0.8rem;
font-weight: 600;
pointer-events: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.compact-card-actions {
padding: 8px;
display: flex;
flex-direction: column;
gap: 6px;
border-top: 1px solid var(--border-color);
flex-shrink: 0;
container-type: inline-size;
container-name: compact-actions;
}
.compact-action-pill {
width: 100%;
background-color: transparent;
border: 1px solid var(--border-color);
border-radius: 8px;
position: relative;
overflow: hidden;
display: flex;
align-items: center;
padding: 5px 8px;
font-size: 0.8rem;
}
.compact-action-progress {
position: absolute;
top: 0;
bottom: 0;
left: 0;
opacity: 0.2;
transition: width 0.4s ease, background-color 0.4s ease;
}
.compact-action-content {
position: relative;
z-index: 1;
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
font-weight: 600;
pointer-events: none;
color: var(--text-color);
}
.action-label {
display: flex;
align-items: center;
gap: 4px;
}
.action-emoji {
display: none;
font-size: 0.9rem;
}
.compact-action-content .care-status {
font-size: 0.75rem;
color: var(--text-light);
}
.compact-action-progress[data-status="green"] {
background-color: var(--status-blue);
}
.compact-action-pill[data-action="fertilize"] .compact-action-progress[data-status="green"] {
background-color: var(--secondary-color);
}
.compact-action-progress[data-status="yellow"] {
background-color: var(--status-yellow);
}
.compact-action-progress[data-status="red"] {
background-color: var(--status-red);
}
.compact-action-progress[data-status="disabled"] {
background-color: #e0e0e0;
}
}
@container compact-actions (max-width: 110px) {
.compact-action-pill .action-text {
display: none;
}
.compact-action-pill .action-emoji {
display: inline;
}
.compact-action-content {
justify-content: space-between;
}
}
/* =============================================== */
/* === DARK MODE OVERRIDES === */
/* =============================================== */
/* --- Manually selected Dark Mode --- */
body[data-theme='dark'] .action-btn:hover {
background-color: #2a2a2a;
border-color: #444;
}
body[data-theme='dark'] .card-btn {
background-color: rgba(0, 0, 0, 0.3);
color: var(--text-color);
}
body[data-theme='dark'] .card-btn:hover {
background-color: rgba(0, 0, 0, 0.5);
}
body[data-theme='dark'] .menu-dropdown {
background: #2c2c2c;
box-shadow: 0 4px 15px var(--shadow-color);
}
body[data-theme='dark'] .menu-dropdown button:hover {
background-color: #3a3a3a;
}
body[data-theme='dark'] .menu-dropdown .delete-btn:hover {
background-color: var(--status-red);
color: white;
}
body[data-theme='dark'] .care-tips-latin-name {
background-color: #2a2a2a;
}
body[data-theme='dark'] .plant-list-item.tips-visible {
background-color: #252525;
}
body[data-theme='dark'] .plant-detail-close-btn {
background-color: rgba(40, 40, 40, 0.8);
color: var(--text-color);
}
/* --- Auto Dark Mode (from System) --- */
@media (prefers-color-scheme: dark) {
body[data-theme='auto'] .action-btn:hover {
background-color: #2a2a2a;
border-color: #444;
}
body[data-theme='auto'] .card-btn {
background-color: rgba(0, 0, 0, 0.3);
color: var(--text-color);
}
body[data-theme='auto'] .card-btn:hover {
background-color: rgba(0, 0, 0, 0.5);
}
body[data-theme='auto'] .menu-dropdown {
background: #2c2c2c;
box-shadow: 0 4px 15px var(--shadow-color);
}
body[data-theme='auto'] .menu-dropdown button:hover {
background-color: #3a3a3a;
}
body[data-theme='auto'] .menu-dropdown .delete-btn:hover {
background-color: var(--status-red);
color: white;
}
body[data-theme='auto'] .care-tips-latin-name {
background-color: #2a2a2a;
}
body[data-theme='auto'] .plant-list-item.tips-visible {
background-color: #252525;
}
body[data-theme='auto'] .plant-detail-close-btn {
background-color: rgba(40, 40, 40, 0.8);
color: var(--text-color);
}
}