recipe-manager/public/style.css

1447 lines
28 KiB
CSS

/* GourmetVault CSS - Premium Styling System */
/* Design Tokens & Root Custom Variables */
:root {
/* Fonts */
--font-heading: 'Outfit', 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
/* Global Transitions */
--transition-fast: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
--transition-normal: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1);
--border-radius-sm: 8px;
--border-radius-md: 14px;
--border-radius-lg: 24px;
--border-radius-full: 9999px;
--shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.1);
--shadow-md: 0 8px 30px rgba(0, 0, 0, 0.12);
--shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.2);
/* HSL Colors (Orange/Amber Culinary Theme) */
--hue-primary: 28;
--hue-secondary: 14;
--hue-neutral: 215;
/* Theme Dependent Variables (Defined for Light Theme first, toggled to Dark below) */
--primary: hsl(var(--hue-primary), 95%, 52%);
--primary-hover: hsl(var(--hue-primary), 95%, 44%);
--primary-glow: hsla(var(--hue-primary), 95%, 52%, 0.15);
--secondary: hsl(var(--hue-secondary), 88%, 56%);
--accent: hsl(142, 70%, 45%); /* Cook mode green */
--danger: hsl(0, 84%, 60%);
--danger-hover: hsl(0, 84%, 50%);
--bg-app: hsl(var(--hue-neutral), 30%, 96%);
--bg-card: hsl(0, 0%, 100%);
--bg-nav: rgba(255, 255, 255, 0.8);
--border-color: hsl(var(--hue-neutral), 20%, 88%);
--text-main: hsl(var(--hue-neutral), 40%, 16%);
--text-muted: hsl(var(--hue-neutral), 20%, 45%);
--text-white: #ffffff;
--glass-bg: rgba(255, 255, 255, 0.6);
--glass-border: rgba(255, 255, 255, 0.4);
--glass-blur: blur(12px);
}
/* Dark Theme Overrides */
.dark-theme,
body.dark-theme {
--bg-app: hsl(var(--hue-neutral), 38%, 7%);
--bg-card: hsl(var(--hue-neutral), 30%, 11%);
--bg-nav: rgba(15, 23, 42, 0.8);
--border-color: hsl(var(--hue-neutral), 25%, 18%);
--text-main: hsl(var(--hue-neutral), 15%, 92%);
--text-muted: hsl(var(--hue-neutral), 15%, 65%);
--glass-bg: rgba(15, 23, 42, 0.55);
--glass-border: rgba(255, 255, 255, 0.06);
--shadow-md: 0 8px 32px rgba(0, 0, 0, 0.3);
--shadow-lg: 0 20px 50px rgba(0, 0, 0, 0.5);
}
/* Base Resets */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: var(--font-body);
}
body {
background-color: var(--bg-app);
color: var(--text-main);
transition: background-color var(--transition-normal), color var(--transition-normal);
min-height: 100vh;
overflow-x: hidden;
}
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-heading);
font-weight: 700;
letter-spacing: -0.02em;
}
/* Utility Components */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 10px 20px;
border-radius: var(--border-radius-md);
font-family: var(--font-heading);
font-weight: 600;
font-size: 0.95rem;
border: none;
cursor: pointer;
transition: all var(--transition-fast);
white-space: nowrap;
}
.btn-primary {
background-color: var(--primary);
color: var(--text-white);
box-shadow: 0 4px 14px var(--primary-glow);
}
.btn-primary:hover {
background-color: var(--primary-hover);
transform: translateY(-1px);
box-shadow: 0 6px 20px var(--primary-glow);
}
.btn-primary:active {
transform: translateY(0);
}
.btn-outline {
background-color: transparent;
border: 2px solid var(--border-color);
color: var(--text-main);
}
.btn-outline:hover {
background-color: var(--border-color);
border-color: var(--text-muted);
}
.btn-accent {
background-color: var(--accent);
color: var(--text-white);
box-shadow: 0 4px 14px rgba(16, 185, 129, 0.25);
}
.btn-accent:hover {
background-color: hsl(142, 70%, 38%);
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(16, 185, 129, 0.35);
}
.btn-icon-round {
width: 44px;
height: 44px;
border-radius: var(--border-radius-full);
display: flex;
align-items: center;
justify-content: center;
border: none;
background-color: var(--glass-bg);
border: 1px solid var(--glass-border);
color: var(--text-main);
cursor: pointer;
transition: all var(--transition-fast);
backdrop-filter: var(--glass-blur);
}
.btn-icon-round:hover {
transform: scale(1.08);
background-color: var(--border-color);
}
.btn-danger-hover:hover {
background-color: var(--danger);
color: var(--text-white);
border-color: var(--danger);
}
.btn-lg {
padding: 14px 28px;
font-size: 1.05rem;
border-radius: var(--border-radius-md);
}
.close-btn {
background: none;
border: none;
color: var(--text-muted);
cursor: pointer;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--border-radius-full);
transition: all var(--transition-fast);
}
.close-btn:hover {
background-color: var(--border-color);
color: var(--text-main);
}
/* Header Styling */
.app-header {
position: sticky;
top: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 5%;
background-color: var(--bg-nav);
border-bottom: 1px solid var(--border-color);
backdrop-filter: var(--glass-blur);
transition: background-color var(--transition-normal), border-color var(--transition-normal);
}
.header-logo {
display: flex;
align-items: center;
gap: 10px;
cursor: pointer;
}
.logo-icon {
background: linear-gradient(135deg, var(--primary), var(--secondary));
width: 40px;
height: 40px;
border-radius: var(--border-radius-md);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-white);
box-shadow: 0 4px 12px var(--primary-glow);
}
.logo-text {
font-family: var(--font-heading);
font-size: 1.5rem;
font-weight: 800;
color: var(--text-main);
}
.logo-text span {
color: var(--primary);
}
.header-actions {
display: flex;
align-items: center;
gap: 12px;
}
.theme-toggle {
background: none;
border: 1px solid var(--border-color);
width: 40px;
height: 40px;
border-radius: var(--border-radius-md);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-muted);
cursor: pointer;
transition: all var(--transition-fast);
}
.theme-toggle:hover {
background-color: var(--border-color);
color: var(--text-main);
}
/* Theme Toggle Icon Behaviors */
.theme-toggle .sun-icon { display: none; }
.theme-toggle .moon-icon { display: block; }
.dark-theme .theme-toggle .sun-icon { display: block; }
.dark-theme .theme-toggle .moon-icon { display: none; }
/* Main Container */
.app-container {
max-width: 1400px;
margin: 0 auto;
padding: 40px 5%;
}
/* Hero & Input Bar Section */
.scraping-hero {
text-align: center;
margin-bottom: 50px;
animation: fadeIn 0.8s ease-out;
}
.hero-content h1 {
font-size: 2.8rem;
line-height: 1.15;
margin-bottom: 12px;
background: linear-gradient(to right, var(--text-main), hsl(var(--hue-primary), 90%, 55%));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.hero-content p {
font-size: 1.15rem;
color: var(--text-muted);
max-width: 650px;
margin: 0 auto 30px auto;
line-height: 1.6;
}
.url-input-form {
max-width: 750px;
margin: 0 auto;
display: flex;
gap: 12px;
background-color: var(--bg-card);
padding: 8px;
border-radius: var(--border-radius-lg);
border: 1px solid var(--border-color);
box-shadow: var(--shadow-md);
transition: all var(--transition-normal);
}
.url-input-form:focus-within {
border-color: var(--primary);
box-shadow: 0 0 0 4px var(--primary-glow);
}
.input-wrapper {
position: relative;
flex-grow: 1;
display: flex;
align-items: center;
}
.input-icon {
position: absolute;
left: 16px;
color: var(--text-muted);
width: 20px;
height: 20px;
}
.url-input-form input {
width: 100%;
padding: 14px 14px 14px 50px;
background: transparent;
border: none;
font-size: 1rem;
color: var(--text-main);
outline: none;
}
.url-input-form input::placeholder {
color: var(--text-muted);
opacity: 0.8;
}
/* Recipes Dashboard Library */
.library-section {
border-top: 1px solid var(--border-color);
padding-top: 40px;
}
.library-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 24px;
flex-wrap: wrap;
gap: 16px;
}
.section-title {
font-size: 1.8rem;
color: var(--text-main);
}
.filter-controls {
display: flex;
gap: 12px;
align-items: center;
}
.search-wrapper {
position: relative;
display: flex;
align-items: center;
}
.search-icon {
position: absolute;
left: 14px;
color: var(--text-muted);
width: 18px;
height: 18px;
}
.search-wrapper input {
padding: 10px 14px 10px 42px;
border-radius: var(--border-radius-md);
border: 1px solid var(--border-color);
background-color: var(--bg-card);
color: var(--text-main);
outline: none;
font-size: 0.95rem;
width: 260px;
transition: all var(--transition-fast);
}
.search-wrapper input:focus {
border-color: var(--primary);
width: 320px;
box-shadow: 0 0 0 3px var(--primary-glow);
}
/* Grid layout of recipes */
.recipes-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 30px;
}
/* Recipe Card Styling */
.recipe-card {
background-color: var(--bg-card);
border-radius: var(--border-radius-lg);
border: 1px solid var(--border-color);
overflow: hidden;
box-shadow: var(--shadow-sm);
transition: all var(--transition-normal);
cursor: pointer;
display: flex;
flex-direction: column;
height: 100%;
position: relative;
}
.recipe-card:hover {
transform: translateY(-6px);
box-shadow: var(--shadow-md);
border-color: hsl(var(--hue-primary), 40%, 30%);
}
.recipe-card-img-wrapper {
position: relative;
width: 100%;
padding-top: 68%; /* aspect ratio */
background-color: var(--border-color);
overflow: hidden;
}
.recipe-card-img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: transform var(--transition-slow);
}
.recipe-card:hover .recipe-card-img {
transform: scale(1.05);
}
.recipe-card-img-placeholder {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--text-muted);
gap: 10px;
background: linear-gradient(135deg, var(--bg-card), var(--border-color));
}
.recipe-card-img-placeholder i {
width: 48px;
height: 48px;
opacity: 0.5;
}
.recipe-card-content {
padding: 20px;
display: flex;
flex-direction: column;
flex-grow: 1;
}
.recipe-card-origin {
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--primary);
font-weight: 700;
margin-bottom: 6px;
}
.recipe-card-title {
font-size: 1.25rem;
font-weight: 700;
color: var(--text-main);
margin-bottom: 8px;
line-height: 1.3;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.recipe-card-desc {
font-size: 0.9rem;
color: var(--text-muted);
line-height: 1.5;
margin-bottom: 16px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.recipe-card-meta {
margin-top: auto;
padding-top: 14px;
border-top: 1px solid var(--border-color);
display: flex;
gap: 16px;
font-size: 0.8rem;
color: var(--text-muted);
}
.recipe-card-meta span {
display: flex;
align-items: center;
gap: 4px;
}
.recipe-card-meta span i {
width: 14px;
height: 14px;
}
/* Empty State */
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 80px 20px;
color: var(--text-muted);
animation: fadeIn var(--transition-normal);
}
.empty-icon {
background-color: var(--border-color);
width: 80px;
height: 80px;
border-radius: var(--border-radius-full);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 18px;
color: var(--text-muted);
}
.empty-icon i {
width: 36px;
height: 36px;
}
.empty-state h3 {
font-size: 1.4rem;
color: var(--text-main);
margin-bottom: 6px;
}
.empty-state p {
max-width: 340px;
font-size: 0.95rem;
line-height: 1.5;
}
/* Modal Overlay Framework */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, 0.6);
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity var(--transition-normal);
backdrop-filter: blur(4px);
padding: 20px;
}
.modal-overlay.active {
opacity: 1;
pointer-events: all;
}
.modal-box {
background-color: var(--bg-card);
border-radius: var(--border-radius-lg);
border: 1px solid var(--border-color);
width: 100%;
max-height: 90vh;
box-shadow: var(--shadow-lg);
display: flex;
flex-direction: column;
overflow: hidden;
transform: translateY(30px) scale(0.96);
transition: transform var(--transition-normal);
}
.modal-overlay.active .modal-box {
transform: translateY(0) scale(1);
}
.max-width-lg { max-width: 850px; }
.max-width-xl { max-width: 1100px; }
.no-padding { padding: 0; }
.modal-header {
padding: 20px 24px;
border-bottom: 1px solid var(--border-color);
display: flex;
align-items: center;
justify-content: space-between;
}
.modal-header h3 {
font-size: 1.4rem;
color: var(--text-main);
}
.modal-body {
padding: 24px;
overflow-y: auto;
flex-grow: 1;
}
.modal-footer {
padding: 16px 24px;
border-top: 1px solid var(--border-color);
display: flex;
justify-content: flex-end;
gap: 12px;
background-color: var(--bg-app);
}
/* Form Styles inside Modals */
.form-grid-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.form-grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 20px;
}
@media (max-width: 768px) {
.form-grid-2, .form-grid-3 {
grid-template-columns: 1fr;
}
}
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
font-size: 0.88rem;
font-weight: 600;
color: var(--text-main);
margin-bottom: 6px;
font-family: var(--font-heading);
}
.form-help {
font-size: 0.8rem;
color: var(--text-muted);
margin-bottom: 10px;
}
.form-group input[type="text"],
.form-group input[type="url"],
.form-group textarea {
width: 100%;
padding: 12px 14px;
border-radius: var(--border-radius-md);
border: 1px solid var(--border-color);
background-color: var(--bg-app);
color: var(--text-main);
outline: none;
font-size: 0.95rem;
transition: all var(--transition-fast);
}
.form-group input[type="text"]:focus,
.form-group input[type="url"]:focus,
.form-group textarea:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px var(--primary-glow);
}
.custom-img-url-wrapper {
background-color: var(--bg-app);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
padding: 2px;
}
.custom-img-url-wrapper input {
padding: 10px 10px 10px 42px;
border: none;
outline: none;
background: transparent;
width: 100%;
color: var(--text-main);
}
/* Image Selection Gallery */
.image-gallery-selector {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
gap: 12px;
margin-bottom: 14px;
max-height: 230px;
overflow-y: auto;
padding: 4px;
background-color: var(--bg-app);
border-radius: var(--border-radius-md);
border: 1px solid var(--border-color);
}
.image-option {
position: relative;
aspect-ratio: 1;
border-radius: var(--border-radius-sm);
overflow: hidden;
border: 3px solid transparent;
cursor: pointer;
transition: all var(--transition-fast);
background-color: var(--border-color);
}
.image-option img {
width: 100%;
height: 100%;
object-fit: cover;
}
.image-option:hover {
transform: scale(0.96);
opacity: 0.9;
}
.image-option.selected {
border-color: var(--primary);
box-shadow: var(--shadow-sm);
}
.image-option.selected::after {
content: '✓';
position: absolute;
top: 4px;
right: 4px;
background-color: var(--primary);
color: var(--text-white);
width: 18px;
height: 18px;
border-radius: var(--border-radius-full);
display: flex;
align-items: center;
justify-content: center;
font-size: 0.7rem;
font-weight: 700;
}
/* Interactive Detail Viewer Modal */
.detail-hero-banner {
height: 380px;
position: relative;
background-size: cover;
background-position: center;
display: flex;
align-items: flex-end;
padding: 30px 40px;
}
.detail-hero-banner::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(to bottom, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.1) 40%, rgba(0,0,0,0.85) 100%);
}
.detail-back-btn {
position: absolute;
top: 24px;
left: 24px;
display: flex;
align-items: center;
gap: 8px;
background-color: rgba(0, 0, 0, 0.5);
border: 1px solid rgba(255, 255, 255, 0.15);
backdrop-filter: blur(8px);
color: var(--text-white);
padding: 8px 16px;
border-radius: var(--border-radius-full);
cursor: pointer;
font-family: var(--font-heading);
font-weight: 600;
transition: all var(--transition-fast);
}
.detail-back-btn:hover {
background-color: rgba(0, 0, 0, 0.7);
transform: translateX(-3px);
}
.detail-actions {
position: absolute;
top: 24px;
right: 24px;
display: flex;
gap: 12px;
}
.detail-main-content {
background-color: var(--bg-card);
padding: 40px;
overflow-y: auto;
flex-grow: 1;
}
@media (max-width: 768px) {
.detail-hero-banner { height: 240px; }
.detail-main-content { padding: 20px; }
}
.detail-header-info {
margin-bottom: 30px;
}
#recipe-detail-title {
font-size: 2.2rem;
color: var(--text-main);
margin-bottom: 12px;
}
.recipe-meta-tags {
display: flex;
gap: 20px;
flex-wrap: wrap;
margin-bottom: 16px;
}
.recipe-meta-tags span {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.9rem;
color: var(--text-muted);
background-color: var(--bg-app);
padding: 6px 14px;
border-radius: var(--border-radius-full);
border: 1px solid var(--border-color);
}
.recipe-meta-tags span .val {
font-weight: 600;
color: var(--text-main);
}
.recipe-meta-tags span i {
width: 16px;
height: 16px;
color: var(--primary);
}
.recipe-detail-desc {
font-size: 1.05rem;
color: var(--text-muted);
line-height: 1.6;
}
/* Scaler panel & cooking trigger */
.servings-scaler-panel {
display: flex;
align-items: center;
background-color: var(--bg-app);
padding: 14px 24px;
border-radius: var(--border-radius-md);
border: 1px solid var(--border-color);
margin-bottom: 35px;
flex-wrap: wrap;
gap: 20px;
}
.scale-label {
font-weight: 600;
font-size: 0.95rem;
color: var(--text-muted);
}
.scaler-controls {
display: flex;
align-items: center;
background-color: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-full);
padding: 4px;
}
.scaler-btn {
width: 32px;
height: 32px;
border-radius: var(--border-radius-full);
background: none;
border: none;
color: var(--text-main);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all var(--transition-fast);
}
.scaler-btn:hover {
background-color: var(--border-color);
}
.scaler-val {
font-weight: 700;
font-size: 1rem;
padding: 0 14px;
min-width: 44px;
text-align: center;
}
.cooking-mode-trigger {
margin-left: auto;
}
@media (max-width: 768px) {
.cooking-mode-trigger {
width: 100%;
margin-left: 0;
}
}
/* Split layout inside detail modal */
.detail-split-layout {
display: grid;
grid-template-columns: 2fr 3fr;
gap: 50px;
}
@media (max-width: 992px) {
.detail-split-layout {
grid-template-columns: 1fr;
gap: 40px;
}
}
.detail-ingredients-column h3,
.detail-instructions-column h3 {
font-size: 1.4rem;
margin-bottom: 4px;
}
.section-subtext {
font-size: 0.85rem;
color: var(--text-muted);
margin-bottom: 20px;
}
/* Ingredients Checklist */
.ingredients-check-list {
list-style: none;
}
.ingredient-checkbox-item {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 12px 0;
border-bottom: 1px solid var(--border-color);
cursor: pointer;
}
.ingredient-checkbox-item:last-child {
border-bottom: none;
}
.checkbox-custom {
margin-top: 2px;
width: 20px;
height: 20px;
border-radius: 6px;
border: 2px solid var(--border-color);
display: flex;
align-items: center;
justify-content: center;
color: transparent;
font-size: 0.75rem;
font-weight: 800;
transition: all var(--transition-fast);
flex-shrink: 0;
background-color: var(--bg-card);
}
.ingredient-checkbox-item:hover .checkbox-custom {
border-color: var(--primary);
}
.ingredient-checkbox-item.checked .checkbox-custom {
background-color: var(--primary);
border-color: var(--primary);
color: var(--text-white);
}
.ingredient-text {
font-size: 0.98rem;
line-height: 1.5;
color: var(--text-main);
transition: all var(--transition-fast);
}
.ingredient-checkbox-item.checked .ingredient-text {
color: var(--text-muted);
text-decoration: line-through;
}
/* Instructions lists */
.instructions-progress-list {
list-style: none;
}
.instruction-step-item {
position: relative;
padding-left: 45px;
padding-bottom: 26px;
cursor: pointer;
}
.instruction-step-item:last-child {
padding-bottom: 0;
}
/* Connector Line */
.instruction-step-item::after {
content: '';
position: absolute;
left: 17px;
top: 36px;
bottom: 0;
width: 2px;
background-color: var(--border-color);
z-index: 1;
}
.instruction-step-item:last-child::after {
display: none;
}
.step-number-bullet {
position: absolute;
left: 0;
top: 2px;
width: 36px;
height: 36px;
border-radius: var(--border-radius-full);
background-color: var(--bg-app);
border: 2px solid var(--border-color);
color: var(--text-muted);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-heading);
font-weight: 700;
font-size: 0.9rem;
z-index: 2;
transition: all var(--transition-fast);
}
.instruction-step-item:hover .step-number-bullet {
border-color: var(--primary);
color: var(--primary);
}
.instruction-step-item.active .step-number-bullet {
border-color: var(--primary);
background-color: var(--primary);
color: var(--text-white);
box-shadow: 0 0 0 4px var(--primary-glow);
}
.instruction-step-item.checked .step-number-bullet {
border-color: var(--accent);
background-color: var(--accent);
color: var(--text-white);
}
.step-text-block {
font-size: 1rem;
line-height: 1.6;
color: var(--text-main);
transition: all var(--transition-fast);
}
.instruction-step-item.checked .step-text-block {
color: var(--text-muted);
}
/* Header style instructions (e.g. ### Sauce) */
.instruction-step-item.section-header-step {
padding-left: 0;
padding-top: 15px;
padding-bottom: 12px;
cursor: default;
}
.instruction-step-item.section-header-step::after {
left: 0;
}
.instruction-step-item.section-header-step .step-text-block {
font-family: var(--font-heading);
font-weight: 700;
font-size: 1.2rem;
color: var(--primary);
}
.instruction-step-item.section-header-step .step-number-bullet {
display: none;
}
/* Fullscreen Cooking Mode */
.cooking-mode-overlay {
background-color: hsl(var(--hue-neutral), 40%, 6%);
padding: 0;
}
.cooking-container {
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
color: var(--text-white);
}
.cooking-header {
padding: 20px 40px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
display: flex;
align-items: center;
justify-content: space-between;
}
.cooking-brand {
display: flex;
align-items: center;
gap: 8px;
color: var(--primary);
font-family: var(--font-heading);
font-weight: 700;
font-size: 1.1rem;
}
.cooking-title-indicator {
font-weight: 600;
font-size: 1rem;
opacity: 0.8;
max-width: 30%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Stopwatch inside Cooking mode */
.cook-timer-panel {
display: flex;
align-items: center;
gap: 12px;
background-color: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
padding: 6px 16px;
border-radius: var(--border-radius-full);
}
.timer-display {
font-family: monospace;
font-size: 1.15rem;
font-weight: 700;
color: var(--primary);
}
.timer-btn {
background: none;
border: none;
color: var(--text-white);
cursor: pointer;
width: 26px;
height: 26px;
border-radius: var(--border-radius-full);
display: flex;
align-items: center;
justify-content: center;
transition: all var(--transition-fast);
}
.timer-btn:hover {
background-color: rgba(255, 255, 255, 0.1);
}
.color-white {
color: var(--text-white) !important;
}
/* Large Stepper card for focused view */
.cooking-stepper-box {
flex-grow: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
max-width: 900px;
width: 90%;
margin: 0 auto;
padding: 40px 0;
}
.step-progress-track {
width: 100%;
height: 6px;
background-color: rgba(255, 255, 255, 0.08);
border-radius: var(--border-radius-full);
overflow: hidden;
margin-bottom: 50px;
}
.step-progress-bar {
height: 100%;
background-color: var(--primary);
width: 20%;
border-radius: var(--border-radius-full);
transition: width var(--transition-normal);
}
.cooking-slide {
text-align: center;
animation: slideIn var(--transition-normal) ease-out;
}
.cooking-step-badge {
background: var(--primary-glow);
color: var(--primary);
border: 1px solid rgba(245, 158, 11, 0.2);
padding: 8px 20px;
border-radius: var(--border-radius-full);
font-size: 0.9rem;
font-weight: 700;
letter-spacing: 0.05em;
font-family: var(--font-heading);
text-transform: uppercase;
display: inline-block;
margin-bottom: 30px;
}
.cooking-step-text {
font-size: 2.2rem;
line-height: 1.5;
font-weight: 500;
max-width: 800px;
margin: 0 auto;
}
@media (max-width: 768px) {
.cooking-step-text { font-size: 1.6rem; }
.cooking-header { padding: 15px 20px; }
}
.cooking-controls {
padding: 30px 40px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
display: flex;
align-items: center;
justify-content: space-between;
}
.step-dots {
display: flex;
gap: 8px;
}
.dot {
width: 10px;
height: 10px;
border-radius: var(--border-radius-full);
background-color: rgba(255, 255, 255, 0.15);
cursor: pointer;
transition: all var(--transition-fast);
}
.dot.active {
background-color: var(--primary);
transform: scale(1.3);
}
/* Full Loading / Scraping Overlay */
.loading-overlay {
background-color: rgba(15, 23, 42, 0.85);
backdrop-filter: blur(8px);
}
.loader-card {
background-color: var(--bg-card);
border-radius: var(--border-radius-lg);
border: 1px solid var(--border-color);
padding: 40px;
text-align: center;
max-width: 440px;
width: 90%;
box-shadow: var(--shadow-lg);
animation: scaleUp 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.spinner-outer {
position: relative;
width: 90px;
height: 90px;
margin: 0 auto 24px auto;
}
.spinner-inner {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: var(--border-radius-full);
border: 4px solid var(--border-color);
border-top-color: var(--primary);
border-bottom-color: var(--secondary);
animation: spin 1.2s linear infinite;
}
.spinner-logo {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 32px;
height: 32px;
color: var(--primary);
}
.loader-card h3 {
font-size: 1.4rem;
color: var(--text-main);
margin-bottom: 8px;
}
.loader-subtitle {
font-size: 0.9rem;
color: var(--text-muted);
margin-bottom: 28px;
}
.loader-steps {
list-style: none;
text-align: left;
display: flex;
flex-direction: column;
gap: 12px;
}
.loader-step {
display: flex;
align-items: center;
gap: 12px;
font-size: 0.92rem;
color: var(--text-muted);
padding: 6px 12px;
border-radius: var(--border-radius-sm);
background-color: transparent;
transition: all var(--transition-fast);
}
.loader-step i {
width: 18px;
height: 18px;
}
.loader-step.active {
color: var(--primary);
background-color: var(--bg-app);
font-weight: 600;
}
.loader-step.completed {
color: var(--accent);
}
.loader-step.completed i {
color: var(--accent);
}
/* Animations */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes scaleUp {
from { transform: scale(0.92); opacity: 0; }
to { transform: scale(1); opacity: 1; }
}
@keyframes slideIn {
from { transform: translateY(12px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.spinning-icon {
animation: spin 2s linear infinite;
}