@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInRight{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes slideOutLeft{from{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-30px)}}.fade-in{animation:fadeIn .3s var(--spring) both}.slide-in{animation:slideInRight .35s var(--spring) both}.slide-out{animation:slideOutLeft .25s ease-out both}@keyframes wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-12deg)}40%{transform:rotate(10deg)}60%{transform:rotate(-8deg)}80%{transform:rotate(5deg)}}.wiggle{animation:wiggle .6s ease-in-out infinite;animation-delay:2s}body{display:flex;align-items:center;justify-content:center;padding:var(--space-6)}.dashboard{text-align:center;max-width:800px;width:100%}.dashboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-4)}.header-right{display:flex;gap:var(--space-2)}.header-btn{background:var(--card-bg);border:2px solid var(--gray-200);border-radius:var(--radius-md);color:var(--gray-600);cursor:pointer;padding:var(--space-2);display:flex;align-items:center;justify-content:center;transition:all var(--transition-normal),transform .2s var(--spring)}.header-btn:hover{border-color:var(--primary)}.header-btn:active{transform:scale(.92)}[data-theme=dark] .header-btn{color:var(--gray-400)}.header-btn.bike-good{color:#16a34a}.header-btn.bike-medium{color:#d97706}.header-btn.bike-bad{color:#dc2626}[data-theme=dark] .header-btn.bike-good{color:#4ade80}[data-theme=dark] .header-btn.bike-medium{color:#fbbf24}[data-theme=dark] .header-btn.bike-bad{color:#f87171}.bike-weather-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.2);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:199;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease}.bike-weather-backdrop.visible{opacity:1;visibility:visible}.bike-weather-popup{position:fixed;background:var(--card-bg);border:1px solid var(--gray-200);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);min-width:280px;z-index:200;display:none}.bike-weather-popup.visible{display:block}.bike-weather-popup.animated{display:block;opacity:0;transform:scale(.9) translateY(-8px);transform-origin:top right;pointer-events:none;transition:opacity .2s ease,transform .3s var(--spring)}.bike-weather-popup.animated.visible{opacity:1;transform:scale(1) translateY(0);pointer-events:auto}[data-theme=dark] .bike-weather-popup{background:var(--gray-800);border-color:var(--gray-700)}@media (max-width:480px){.bike-weather-popup{left:50%!important;right:auto!important;top:50%!important;transform:translate(-50%,-50%)}.bike-weather-popup.animated{transform:translate(-50%,-50%) scale(.9)}.bike-weather-popup.animated.visible{transform:translate(-50%,-50%) scale(1)}}@media (max-height:500px) and (orientation:landscape){.bike-weather-popup{left:50%!important;right:auto!important;top:50%!important;transform:translate(-50%,-50%);min-width:auto;width:90vw;max-width:560px}.bike-weather-popup.animated{transform:translate(-50%,-50%) scale(.9)}.bike-weather-popup.animated.visible{transform:translate(-50%,-50%) scale(1)}.bike-weather-content{display:flex;gap:var(--space-4)}.bike-day{flex:1;margin-bottom:0;padding-bottom:0;border-bottom:none;border-right:1px solid var(--gray-200);padding-right:var(--space-4)}.bike-day:last-child{border-right:none;padding-right:0}[data-theme=dark] .bike-day{border-right-color:var(--gray-700)}}.bike-weather-title{padding:var(--space-3) var(--space-4);font-weight:600;font-size:1rem;border-bottom:1px solid var(--gray-200);color:var(--gray-700)}[data-theme=dark] .bike-weather-title{border-bottom-color:var(--gray-700);color:var(--gray-300)}.bike-weather-content{padding:var(--space-4)}.bike-weather-content .loading-spinner{width:24px;height:24px;margin:var(--space-2) auto}.bike-day{margin-bottom:var(--space-3);padding-bottom:var(--space-3);border-bottom:1px solid var(--gray-200)}.bike-day:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}[data-theme=dark] .bike-day{border-bottom-color:var(--gray-700)}.bike-day-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}.bike-day-label{font-weight:600;font-size:1rem;color:var(--gray-700)}[data-theme=dark] .bike-day-label{color:var(--gray-300)}.bike-score-value{font-size:1.5rem;font-weight:700;line-height:1}.bike-score-value.good{color:#16a34a}.bike-score-value.medium{color:#d97706}.bike-score-value.bad{color:#dc2626}.bike-conditions{display:flex;flex-direction:column;gap:var(--space-2);font-size:.9375rem}.bike-condition-row{display:flex;justify-content:space-between;align-items:center}.bike-condition-label{color:var(--gray-500)}.bike-condition-value{font-weight:500;color:var(--gray-800)}[data-theme=dark] .bike-condition-value{color:var(--gray-200)}.bike-weather-error{text-align:center;color:var(--gray-500);font-size:.875rem}.dashboard h1{color:var(--primary);font-size:2.5rem;margin-bottom:var(--space-2)}.subtitle{color:var(--gray-500);margin-bottom:var(--space-12);font-size:1.1rem}.apps-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--space-8);justify-items:center}.app-card{background:var(--card-bg);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-md);transition:background-color var(--transition-normal),transform .3s var(--spring),box-shadow var(--transition-normal);width:100%;display:flex;align-items:center;gap:var(--space-4);text-decoration:none;color:inherit;cursor:pointer}.app-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}.app-card:active{transform:translateY(-2px) scale(.98)}.app-icon{font-size:2rem;flex-shrink:0}.app-info{flex:1;min-width:0}.app-name{font-size:1.125rem;font-weight:600;color:var(--gray-900)}.app-description{color:var(--gray-500);font-size:.875rem;line-height:1.4;display:none}.app-button{display:inline-block;background:var(--primary);color:#fff;padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);text-decoration:none;font-weight:600;font-size:.875rem;transition:background-color var(--transition-fast),transform .2s var(--spring);flex-shrink:0}.app-button:hover{background:var(--primary-dark);color:#fff}.app-button:active{transform:scale(.94)}@media (min-width:640px){.apps-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.app-card{flex-direction:column;text-align:center;padding:var(--space-6);max-width:320px}.app-icon{font-size:3rem}.app-name{font-size:1.5rem;margin-bottom:var(--space-2)}.app-button{padding:var(--space-3) var(--space-6);font-size:1rem}}.install-banner{position:fixed;bottom:0;left:0;right:0;background:var(--card-bg);border-top:1px solid var(--gray-200);padding:var(--space-4);display:flex;align-items:center;justify-content:center;gap:var(--space-4);box-shadow:0 -4px 12px rgba(0,0,0,.1);z-index:1000;transform:translateY(100%);transition:transform var(--transition-normal)}.install-banner.visible{transform:translateY(0)}.install-banner-text{color:var(--gray-700);font-size:.9rem}.install-banner-btn{background:var(--primary);color:#fff;border:none;padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);font-weight:600;font-size:.875rem;cursor:pointer;transition:background-color var(--transition-fast)}.install-banner-btn:hover{background:var(--primary-dark)}.install-banner-dismiss{background:0 0;border:none;color:var(--gray-500);cursor:pointer;padding:var(--space-2);font-size:1.25rem;line-height:1}.install-banner-dismiss:hover{color:var(--gray-700)}.lunch-preview{margin-top:var(--space-8);background:var(--card-bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);overflow:hidden;text-align:left}.lunch-header{background:var(--primary);color:#fff;padding:var(--space-3) var(--space-4);display:flex;justify-content:space-between;align-items:center}.lunch-header h2{font-size:1rem;font-weight:600;margin:0;color:#fff}.lunch-header a{color:#fff;font-size:.8rem;opacity:.9}.lunch-header a:hover{opacity:1}.lunch-content{padding:var(--space-4)}.lunch-item{padding:var(--space-2) 0;border-bottom:1px solid var(--gray-100);display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-3);transition:transform .2s var(--spring),background-color .15s ease;border-radius:var(--radius-sm)}.lunch-item:last-child{border-bottom:none;padding-bottom:0}.lunch-name{color:var(--gray-900);font-size:.9rem}.lunch-price{color:var(--primary);font-weight:600;font-size:.85rem;white-space:nowrap}.outlet-badge{display:inline-block;font-size:.6875rem;font-weight:600;color:var(--gray-400);background:var(--gray-100);padding:.125rem .375rem;border-radius:var(--radius-sm);margin-left:var(--space-2);vertical-align:middle;white-space:nowrap}.lunch-empty{color:var(--gray-500);font-style:italic;font-size:.9rem}.lunch-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-6) var(--space-4);gap:var(--space-3)}.lunch-loading .loading-spinner{width:32px;height:32px;border:3px solid var(--gray-200);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}.lunch-loading .loading-text{color:var(--gray-400);font-size:.875rem}@keyframes spin{to{transform:rotate(360deg)}}.lunch-item.highlight{background:var(--primary);color:#fff;margin:0 calc(-1 * var(--space-4));padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);border-bottom-color:transparent}.lunch-item.highlight .lunch-name{color:#fff}.lunch-item.highlight .lunch-price{color:rgba(255,255,255,.9)}.random-btn{background:0 0;border:1px solid rgba(255,255,255,.4);color:#fff;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:.75rem;cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast),transform .2s var(--spring)}.random-btn:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.6)}.random-btn:active{transform:scale(.9)}.lunch-header-left{display:flex;align-items:center;gap:var(--space-3)}.lunch-header-right{display:flex;align-items:center;gap:var(--space-3)}.shortcut-badge{display:none;position:absolute;top:var(--space-2);right:var(--space-2);background:var(--gray-200);color:var(--gray-600);font-size:.75rem;font-weight:600;width:1.5rem;height:1.5rem;border-radius:var(--radius-sm);align-items:center;justify-content:center;font-family:monospace}.app-card{position:relative}@media (min-width:640px){.shortcut-badge{display:flex}}.changelog-modal{position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:2000;padding:var(--space-4);opacity:0;visibility:hidden;transition:opacity var(--transition-normal),visibility var(--transition-normal)}.changelog-modal.visible{opacity:1;visibility:visible}.changelog-content{background:var(--card-bg);border-radius:var(--radius-lg);max-width:400px;width:100%;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);transform:scale(.9) translateY(20px);transition:transform .3s var(--spring)}.changelog-modal.visible .changelog-content{transform:scale(1) translateY(0)}.changelog-header{padding:var(--space-4);border-bottom:1px solid var(--gray-200);display:flex;justify-content:space-between;align-items:center}.changelog-header h2{margin:0;font-size:1.25rem;color:var(--gray-900)}.changelog-close{background:0 0;border:none;font-size:1.5rem;color:var(--gray-500);cursor:pointer;line-height:1;padding:0}.changelog-close:hover{color:var(--gray-700)}.changelog-body{padding:var(--space-4);overflow-y:auto}.changelog-version{font-size:.8rem;color:var(--gray-500);margin-bottom:var(--space-3)}.changelog-body ul{margin:0;padding-left:var(--space-5);color:var(--gray-700)}.changelog-body li{margin-bottom:var(--space-2);line-height:1.4}.changelog-footer{padding:var(--space-4);border-top:1px solid var(--gray-200)}.changelog-btn{width:100%;background:var(--primary);color:#fff;border:none;padding:var(--space-3);border-radius:var(--radius-sm);font-weight:600;cursor:pointer;transition:background-color var(--transition-fast)}.changelog-btn:hover{background:var(--primary-dark)}.update-banner{position:fixed;top:var(--space-4);left:50%;transform:translateX(-50%) translateY(-100px);background:#111827;color:#fff;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);display:flex;align-items:center;gap:var(--space-3);box-shadow:var(--shadow-lg);z-index:3000;transition:transform var(--transition-normal)}.update-banner.visible{transform:translateX(-50%) translateY(0)}.update-banner-text{font-size:.9rem}.update-banner-btn{background:#fff;color:#111827;border:none;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-weight:600;font-size:.8rem;cursor:pointer;white-space:nowrap}.update-banner-btn:hover{background:#f3f4f6}.apps-grid-empty{color:var(--gray-500);font-style:italic;font-size:.9rem;padding:var(--space-8) var(--space-4)}.settings-modal{position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:2000;padding:var(--space-4);opacity:0;visibility:hidden;transition:opacity var(--transition-normal),visibility var(--transition-normal)}.settings-modal.visible{opacity:1;visibility:visible}.settings-content{background:var(--card-bg);border-radius:var(--radius-lg);max-width:400px;width:100%;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);transform:scale(.9) translateY(20px);transition:transform .3s var(--spring)}.settings-modal.visible .settings-content{transform:scale(1) translateY(0)}.settings-header{padding:var(--space-4);border-bottom:1px solid var(--gray-200);display:flex;justify-content:space-between;align-items:center}.settings-header h2{margin:0;font-size:1.25rem;color:var(--gray-900)}.settings-close{background:0 0;border:none;font-size:1.5rem;color:var(--gray-500);cursor:pointer;line-height:1;padding:0}.settings-close:hover{color:var(--gray-700)}.settings-body{padding:var(--space-4);overflow-y:auto}.settings-app-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.settings-app-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--gray-50);border-radius:var(--radius-sm);transition:opacity var(--transition-fast)}.settings-app-row.hidden-app{opacity:.5}.settings-app-icon{font-size:1.25rem;flex-shrink:0}.settings-app-name{flex:1;font-weight:500;color:var(--gray-900);font-size:.9rem}.settings-app-actions{display:flex;align-items:center;gap:var(--space-1)}.settings-move-btn{background:0 0;border:1px solid var(--gray-300);color:var(--gray-600);width:1.75rem;height:1.75rem;border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.75rem;transition:background-color var(--transition-fast),color var(--transition-fast);padding:0}.settings-move-btn:hover:not(:disabled){background:var(--gray-200);color:var(--gray-800)}.settings-move-btn:disabled{opacity:.3;cursor:not-allowed}.settings-visibility-toggle{width:1.25rem;height:1.25rem;cursor:pointer;accent-color:var(--primary);margin-left:var(--space-2)}.settings-section-label{font-size:.75rem;font-weight:600;color:var(--gray-500);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-2)}.settings-section-label:not(:first-child){margin-top:var(--space-4)}.settings-widget-row{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);background:var(--gray-50);border-radius:var(--radius-sm)}.settings-widget-name{font-weight:500;color:var(--gray-900);font-size:.9rem}.elan-preview{margin-top:var(--space-1);display:flex;flex-direction:column;gap:2px}.elan-preview-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:.75rem}.elan-preview-name{color:var(--gray-500);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.elan-preview-val{font-weight:600;font-variant-numeric:tabular-nums;flex-shrink:0}.elan-preview-val.green{color:var(--success)}.elan-preview-val.amber{color:var(--warning)}.elan-preview-val.red{color:var(--danger)}.elan-val-group{display:flex;align-items:center;gap:3px;flex-shrink:0}.elan-trend-arrow{width:11px;height:11px}.elan-trend-arrow.up{color:var(--danger)}.elan-trend-arrow.down{color:var(--success)}@media (min-width:640px){.elan-preview{align-items:center}.elan-preview-row{justify-content:center;gap:var(--space-3)}}.settings-advanced-unlocked{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);background:var(--gray-50);border-radius:var(--radius-sm)}.settings-advanced-status{font-weight:500;color:#16a34a;font-size:.9rem}.settings-advanced-form{display:flex;gap:var(--space-2)}.settings-advanced-input{flex:1;padding:var(--space-2) var(--space-3);border:1px solid var(--gray-300);border-radius:var(--radius-sm);font-size:.9rem;background:var(--gray-50);color:var(--gray-900)}.settings-advanced-lock-btn,.settings-advanced-unlock-btn{padding:var(--space-2) var(--space-3);border:none;border-radius:var(--radius-sm);font-size:.9rem;font-weight:500;cursor:pointer;white-space:nowrap}.settings-advanced-unlock-btn{background:var(--primary);color:#fff}.settings-advanced-lock-btn{background:var(--gray-300);color:var(--gray-700)}.settings-advanced-error{font-size:.8rem;color:#dc2626;margin-top:var(--space-1);min-height:1.2em}.feedback-modal{position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:2000;padding:var(--space-4);opacity:0;visibility:hidden;transition:opacity var(--transition-normal),visibility var(--transition-normal)}.feedback-modal.visible{opacity:1;visibility:visible}.feedback-content{background:var(--card-bg);border-radius:var(--radius-lg);max-width:400px;width:100%;overflow:hidden;box-shadow:var(--shadow-lg);transform:scale(.9) translateY(20px);transition:transform .3s var(--spring)}.feedback-modal.visible .feedback-content{transform:scale(1) translateY(0)}.feedback-header{padding:var(--space-4);border-bottom:1px solid var(--gray-200);display:flex;justify-content:space-between;align-items:center}.feedback-header h2{font-size:1.125rem;font-weight:600;color:var(--gray-900)}.feedback-close{background:0 0;border:none;font-size:1.5rem;color:var(--gray-400);cursor:pointer;line-height:1;padding:0}.feedback-close:hover{color:var(--gray-600)}.feedback-body{padding:var(--space-4)}.feedback-textarea{width:100%;min-height:120px;padding:var(--space-3);border:2px solid var(--gray-200);border-radius:var(--radius-md);font-family:var(--font-sans);font-size:.9375rem;resize:vertical;background:var(--input-bg);color:var(--gray-900);transition:border-color var(--transition-fast)}.feedback-textarea:focus{outline:0;border-color:var(--primary)}.feedback-footer{padding:var(--space-4);border-top:1px solid var(--gray-200);display:flex;justify-content:flex-end}.feedback-btn{background:var(--primary);color:#fff;border:none;padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);font-weight:600;cursor:pointer;transition:background-color var(--transition-fast),transform .2s var(--spring)}.feedback-btn:hover{background:var(--primary-dark)}.feedback-btn:active{transform:scale(.96)}.feedback-link{color:var(--gray-500);font-size:.8125rem;text-decoration:none;transition:color var(--transition-fast)}.feedback-link:hover{color:var(--primary)}.feedback-success{text-align:center;padding:var(--space-6);color:var(--gray-700)}.feedback-success-icon{font-size:2.5rem;margin-bottom:var(--space-3)}.help-modal{position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:2000;padding:var(--space-4);opacity:0;visibility:hidden;transition:opacity var(--transition-normal),visibility var(--transition-normal)}.help-modal.visible{opacity:1;visibility:visible}.help-content{background:var(--card-bg);border-radius:var(--radius-lg);max-width:500px;width:100%;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);transform:scale(.9) translateY(20px);transition:transform .3s var(--spring)}.help-modal.visible .help-content{transform:scale(1) translateY(0)}.help-header{padding:var(--space-4);border-bottom:1px solid var(--gray-200);display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.help-header h2{margin:0;font-size:1.25rem;color:var(--gray-900)}.help-close{background:0 0;border:none;font-size:1.5rem;color:var(--gray-500);cursor:pointer;line-height:1;padding:0}.help-close:hover{color:var(--gray-700)}.help-body{padding:var(--space-4);overflow-y:auto;color:var(--gray-700);font-size:.9375rem;line-height:1.6}.help-body h1{font-size:1.5rem;color:var(--primary);margin:0 0 var(--space-4) 0}.help-body h2{font-size:1.125rem;color:var(--gray-900);margin:var(--space-6) 0 var(--space-3) 0;padding-bottom:var(--space-2);border-bottom:2px solid var(--primary)}.help-body h2:first-child{margin-top:0}.help-body h3{font-size:1rem;color:var(--gray-800);margin:var(--space-4) 0 var(--space-2) 0}.help-body p{margin:0 0 var(--space-3) 0}.help-body ul{margin:0 0 var(--space-3) 0;padding-left:var(--space-5)}.help-body li{margin-bottom:var(--space-2)}.help-body code{background:var(--gray-100);padding:.125rem .375rem;border-radius:var(--radius-sm);font-size:.875em;color:var(--gray-800)}[data-theme=dark] .help-body code{background:var(--gray-700);color:var(--gray-200)}.help-body strong{color:var(--gray-900)}.help-loading{text-align:center;padding:var(--space-6);color:var(--gray-500)}