/* Container */ .glist-body { font-family: var(--font-family-base); padding: var(--spacing-sm); background: var(--color-bg-body); } .glist-container { max-width: var(--container-max-width); margin: auto; background: var(--color-bg-surface); padding: var(--spacing-sm); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-card); } /* Title */ .glist-title { text-align: center; font-size: var(--font-size-2xl); margin-bottom: var(--spacing-sm); } .glist-section-title { text-align: center; font-size: var(--font-size-xl); margin-top: var(--spacing-xl); margin-bottom: var(--spacing-sm); color: var(--color-gray-700); border-top: var(--border-width-medium) solid var(--color-border-light); padding-top: var(--spacing-md); } .glist-section-header { display: flex; justify-content: space-between; align-items: center; margin-top: var(--spacing-xl); border-top: var(--border-width-medium) solid var(--color-border-light); padding-top: var(--spacing-md); } .glist-section-header .glist-section-title { margin: 0; border: none; padding: 0; text-align: left; } .glist-collapse-btn { font-size: var(--font-size-sm); padding: var(--spacing-xs) var(--spacing-md); cursor: pointer; border: var(--border-width-thin) solid var(--color-border-medium); background: var(--color-bg-surface); color: var(--color-text-secondary); border-radius: var(--button-border-radius); transition: var(--transition-base); font-weight: var(--button-font-weight); } .glist-collapse-btn:hover { background: var(--color-bg-hover); color: var(--color-text-primary); border-color: var(--color-primary); } /* Classification Groups */ .glist-classification-group { margin-bottom: var(--spacing-xl); } .glist-classification-header { font-size: var(--font-size-lg); font-weight: var(--font-weight-semibold); color: var(--color-primary); margin: var(--spacing-md) 0 var(--spacing-sm) 0; padding: var(--spacing-sm) var(--spacing-md); background: var(--color-primary-light); border-left: var(--border-width-thick) solid var(--color-primary); border-radius: var(--border-radius-sm); } /* Inputs */ .glist-input { font-size: 1em; padding: 0.5em; margin: 0.3em 0; width: 100%; box-sizing: border-box; } /* Buttons */ .glist-btn { font-size: var(--font-size-base); padding: var(--button-padding-y); width: 100%; margin-top: var(--spacing-sm); cursor: pointer; border: none; background: var(--color-primary); color: var(--color-text-inverse); border-radius: var(--button-border-radius); font-weight: var(--button-font-weight); transition: var(--transition-base); } .glist-btn:hover { background: var(--color-primary-dark); } .glist-show-more-btn { font-size: var(--font-size-sm); padding: var(--spacing-sm) var(--spacing-lg); cursor: pointer; border: var(--border-width-thin) solid var(--color-primary); background: var(--color-bg-surface); color: var(--color-primary); border-radius: var(--button-border-radius); transition: var(--transition-base); font-weight: var(--button-font-weight); } .glist-show-more-btn:hover { background: var(--color-primary); color: var(--color-text-inverse); } /* Suggestion dropdown */ .glist-suggest-box { background: var(--color-bg-surface); border: var(--border-width-thin) solid var(--color-border-medium); max-height: 150px; overflow-y: auto; position: absolute; z-index: var(--z-dropdown); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-card); padding: var(--spacing-md); width: calc(100% - 8em); max-width: 440px; margin: 0 auto; } .glist-suggest-item { padding: var(--spacing-sm); padding-inline: var(--spacing-xl); cursor: pointer; color: var(--color-text-primary); border-radius: var(--border-radius-sm); transition: var(--transition-fast); } .glist-suggest-item:hover { background: var(--color-bg-hover); } /* Grocery list items */ .glist-ul { list-style: none; padding: 0; margin-top: var(--spacing-md); } .glist-li { background: var(--color-bg-surface); border: var(--border-width-thin) solid var(--color-border-light); border-radius: var(--border-radius-lg); margin-bottom: var(--spacing-sm); cursor: pointer; transition: box-shadow var(--transition-base), transform var(--transition-base); overflow: hidden; } .glist-li:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } .glist-item-layout { display: flex; gap: 1em; padding: 0em; align-items: center; } .glist-item-image { width: 50px; height: 50px; min-width: 50px; background: var(--color-gray-100); border: var(--border-width-medium) solid var(--color-border-light); border-radius: var(--border-radius-lg); display: flex; align-items: center; justify-content: center; font-size: 2em; color: var(--color-border-medium); overflow: hidden; position: relative; } .glist-item-image.has-image { border-color: var(--color-primary); background: var(--color-bg-surface); } .glist-item-image img { width: 100%; height: 100%; object-fit: cover; } .glist-item-image.has-image:hover { opacity: 0.8; box-shadow: 0 0 8px var(--color-primary-light); } .glist-item-content { display: flex; flex-direction: column; gap: 0.4em; flex: 1; min-width: 0; } .glist-item-header { display: flex; align-items: baseline; gap: 0.5em; flex-wrap: wrap; } .glist-item-name { font-weight: 800; font-size: 0.8em; color: var(--color-text-primary); } .glist-item-quantity { position: absolute; top: 0; right: 0; background: var(--color-primary); color: var(--color-text-inverse); font-weight: 700; font-size: 0.3em; padding: 0.2em 0.4em; border-radius: 0 var(--border-radius-md) 0 var(--border-radius-sm); min-width: 20%; text-align: center; box-shadow: var(--shadow-sm); } .glist-item-users { font-size: 0.7em; color: var(--color-text-secondary); font-style: italic; } /* Sorting dropdown */ .glist-sort { width: 100%; margin: var(--spacing-xs) 0; padding: var(--spacing-sm); font-size: var(--font-size-base); border-radius: var(--border-radius-sm); border: var(--border-width-thin) solid var(--color-border-medium); background: var(--color-bg-surface); color: var(--color-text-primary); } /* Image upload */ .glist-image-upload { margin: 0.5em 0; } .glist-image-label { display: block; padding: var(--spacing-sm); background: var(--color-gray-100); border: var(--border-width-medium) dashed var(--color-border-medium); border-radius: var(--border-radius-sm); text-align: center; cursor: pointer; transition: var(--transition-base); color: var(--color-text-primary); } .glist-image-label:hover { background: var(--color-bg-hover); border-color: var(--color-primary); } .glist-image-preview { position: relative; margin-top: 0.5em; display: inline-block; } .glist-image-preview img { max-width: 150px; max-height: 150px; border-radius: var(--border-radius-lg); border: var(--border-width-medium) solid var(--color-border-light); } .glist-remove-image { position: absolute; top: -8px; right: -8px; width: 28px; height: 28px; border-radius: var(--border-radius-full); background: var(--color-danger); color: var(--color-text-inverse); border: var(--border-width-medium) solid var(--color-bg-surface); font-size: 1.2rem; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; } .glist-remove-image:hover { background: var(--color-danger-hover); } /* Floating Action Button (FAB) */ .glist-fab { position: fixed; bottom: 20px; right: 20px; background: var(--color-success); color: var(--color-text-inverse); border: none; border-radius: var(--border-radius-full); width: 62px; height: 62px; font-size: 2em; line-height: 0; display: flex; align-items: center; justify-content: center; box-shadow: var(--shadow-lg); cursor: pointer; transition: var(--transition-base); } .glist-fab:hover { background: var(--color-success-hover); transform: scale(1.05); } /* Mobile tweaks */ @media (max-width: 480px) { .glist-container { padding: 1em 0.8em; } .glist-fab { bottom: 16px; right: 16px; } }