*,::after,::before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{font-family:var(--font-body);font-size:var(--font-size-md);line-height:var(--line-height-normal);color:var(--text-primary);background:var(--bg-gradient);min-height:100vh;min-height:100dvh;overflow-x:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{position:relative;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.view{flex:1;display:flex;flex-direction:column;padding:var(--space-md);padding-top:calc(var(--safe-area-top) + var(--space-md));padding-bottom:calc(var(--safe-area-bottom) + var(--nav-height) + var(--space-md));opacity:0;transition:opacity var(--transition-medium)}.view.active{opacity:1}.view.hidden{display:none}.view--full{padding:0;padding-top:var(--safe-area-top);padding-bottom:var(--safe-area-bottom)}.view--map{padding:0}.header{position:fixed;top:0;left:0;right:0;height:calc(var(--header-height) + var(--safe-area-top));padding-top:var(--safe-area-top);background:linear-gradient(to bottom,var(--bg-dark) 0,transparent 100%);z-index:var(--z-fixed);display:flex;align-items:center;justify-content:space-between;padding-left:var(--space-md);padding-right:var(--space-md)}.header__title{font-family:var(--font-display);font-size:var(--font-size-xl);color:var(--text-accent);text-shadow:var(--shadow-text)}.header__back{display:flex;align-items:center;gap:var(--space-sm);color:var(--text-primary);text-decoration:none;font-size:var(--font-size-sm)}.nav-bottom{position:fixed;bottom:0;left:0;right:0;height:calc(var(--nav-height) + var(--safe-area-bottom));padding-bottom:var(--safe-area-bottom);background:var(--bg-card);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:var(--border-subtle);z-index:var(--z-fixed);display:flex;justify-content:space-around;align-items:center}.nav-bottom__item{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs);padding:var(--space-sm);color:var(--text-secondary);text-decoration:none;font-size:var(--font-size-xs);transition:color var(--transition-fast)}.nav-bottom__item.active{color:var(--color-accent)}.nav-bottom__item:hover{color:var(--text-primary)}.nav-bottom__icon{font-size:1.5rem}.container{width:100%;max-width:var(--max-width-content);margin:0 auto;padding:0 var(--space-md)}.container--wide{max-width:var(--max-width-wide)}.container--full{max-width:none;padding:0}.grid{display:grid;gap:var(--space-md)}.grid--2{grid-template-columns:repeat(2,1fr)}.grid--3{grid-template-columns:repeat(3,1fr)}.grid--auto{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-xs{gap:var(--space-xs)}.gap-sm{gap:var(--space-sm)}.gap-md{gap:var(--space-md)}.gap-lg{gap:var(--space-lg)}.gap-xl{gap:var(--space-xl)}.flex-1{flex:1}.flex-grow{flex-grow:1}.flex-shrink-0{flex-shrink:0}.m-0{margin:0}.m-xs{margin:var(--space-xs)}.m-sm{margin:var(--space-sm)}.m-md{margin:var(--space-md)}.m-lg{margin:var(--space-lg)}.m-xl{margin:var(--space-xl)}.mt-0{margin-top:0}.mt-xs{margin-top:var(--space-xs)}.mt-sm{margin-top:var(--space-sm)}.mt-md{margin-top:var(--space-md)}.mt-lg{margin-top:var(--space-lg)}.mt-xl{margin-top:var(--space-xl)}.mb-0{margin-bottom:0}.mb-xs{margin-bottom:var(--space-xs)}.mb-sm{margin-bottom:var(--space-sm)}.mb-md{margin-bottom:var(--space-md)}.mb-lg{margin-bottom:var(--space-lg)}.mb-xl{margin-bottom:var(--space-xl)}.p-0{padding:0}.p-xs{padding:var(--space-xs)}.p-sm{padding:var(--space-sm)}.p-md{padding:var(--space-md)}.p-lg{padding:var(--space-lg)}.p-xl{padding:var(--space-xl)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-md{font-size:var(--font-size-md)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.font-display{font-family:var(--font-display)}.font-body{font-family:var(--font-body)}.font-light{font-weight:300}.font-normal{font-weight:400}.font-bold{font-weight:700}.text-primary{color:var(--text-primary)}.text-secondary{color:var(--text-secondary)}.text-muted{color:var(--text-muted)}.text-accent{color:var(--text-accent)}.text-ghost{color:var(--text-ghost)}.hidden{display:none!important}.invisible{visibility:hidden}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width:640px){.sm\:grid--2{grid-template-columns:repeat(2,1fr)}.sm\:grid--3{grid-template-columns:repeat(3,1fr)}.sm\:hidden{display:none}.sm\:flex{display:flex}}@media (min-width:768px){.md\:grid--2{grid-template-columns:repeat(2,1fr)}.md\:grid--3{grid-template-columns:repeat(3,1fr)}.md\:grid--4{grid-template-columns:repeat(4,1fr)}.md\:hidden{display:none}.md\:flex{display:flex}.view{padding:var(--space-xl);padding-top:calc(var(--safe-area-top) + var(--space-xl));padding-bottom:calc(var(--safe-area-bottom) + var(--nav-height) + var(--space-xl))}}@media (min-width:1024px){.lg\:grid--3{grid-template-columns:repeat(3,1fr)}.lg\:grid--4{grid-template-columns:repeat(4,1fr)}.lg\:hidden{display:none}.lg\:flex{display:flex}.nav-bottom{left:0;top:0;bottom:0;right:auto;width:80px;height:auto;flex-direction:column;padding:var(--space-lg) 0;border-top:none;border-right:var(--border-subtle)}.view{margin-left:80px;padding-bottom:var(--space-xl)}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-darker)}::-webkit-scrollbar-thumb{background:var(--color-primary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--color-accent)}::selection{background:var(--color-accent);color:var(--bg-dark)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}