:root { --bootstrap-bg: #f3f7ee; --bootstrap-card-bg: #ffffff; --bootstrap-text: #10291b; --bootstrap-muted: #67726c; --bootstrap-accent: #286438; --bootstrap-accent-strong: #194d2b; --bootstrap-border: #dce6dc; --bootstrap-error: #a32020; --bootstrap-shadow: 0 1.2rem 3.6rem rgb(29 52 36 / 16%); --bootstrap-fade-duration: 180ms; } #bootstrap-screen { position: fixed; inset: 0; z-index: 1000; display: grid; align-items: safe center; justify-items: center; min-height: 100svh; box-sizing: border-box; padding: max(5.25rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) max(1rem, env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left)); overflow-x: hidden; overflow-y: auto; overscroll-behavior-y: contain; touch-action: pan-y; -webkit-overflow-scrolling: touch; color: var(--bootstrap-text); background: radial-gradient(circle at 12% 6%, rgb(126 183 101 / 24%), transparent 27rem), radial-gradient(circle at 88% 94%, rgb(235 196 104 / 18%), transparent 25rem), linear-gradient(180deg, #f7faf4 0%, var(--bootstrap-bg) 100%); } #bootstrap-screen[hidden] { display: none; } #bootstrap-screen > .bootstrap-card { width: min(100%, 42rem); box-sizing: border-box; padding: clamp(1.1rem, 4vw, 1.8rem); border: 1px solid rgb(214 224 214 / 80%); border-radius: clamp(1.4rem, 5vw, 2rem); box-shadow: var(--bootstrap-shadow); background: var(--bootstrap-card-bg); } .bootstrap-brand { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 1rem; margin-bottom: 1rem; } .bootstrap-logo { width: clamp(4.25rem, 15vw, 5.75rem); height: auto; filter: drop-shadow(0 .35rem .6rem rgb(49 93 58 / 12%)); } #bootstrap-screen h1 { margin: 0 0 .3rem; color: #0d2b1b; font-size: clamp(2rem, 8vw, 3rem); line-height: 1; letter-spacing: -.035em; } #bootstrap-screen .bootstrap-brand p { margin: 0; color: var(--bootstrap-muted); font-size: clamp(.98rem, 3.8vw, 1.18rem); line-height: 1.35; } .bootstrap-hero { overflow: hidden; margin: .35rem 0 1rem; border-radius: 1.5rem; background: #eef7f1; } .bootstrap-hero svg { display: block; width: 100%; height: auto; max-height: 16rem; } .bootstrap-action-slot { display: grid; margin: 1rem 0; } .bootstrap-action-slot > * { grid-area: 1 / 1; } .bootstrap-action-status, #bootstrap-enter.ui-button, .bootstrap-enter { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 4rem; box-sizing: border-box; margin: 0; padding: .8rem 1.25rem; border: 0; border-radius: 999px; font: inherit; font-size: clamp(1.05rem, 4.4vw, 1.28rem); font-weight: 750; letter-spacing: .005em; } .bootstrap-action-status { gap: .75rem; color: #eff8f0; background: linear-gradient(135deg, #387347, var(--bootstrap-accent)); box-shadow: 0 .45rem 1.1rem rgb(40 100 56 / 18%); opacity: 1; transform: translateY(0); transition: opacity var(--bootstrap-fade-duration) ease, transform var(--bootstrap-fade-duration) ease; } .bootstrap-action-status.is-leaving { opacity: 0; transform: translateY(-.2rem); pointer-events: none; } .bootstrap-loading-dot { flex: 0 0 auto; width: .65rem; height: .65rem; border-radius: 50%; background: #d9f0de; box-shadow: 0 0 0 0 rgb(217 240 222 / 50%); animation: bootstrap-pulse 1.35s ease-out infinite; } .bootstrap-status-text { opacity: 1; transition: opacity var(--bootstrap-fade-duration) ease; } .bootstrap-status-text.is-fading { opacity: 0; } #bootstrap-enter.ui-button, .bootstrap-enter { gap: .75rem; color: #fff; background: linear-gradient(135deg, #2d743d, var(--bootstrap-accent-strong)); box-shadow: 0 .55rem 1.25rem rgb(25 77 43 / 24%); cursor: pointer; opacity: 0; transform: translateY(.2rem); transition: opacity var(--bootstrap-fade-duration) ease, transform var(--bootstrap-fade-duration) ease, background-color .15s ease; } #bootstrap-enter.is-visible { opacity: 1; transform: translateY(0); } #bootstrap-enter svg { width: 1.5rem; height: 1.5rem; margin-left: auto; fill: none; stroke: currentColor; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; } #bootstrap-enter:hover, #bootstrap-enter:focus-visible { background: #173f24; } .bootstrap-features { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; margin: 1rem 0; padding: .8rem .4rem; border: 1px solid #e2ebe2; border-radius: 1.35rem; background: linear-gradient(135deg, #f4f9f4, #fbfcf8); } .bootstrap-features > div { display: grid; place-items: center; gap: .4rem; min-width: 0; padding: .3rem .45rem; text-align: center; } .bootstrap-features > div + div { border-left: 1px solid #dce6dc; } .bootstrap-features svg { width: 2rem; height: 2rem; fill: none; stroke: var(--bootstrap-accent); stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; } .bootstrap-features > div:nth-child(2) svg { stroke: #7351b4; } .bootstrap-features > div:nth-child(3) svg { fill: #e96c2a; stroke: #e96c2a; } .bootstrap-features span { color: #24402c; font-size: clamp(.78rem, 3vw, .95rem); font-weight: 650; line-height: 1.2; } #bootstrap-screen .android-browser-hint { margin: .8rem 0 0; padding: .75rem .9rem; border: 1px solid #cbdccf; border-radius: .85rem; background: #eef7f1; color: #24462b; font-size: .9rem; line-height: 1.35; } .android-browser-hint[data-browser="other"] { border-color: #e3c98c; background: #fff8e8; color: #694d14; } .privacy-summary { display: grid; gap: .65rem; margin: .85rem 0 0; padding: .85rem; border: 1px solid var(--bootstrap-border); border-radius: 1.15rem; background: #f9fbf6; } #bootstrap-screen .privacy-summary > p { margin: 0; color: var(--bootstrap-muted); font-size: .92rem; line-height: 1.4; } #bootstrap-screen .privacy-summary > .switch-row.switch-disabled { display: none; } .storage-cleanup-status { min-height: 1.2rem; margin: .75rem 0 0; color: var(--bootstrap-muted); font-size: .86rem; text-align: center; } .bootstrap-error { margin: .65rem 0 0; padding: .75rem .9rem; border-radius: .9rem; color: var(--bootstrap-error); background: #fff0f0; font-weight: 700; } .bootstrap-retry, #bootstrap-retry.ui-button { width: 100%; min-height: 3rem; box-sizing: border-box; margin-top: .65rem; border: 1px solid #d8abab; border-radius: 999px; color: #861d1d; background: #fff; font: inherit; font-weight: 700; cursor: pointer; } .bootstrap-ready, .bootstrap-state-model { display: none !important; } @keyframes bootstrap-pulse { 0% { box-shadow: 0 0 0 0 rgb(217 240 222 / 55%); } 65%, 100% { box-shadow: 0 0 0 .7rem rgb(217 240 222 / 0%); } } @media (max-width: 34rem) { #bootstrap-screen { padding-right: max(.75rem, env(safe-area-inset-right)); padding-left: max(.75rem, env(safe-area-inset-left)); } #bootstrap-screen > .bootstrap-card { padding: 1rem; } .bootstrap-brand { gap: .75rem; } .bootstrap-hero svg { max-height: 12.5rem; } .bootstrap-features { padding: .65rem .25rem; } } @media (max-height: 700px) { .bootstrap-hero svg { max-height: 10rem; } } @media (prefers-reduced-motion: reduce) { .bootstrap-loading-dot { animation: none; } .bootstrap-status-text, .bootstrap-action-status, #bootstrap-enter.ui-button, .bootstrap-enter { transition: none; } } .offline-option-row { display: flex; align-items: center; gap: .5rem; } .offline-option-row > .switch-row { flex: 1; min-width: 0; } .offline-help-button { flex: none; width: 2.75rem; height: 2.75rem; border: 1px solid #315d3a; border-radius: 50%; background: #fff; color: #315d3a; font: inherit; font-size: 1.25rem; font-weight: 700; cursor: pointer; } .offline-help-button:focus-visible { outline: 3px solid #315d3a; outline-offset: 3px; } .offline-help { padding: .85rem; border: 1px solid var(--bootstrap-border); border-radius: .65rem; background: #fff; color: var(--bootstrap-muted); font-size: .92rem; line-height: 1.5; } .offline-help h2 { margin: 0 0 .5rem; color: #315d3a; font-size: 1rem; } .offline-help ul { padding-left: 1.25rem; } .offline-help p:last-child { margin-bottom: 0; } .storage-usage { margin: .75rem 0; padding: .85rem; border: 1px solid #c8d3ca; border-radius: .65rem; background: #f9fbf6; color: #315d3a; font-size: .9rem; line-height: 1.4; } .storage-usage h3 { margin: 0 0 .5rem; font-size: 1rem; } .storage-usage meter { width: 100%; height: 1.25rem; } .storage-usage p { margin: .4rem 0; } .storage-usage [data-storage-warning] { color: #861d1d; font-weight: 700; } .route-offline-controls { margin: .75rem 0; } .route-offline-controls > a { display: inline-block; padding: .75rem; } .route-offline-controls > a[hidden] { display: none; }