@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--ink:#143c34;--muted:#54766b;--green:#0f8b68;--line:#c6dbd080}*{box-sizing:border-box}body{margin:0;overflow:hidden;background:#bcd9c9;color:var(--ink);font:14px/1.4 'DM Sans',system-ui,sans-serif}button,select{font:inherit;color:inherit}button{cursor:pointer;border:0}button:focus-visible,select:focus-visible{outline:3px solid #14b68a;outline-offset:3px}button:disabled{cursor:not-allowed;opacity:.55}[hidden]{display:none!important}#world,#labels{position:fixed;inset:0}#world canvas{display:block;width:100%;height:100%;touch-action:none}#labels{pointer-events:none;overflow:hidden}.edgefade{position:fixed;inset:0;pointer-events:none;background:linear-gradient(#f3f9ee40,transparent 26%,transparent 74%,#c6e7dd55)}.glass{background:#f7fffae6;border:1px solid #ffffffba;box-shadow:0 4px 18px #193e2b12;backdrop-filter:blur(18px)}.icon{height:44px;width:44px;border-radius:15px;display:grid;place-items:center;font-size:24px;font-weight:500;background:#f6fff6df;border:1px solid #fff9;flex-shrink:0}header{position:fixed;top:max(20px,env(safe-area-inset-top));left:24px;right:24px;display:flex;align-items:center;gap:12px;z-index:3}.identity{display:flex;align-items:center;gap:10px;background:#f8fffaeb;border:1px solid #fffc;border-radius:18px;padding:10px 15px;min-height:51px;box-shadow:0 6px 25px #163f2317;backdrop-filter:blur(18px);font-size:15px;font-weight:700}.identity>span:first-child{font-size:25px;line-height:1}.chevron{font-size:18px;color:#6f8b7b;margin-left:8px}.economy{margin-left:auto;display:flex;align-items:center;gap:8px;padding:12px 18px;background:#f8fffaeb;border:1px solid #fffc;border-radius:18px;box-shadow:0 6px 25px #163f2317;backdrop-filter:blur(18px)}.coin{color:#d4a644;font-size:23px}.economy b{font-size:21px;font-family:Manrope,sans-serif}.economy small{font-size:13px;color:#587f6d}.campaign{position:fixed;top:100px;left:30px;pointer-events:none}.live{font-size:12px;font-weight:700;letter-spacing:1.6px;color:#366754;display:flex;gap:7px;align-items:center}.live i{height:6px;width:6px;background:#15916b;border-radius:50%;box-shadow:0 0 0 4px #21956d15}.campaign h1{font:800 29px/1.1 Manrope,sans-serif;letter-spacing:-1px;margin:10px 0 7px;text-shadow:0 1px 12px #f2f7e9}.campaign p{font-size:13px;color:#3b6958;margin:0;text-shadow:0 1px 10px #f7f9e9}.controlmeter{position:fixed;top:105px;right:30px;width:220px;background:#fafff6d9;padding:12px 15px;border:1px solid #fffa;border-radius:15px;backdrop-filter:blur(12px)}.metertitles{display:flex;justify-content:space-between;font-size:12px;font-weight:600;margin-bottom:8px}.metertitles span:last-child{color:#b27745}.meter{height:5px;border-radius:5px;background:#e9b785;overflow:hidden}.meter i{display:block;height:100%;width:55%;background:#18ab80;border-radius:5px;transition:width .5s}.maptools{position:fixed;right:25px;top:205px;display:flex;flex-direction:column;gap:9px}.maptools .icon{font-size:22px;border-radius:14px}.help{position:fixed;left:27px;bottom:27px;min-height:44px;border-radius:15px;padding:11px 16px;font-size:13px;font-weight:600}.commanddock{position:fixed;bottom:max(22px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:440px;max-width:calc(100% - 28px);background:#fafff7ed;border:1px solid #fff;border-radius:24px;box-shadow:0 15px 55px #163f2b20,0 3px 10px #163f2b12;backdrop-filter:blur(25px);padding:15px 16px;z-index:3}.selection{display:flex;gap:12px;align-items:center;padding:0 3px 13px}.armybadge{height:47px;width:47px;border-radius:15px;display:grid;place-items:center;color:#137b5e;background:linear-gradient(140deg,#d3ecda,#eef6e7);border:1px solid #c9e0cc;font-size:29px}.selection>div{flex:1}.selection small{font-size:12px;color:#4d7964;display:block}.selection strong{display:block;font:800 24px/1.3 Manrope,sans-serif;color:#123e2b}.selection strong span{font:500 13px 'DM Sans',sans-serif;color:#527463}.armyhealth{height:4px;background:#dce8d6;border-radius:4px;width:170px;max-width:100%;margin-top:5px;overflow:hidden}.armyhealth i{display:block;height:100%;width:100%;background:#27ad7b;border-radius:4px}.deselect{background:#e4eddf;border-radius:50%;height:32px;width:32px;font-size:22px;color:#6e8778}.dockactions{display:flex;gap:8px;border-top:1px solid #d6e5d5;padding-top:11px}.dockactions button{flex:1;display:flex;align-items:center;flex-direction:column;gap:3px;background:#edf5e8;border:1px solid #dbe8d6;border-radius:14px;font-weight:700;font-size:13px;padding:10px 5px;min-height:75px}.dockactions button>span{font-size:21px;line-height:1.1;color:#36775b}.dockactions button>small{font-size:12px;font-weight:400;color:#557a63}.dockactions .primary{background:#108569;color:#fff;border-color:#0d7c5f;box-shadow:0 5px 12px #13846522}.dockactions .primary span,.dockactions .primary small{color:#e2f6e5}.dockactions #airstrike.armed{background:#e6b862;border-color:#d4a452;color:#4e3915}.orderhint{position:fixed;left:50%;bottom:240px;transform:translateX(-50%);border-radius:25px;background:#f8fff4d6;border:1px solid #fff8;backdrop-filter:blur(14px);font-size:13px;padding:10px 18px;color:#35664d;box-shadow:0 4px 25px #1e5c2820;max-width:90%;width:max-content;text-align:center}.armylabel{position:absolute;left:0;top:0;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;gap:4px;will-change:left,top;pointer-events:auto;cursor:pointer;white-space:nowrap;padding:0;background:transparent;min-width:58px}.armylabel .number{background:#f7fff2f2;color:#184f37;padding:4px 10px;font:800 15px Manrope,sans-serif;line-height:1.2;border-radius:8px;border:1px solid #fff;box-shadow:0 3px 12px #143c2926;font-variant-numeric:tabular-nums;min-width:58px}.armylabel.enemy .number{background:#fff5def0;color:#865523;border-color:#fff2d4}.armylabel .type{height:27px;width:27px;display:grid;place-items:center;background:#0d9b76cc;color:white;border:1.5px solid #d3fff0;border-radius:50%;font-size:14px;box-shadow:0 2px 9px #1b6e4e44}.armylabel.enemy .type{background:#d89a43de;border-color:#fff0bb}.armylabel.selected .number{background:#10896a;color:white;border-color:#abf7d2;box-shadow:0 0 0 3px #31d9a733,0 4px 12px #176d4c33}.armylabel.selected .type{border-color:white}.armylabel.fighting .type{background:#e99940;animation:hot 1.2s infinite}.baseLabel{position:absolute;transform:translate(-50%,-100%);pointer-events:auto;border:1px solid #ffffffb3;background:#f5fff1d9;border-radius:8px;padding:6px 10px;font-size:12px;color:#2d634a;font-weight:600;white-space:nowrap;box-shadow:0 3px 9px #1c592a18}.baseLabel.enemy{background:#fff4dce0;color:#9a6630}#notice{position:fixed;top:80px;left:50%;transform:translateX(-50%);padding:12px 18px;background:#113f32ed;color:#eefcef;box-shadow:0 6px 25px #154a3628;border:1px solid #b4efd5;border-radius:14px;font-size:14px;max-width:92%;z-index:12;text-align:center;width:max-content}.startveil,.modalveil,.sheetveil{position:fixed;inset:0;background:#23493c33;backdrop-filter:blur(9px);display:flex;align-items:center;justify-content:center;padding:18px;z-index:10}.startcard{width:440px;max-width:100%;padding:27px 30px;background:linear-gradient(145deg,#fafff7f5,#edf5e7f5);border:1px solid #ffffffd6;border-radius:27px;box-shadow:0 25px 90px #173e3033;max-height:96dvh;overflow:auto}.wordmark{display:flex;align-items:center;gap:8px;color:#19816a;font-size:30px;margin-bottom:24px}.wordmark span{font:800 16px Manrope,sans-serif;letter-spacing:1px}.wordmark small{font-size:12px;letter-spacing:1px;margin-left:auto;color:#7a9a81}.startcard h2{font:800 47px/1.03 Manrope,sans-serif;letter-spacing:-2px;margin:13px 0;color:#133f2f}.startcard>p{font-size:14px;line-height:1.7;color:#5b7d67;margin:0 0 18px}#countries{display:grid;grid-template-columns:1fr 1fr;gap:7px}.country{display:flex;align-items:center;gap:8px;background:#e4efdf;border:1px solid #d2e2cd;border-radius:12px;font-size:12px;min-height:43px;padding:8px 10px;text-align:left;font-weight:500}.country span{font-size:23px;line-height:1}.country.active{background:#d0ead9;border-color:#279b79;box-shadow:inset 0 0 0 1px #279b7933}.difficulty{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:#5d7e68;margin-top:17px}.difficulty select{font-size:12px;background:#e6f0df;border:1px solid #cddec8;border-radius:9px;padding:9px;min-height:40px}.launch{width:100%;display:block;background:#0c896b;color:white;border:1px solid #0a8265;border-radius:14px;min-height:51px;padding:14px 18px;font-size:15px;font-weight:700;margin-top:17px;box-shadow:0 7px 20px #0a87682b}.launch span{float:right;font-size:19px}.continue{display:block;font-size:13px;font-weight:600;background:transparent;color:#248165;margin:10px auto 0;padding:9px;min-height:40px}.saveNote{display:block;font-size:12px;color:#7b9980;text-align:center;margin-top:15px}.sheetveil{align-items:flex-end;background:#2b4d3a33}.recruitSheet{width:640px;max-width:100%;background:#f4faed;border:1px solid white;box-shadow:0 15px 60px #23443130;border-radius:25px;padding:24px;margin-bottom:15px}.sheethead{display:flex;justify-content:space-between;align-items:center;gap:10px}.sheethead small{font-size:12px;letter-spacing:1px;color:#438465}.sheethead h2{font:800 25px Manrope,sans-serif;margin:4px 0;color:#204c36}.recruitSheet>p{font-size:13px;color:#638569;margin:10px 0 18px}.recruitcards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.recruitcards button{display:flex;flex-direction:column;align-items:center;gap:5px;padding:12px 6px;background:#e5efda;border:1px solid #d4e2c9;border-radius:16px}.recruitcards b{font-size:15px}.recruitcards span:not(.modelpreview){font-size:12px;color:#4b7556}.recruitcards small{font-size:12px;color:#779168}.recruitcards strong{display:block;background:#f4fae9;padding:7px 9px;border-radius:9px;color:#2e7d59;font-size:12px;margin-top:7px}.modelpreview{width:90px;height:80px;background-image:url('assets/units.png');background-repeat:no-repeat;background-size:300% 200%;display:block}.modelpreview.infantry{background-position:0 0}.modelpreview.tank{background-position:50% 0}.modelpreview.artillery{background-position:100% 0}.manual{background:#f5fbef;border:1px solid white;border-radius:25px;padding:30px;position:relative;max-width:100%;width:480px;max-height:92dvh;overflow:auto;box-shadow:0 20px 70px #153c292e}.manual .close{position:absolute;top:16px;right:16px}.manual h2{font:800 34px Manrope,sans-serif;letter-spacing:-1px;margin:12px 0}.manual p{font-size:14px;line-height:1.7;color:#587b60}.manual b{color:#214b35}#loading{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:14px;background:#e3f0df;z-index:20;font-size:15px;color:#42745c}#loading>span{height:34px;width:34px;border:3px solid #bcdac6;border-top-color:#229776;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes hot{50%{box-shadow:0 0 0 5px #efb45933}}@media(max-width:650px){header{top:max(13px,env(safe-area-inset-top));left:12px;right:12px;gap:7px}.identity{padding:9px 10px;min-height:46px;border-radius:16px;gap:7px;font-size:12px;max-width:54%}.identity>span:first-child{font-size:23px}.identity #countryName{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chevron{margin-left:0}.economy{padding:8px 11px;gap:5px;border-radius:15px;min-height:46px}.economy small{display:none}.economy b{font-size:20px}.coin{font-size:21px}.icon{width:42px;height:44px;border-radius:14px}.campaign{top:84px;left:18px;max-width:76%;text-shadow:0 1px 14px #f9f9e9}.live{font-size:12px;letter-spacing:1.3px}.campaign h1{font-size:24px;margin:8px 0 5px;letter-spacing:-.6px}.campaign p{font-size:12px;line-height:1.6;max-width:230px}.controlmeter{top:178px;left:18px;right:auto;width:190px;padding:9px 12px;border-radius:12px;background:#f8fff1d6}.metertitles{font-size:12px;margin-bottom:6px}.maptools{right:13px;top:96px;gap:8px}.maptools .icon{width:39px;height:44px;min-height:44px;font-size:21px}.help{left:auto;right:13px;bottom:239px;min-height:40px;font-size:12px;padding:9px 13px;border-radius:13px}.commanddock{bottom:max(13px,env(safe-area-inset-bottom));max-width:calc(100% - 24px);border-radius:22px;padding:13px 13px 12px}.selection{padding:0 3px 11px;gap:11px}.selection small{font-size:12px}.selection strong{font-size:23px}.armybadge{height:42px;width:42px;border-radius:13px;font-size:27px}.armyhealth{margin-top:4px;height:3px;width:150px}.dockactions{padding-top:10px;gap:7px}.dockactions button{font-size:12px;padding:9px 4px;min-height:73px;border-radius:13px}.dockactions button>small{font-size:12px}.dockactions button>span{font-size:20px}.orderhint{bottom:224px;font-size:12px;line-height:1.5;padding:9px 14px;max-width:85%;background:#f8fff0e3}.armylabel .number{font-size:14px;padding:4px 8px;min-width:51px;border-radius:7px}.armylabel .type{height:25px;width:25px;font-size:13px}.armylabel{gap:3px;min-width:51px}.baseLabel{font-size:12px;padding:5px 8px;max-width:150px;text-overflow:ellipsis;overflow:hidden}.startcard{padding:23px 23px;border-radius:24px}.wordmark{margin-bottom:20px}.wordmark span{font-size:15px}.wordmark small{font-size:9px}.startcard h2{font-size:43px;line-height:1.04;margin:11px 0}.startcard>p{font-size:13px;margin-bottom:16px}.country{min-height:42px;padding:8px;font-size:12px;gap:6px;border-radius:10px}.country span{font-size:21px}.difficulty{margin-top:15px}.saveNote{font-size:12px;line-height:1.5}.startveil{padding:12px}.recruitSheet{padding:20px 15px;margin-bottom:3px;border-radius:23px}.sheethead h2{font-size:22px}.recruitSheet>p{font-size:12px}.recruitcards{gap:6px}.recruitcards button{padding:9px 3px;border-radius:13px}.recruitcards b{font-size:14px}.recruitcards small{font-size:12px;text-align:center;min-height:28px}.recruitcards strong{font-size:12px;padding:7px}.modelpreview{width:78px;height:75px}.recruitcards span:not(.modelpreview){font-size:12px}.manual{padding:25px}.manual p{font-size:14px}.manual h2{font-size:30px}#notice{top:73px;padding:11px 15px;font-size:13px;max-width:94%}}@media(max-height:720px){.startcard h2{font-size:34px}.wordmark{margin-bottom:12px}.startcard>p{margin-bottom:12px;font-size:12px}.country{min-height:37px;padding:6px}.startcard{padding:19px 22px}.saveNote{margin-top:9px}.difficulty{margin-top:12px}.launch{min-height:46px;margin-top:12px}.commanddock{padding-top:11px}.campaign{top:79px}.controlmeter{top:164px}.orderhint{bottom:215px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

@media(max-width:650px){.campaign{top:83px;max-width:calc(100% - 80px)}.campaign .live{display:none}.campaign h1{font-size:20px;margin:0 0 4px}.campaign p{font-size:12px;max-width:270px}.controlmeter{top:144px;width:185px}.maptools{top:246px}.baseLabel{max-width:145px}.help{bottom:249px}.orderhint{bottom:224px;max-width:calc(100% - 48px)}}

.orderhint,#notice,.campaign,.controlmeter{pointer-events:none}

@media(max-width:650px){.startcard h2{font-size:32px;letter-spacing:-1.4px;line-height:1.1}.startcard{padding-top:20px;padding-bottom:20px}.wordmark{margin-bottom:15px}.startcard>p{font-size:13px;line-height:1.6}.country{font-size:12px}.saveNote{font-size:12px;line-height:1.5}.dockactions button>small{font-size:12px}.dockactions button{font-size:13px}}

/* Stable command roster remains usable when formations overlap or leave the screen. */
.unitcontrols{display:flex;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #d6e5d5;padding-top:8px;font-size:12px;color:#426b59}.unitcontrols button{background:#dfeede;border:1px solid #bbd6bc;border-radius:9px;padding:8px 10px;min-height:40px;font-weight:700}
#roster{display:flex;gap:6px;overflow-x:auto;overscroll-behavior:contain;padding:7px 0 9px;scrollbar-width:thin}#roster button{flex-shrink:0;padding:8px 10px;min-height:40px;background:#e4efdf;border:1px solid #c3d8be;border-radius:9px;font-size:12px;white-space:nowrap}#roster button.active{background:#177d61;color:#fff;border-color:#177d61}
.armylabel{will-change:auto;min-height:44px}.baseLabel{min-height:40px}.qualitylabel{display:flex;justify-content:space-between;align-items:center;font-weight:700}.qualitylabel select{border:1px solid #b6ccb2;border-radius:9px;min-height:44px;padding:8px;background:#e5eedf}#saveStatus,#performanceStatus{font-size:12px;margin:8px 0}.orderhint{bottom:335px}.help{bottom:27px}
@media(max-width:650px){.orderhint{bottom:324px}.help{bottom:369px}.commanddock{padding-top:10px}.selection{padding-bottom:8px}.dockactions{padding-top:8px}.dockactions button{min-height:64px}.armyhealth{width:150px}}
@media(max-height:600px){.campaign,.controlmeter,.orderhint{display:none}.commanddock{width:360px;left:10px;transform:none;bottom:10px}.help{right:12px;left:auto;bottom:12px}.maptools{top:85px}.startcard{max-height:95dvh}.commanddock .selection{padding-bottom:4px}.commanddock .dockactions button{min-height:54px;padding:5px}.unitcontrols button{min-height:34px}}

@media(max-width:650px){#notice{top:198px;max-width:calc(100% - 32px);font-size:13px}.maptools{z-index:2}.baseLabel{max-width:140px}.armylabel .number{background:#f7fff7;color:#184f37}.armylabel.enemy .number{background:#fff2d9;color:#794b1c}.armylabel.selected .number{background:#10896a;color:white}}

.armylabel::after{content:'';position:absolute;top:100%;left:50%;width:1px;height:var(--leader-length,0px);transform-origin:top;transform:rotate(var(--leader-angle,0deg));background:#fffdf0b3;box-shadow:0 0 2px #315d3a66;pointer-events:none}
