*{box-sizing:border-box}[hidden]{display:none!important}.campaign-page{display:block;min-height:100vh;background:radial-gradient(ellipse at 50% 10%,#234f56 0,#102c3a 45%,#081a29 100%);color:#eafbf1;font-family:system-ui,sans-serif;margin:0}.campaign-top{max-width:1080px;margin:auto;display:flex;justify-content:space-between;align-items:center;padding:20px 24px;padding-top:max(20px,env(safe-area-inset-top));gap:12px}.campaign-top a{color:#e5fff0;text-decoration:none;font-weight:800;letter-spacing:-.5px}.campaign-top button{border:1px solid #a0dfbb44;background:#ffffff09;color:#e5fff0;padding:10px 14px;border-radius:24px;font:inherit;font-size:13px}.campaign-page main{max-width:1040px;margin:auto;padding:0 24px 36px}.campaign-hero{text-align:center;position:relative;padding:24px 12px 36px}.hero-orbit{font-size:84px;color:#c5f1da;text-shadow:0 0 45px #b3ffc688;line-height:1.4}.campaign-hero h1{font-family:Georgia,serif;font-size:clamp(32px,5vw,57px);letter-spacing:-1.5px;line-height:1.12;margin:16px auto 20px;color:#f5f4de}.campaign-hero p{max-width:490px;margin:16px auto 22px;line-height:1.7;color:#b8d5cc;font-size:15px}.campaign-hero .primary{width:auto;min-width:230px;margin:auto;padding:16px 24px}.campaign-hero .save-note{font-size:11px;margin:12px auto;color:#88b8a8;max-width:450px}.campaign-progress{display:flex;justify-content:space-between;gap:12px;border-top:1px solid #ffffff15;padding:20px 0;color:#e5efd3;font-size:13px}.campaign-progress span:last-child{color:#90b4a8;font-size:11px}.campaign-levels{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.campaign-level{display:flex;text-align:left;align-items:center;gap:14px;padding:20px;border:1px solid #8adac72a;border-radius:20px;background:linear-gradient(130deg,#ffffff09,#ffffff02);color:inherit;min-width:0;font:inherit;cursor:pointer}.campaign-level:hover:not(:disabled){border-color:#a2eec7;transform:translateY(-2px)}.campaign-level:focus-visible,.maze-dpad button:focus-visible{outline:3px solid #ffe4a9;outline-offset:3px}.campaign-level.complete{background:linear-gradient(135deg,#35826333,#c4a9590c);border-color:#9ce7b866}.campaign-level.locked{opacity:.48;cursor:default}.level-art{font-size:35px;color:#b6edd0;width:45px;flex-shrink:0;text-align:center}.level-meta{display:grid;gap:8px;min-width:0}.level-meta small{font-size:9px;letter-spacing:1px;color:#afd2bb}.level-meta strong{font-size:16px;line-height:1.25}.level-meta>span{font-size:11px;color:#9dbcb1}.level-arrow{margin-left:auto;color:#e5deab;font-size:20px}.campaign-footer{max-width:650px;margin:28px auto;text-align:center;font-size:12px;line-height:1.7;color:#8cb4a5}.campaign-shell{border:0;background:none;box-shadow:none;min-height:0;overflow:visible}.campaign-page .maze-heading h1{font-family:Georgia,serif}.campaign-page #mazeIsland{position:relative;min-height:0;padding:10px 0 24px;background:transparent;z-index:1}.campaign-page #mazeIsland canvas{max-height:calc(100dvh - 285px);width:auto;max-width:100%;display:block;margin:auto;touch-action:none}.campaign-page .maze-overlay{position:fixed;z-index:30;background:#051321e8;padding:24px;inset:0;display:flex;align-items:center;justify-content:center}.campaign-page .maze-overlay>div{max-width:440px;width:100%;padding:28px;border:1px solid #9bdec344;background:#173a42;border-radius:28px;text-align:center}.maze-dpad{display:flex;gap:10px;justify-content:center;margin:10px auto}.maze-dpad button{width:52px;height:44px;background:#ffffff12;border:1px solid #a1e2c94a;border-radius:13px;color:#e5fff2;font-size:18px;touch-action:manipulation}.maze-dpad button:active{background:#87dac877}.campaign-finished{position:fixed;z-index:50;inset:0;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse,#3b7458,#0b2533);padding:24px;text-align:center}.campaign-finished>div{max-width:480px}.campaign-finished h2{font:48px/1.15 Georgia,serif;color:#fff1ce}.campaign-finished p{line-height:1.7;color:#c6e4d0}.campaign-finished button{margin-top:24px}@media(max-width:650px){.campaign-page main{padding:0 14px 24px}.campaign-top{padding:16px}.campaign-levels{grid-template-columns:1fr}.campaign-level{padding:16px}.campaign-progress{align-items:flex-start;flex-direction:column;gap:6px}.campaign-hero{padding-top:8px}.hero-orbit{font-size:65px}.campaign-page #mazeIsland canvas{max-height:calc(100dvh - 295px)}.campaign-page .maze-heading{padding:0 8px}.campaign-page .maze-heading h1{font-size:23px}.campaign-page .maze-heading p{font-size:11px;min-height:36px}.campaign-page .maze-meters{font-size:11px;gap:8px}.campaign-top a{font-size:14px}.campaign-finished h2{font-size:36px}}@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
html:has(.campaign-page){height:auto;min-height:100%;overflow:auto}.campaign-page{height:auto;overflow:auto}.campaign-page #mazeIsland{inset:auto;overflow:visible}.campaign-page .maze-overlay>div{color:#eafbf1}.campaign-page #mazeIsland.maze-won .maze-overlay{position:fixed;inset:0;background:#051321df;padding:24px}.campaign-page #mazeIsland.maze-won .maze-overlay>div{max-width:440px;padding:24px}.campaign-page #mazeIsland.maze-won .maze-overlay h2{font-size:28px}.campaign-page #mazeIsland canvas{flex:none;aspect-ratio:588/644;height:calc(100dvh - 305px);min-height:200px}.campaign-page .maze-dpad{flex:none}.campaign-page .game-shell{height:auto;aspect-ratio:auto;width:100%}
.campaign-page #mazeIsland canvas{width:auto;height:auto;max-height:calc(100dvh - 305px);max-width:100%;min-height:0}.campaign-page .maze-active{background:transparent}

/* The campaign occupies the viewport; HUD and controls float over the scene. */
.campaign-playing{height:100dvh;overflow:hidden;background:#0b2432}
.campaign-playing .campaign-top{position:fixed;z-index:12;top:0;left:0;right:0;max-width:none;padding:10px 12px;pointer-events:none}
.campaign-playing .campaign-top a{display:none}
.campaign-playing .campaign-top button{margin-left:auto;pointer-events:auto;font-size:11px;padding:8px 10px;background:#092332b8;backdrop-filter:blur(10px)}
.campaign-playing main{padding:0;max-width:none;width:100%;height:100dvh}
.campaign-playing .campaign-shell{position:fixed;inset:0;width:100%;height:100dvh;margin:0;padding:0;border-radius:0}
.campaign-playing #mazeIsland{position:absolute;inset:0;width:100%;height:100%;padding:0;display:block;overflow:hidden}
.campaign-playing #mazeIsland canvas{position:absolute;inset:0;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;min-height:0;object-fit:fill;aspect-ratio:auto}
.campaign-playing .maze-heading{position:absolute;z-index:10;top:max(10px,env(safe-area-inset-top));left:12px;right:95px;text-align:left;padding:0;pointer-events:none}
.campaign-playing .maze-heading>span{font-size:9px;letter-spacing:1.2px;color:#b9ded3;text-shadow:0 1px 4px #000}
.campaign-playing .maze-heading h1{font-family:system-ui,sans-serif;font-size:16px;line-height:1.2;margin:4px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 2px 8px #000}
.campaign-playing .maze-heading p{position:fixed;left:12px;right:12px;top:78px;min-height:0;margin:0;font-size:11px;line-height:1.4;color:#e1eedc;background:#092332b8;border:1px solid #bbdfcd20;border-radius:12px;padding:7px 10px;text-align:center;backdrop-filter:blur(8px)}
.campaign-playing .maze-meters{position:absolute;z-index:11;left:12px;right:12px;top:52px;justify-content:flex-start;gap:12px;font-size:11px;text-shadow:0 2px 5px #000;pointer-events:none}
.campaign-playing .maze-dpad{position:absolute;z-index:12;left:14px;bottom:max(18px,env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(3,48px);grid-template-rows:repeat(2,46px);gap:5px;margin:0}
.campaign-playing .maze-dpad button{width:48px;height:46px;background:#1238439c;border-color:#c4f3de66;backdrop-filter:blur(8px);box-shadow:0 3px 12px #0002}
.campaign-playing .maze-dpad button:nth-child(1){grid-column:2;grid-row:1}.campaign-playing .maze-dpad button:nth-child(2){grid-column:1;grid-row:2}.campaign-playing .maze-dpad button:nth-child(3){grid-column:2;grid-row:2}.campaign-playing .maze-dpad button:nth-child(4){grid-column:3;grid-row:2}
.campaign-playing .maze-controls{position:absolute;z-index:12;right:14px;bottom:max(18px,env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(2,auto);gap:8px;margin:0}
.campaign-playing .maze-controls>span{display:none}.campaign-playing .maze-controls button{background:#123843b3;backdrop-filter:blur(8px);font-size:11px;padding:9px 12px;min-height:42px}
.campaign-playing #mazeView{grid-column:1/3;max-width:175px;white-space:normal;line-height:1.2}
.campaign-playing #mazeIsland .maze-overlay{position:fixed;inset:0;z-index:30}.campaign-playing #mazeIsland .maze-overlay>div{max-height:calc(100dvh - 48px);overflow:auto}
@media(max-height:500px){.campaign-playing .maze-heading p{display:none}.campaign-playing .maze-meters{top:48px}.campaign-playing .maze-dpad{bottom:10px;grid-template-columns:repeat(3,42px);grid-template-rows:repeat(2,40px)}.campaign-playing .maze-dpad button{width:42px;height:40px}.campaign-playing .maze-controls{bottom:10px}}
@media(min-width:800px){.campaign-playing .maze-heading h1{font-size:20px}.campaign-playing .maze-heading p{left:50%;right:auto;transform:translateX(-50%);width:min(620px,80vw)}.campaign-playing .maze-meters{font-size:13px}.campaign-playing .maze-dpad{left:24px;bottom:24px}.campaign-playing .maze-controls{right:24px;bottom:24px}}

/* Let the restored garden own the victory screen. */
.campaign-playing #mazeIsland.maze-celebrating .maze-dpad,.campaign-playing #mazeIsland.maze-celebrating .maze-controls{display:none!important}
@media(prefers-reduced-motion:reduce){.maze-celebrating *{animation:none!important}}

#mazeGarden{position:absolute;bottom:max(16px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);z-index:31;border:1px solid #96c8bf;border-radius:24px;background:#153e47;color:#edfff5;padding:12px 22px;font:inherit;white-space:nowrap}#mazeGarden[hidden]{display:none}

.campaign-playing #mazeIsland.maze-celebrating .maze-heading,.campaign-playing #mazeIsland.maze-celebrating .maze-meters{opacity:0;transition:opacity .8s;pointer-events:none}
body.campaign-playing:has(#mazeIsland.maze-celebrating) .campaign-top{opacity:0;pointer-events:none}

body.campaign-playing:has(#mazeIsland.maze-celebrating) .campaign-top button{pointer-events:none}
