/* NSN PORTAL v1.0 — NSNSIM-122 (2026-07-22, Forge)
 * Standalone login + launcher CSS, lifted from
 * isr41_v42_enhanced_10.html so operators no longer authenticate
 * through the ISR41 SPA. Shared theme tokens come from
 * /shared/theme.css (linked from index.html). Source blocks here
 * are byte-copies of the isr41 CSS (lines 22..132) plus small
 * additions (.app-status.planning) for the AC3 planning tiles. */
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Courier New',monospace;background:var(--bg);color:var(--text-primary);overflow:hidden;height:100vh;display:flex;flex-direction:column;user-select:none}

/* ============================================================
   LOGIN PAGE
   ============================================================ */
#login-page{position:fixed;inset:0;z-index:8000;background:#020810;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;}
#login-page::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 80% 60% at 50% 100%,rgba(0,80,140,0.18) 0%,transparent 70%),radial-gradient(ellipse 40% 40% at 50% 50%,rgba(0,212,255,0.04) 0%,transparent 70%);pointer-events:none;}
.login-scanline{position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 3px,rgba(0,212,255,0.025) 3px,rgba(0,212,255,0.025) 4px);pointer-events:none;}
.login-box{position:relative;z-index:2;width:480px;padding:48px 44px 44px;background:rgba(6,14,20,0.97);border:1px solid #254050;box-shadow:0 0 60px rgba(0,0,0,0.7),0 0 0 1px rgba(0,212,255,0.08) inset;}
/* v4.1: UNCLASSIFIED simulation banner at the top of the login box.
   Bright green, monospace, centered, with a top-edge stripe to make it
   clearly stand out as a meta-banner separate from the in-app classification. */
.login-sim-banner{
  position:absolute;top:0;left:0;right:0;
  background:rgba(20,80,40,0.18);
  border-bottom:1px solid rgba(32,200,96,0.35);
  color:#20c860;
  font-family:'Courier New',monospace;
  font-size:0.72rem;
  font-weight:bold;
  letter-spacing:3px;
  text-align:center;
  padding:8px 12px;
  text-shadow:0 0 8px rgba(32,200,96,0.5);
  z-index:3;
}
.login-sim-banner::before{
  content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,
    transparent 0%, #20c860 20%, #20c860 80%, transparent 100%);
  box-shadow:0 0 8px rgba(32,200,96,0.6);
}
/* Push the login box content down to make room for the banner */
.login-box.has-sim-banner{padding-top:64px;}
.login-logo-row{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:32px;}
.login-logo-mark{font-size:2.8rem;color:#00d4ff;text-shadow:0 0 20px rgba(0,212,255,0.6),0 0 40px rgba(0,212,255,0.2);line-height:1;}
.login-brand{display:flex;flex-direction:column;}
.login-brand-main{font-size:1.5rem;font-weight:900;letter-spacing:5px;color:#00d4ff;text-shadow:0 0 10px rgba(0,212,255,0.4);}
.login-brand-sub{font-size:0.78rem;letter-spacing:3px;color:#7ab0c8;margin-top:4px;}
.login-divider{height:1px;background:linear-gradient(90deg,transparent,#254050 20%,#3a6070 50%,#254050 80%,transparent);margin-bottom:28px;}
.login-classification{text-align:center;font-size:0.78rem;letter-spacing:3px;color:#ff4444;margin-bottom:24px;text-shadow:0 0 8px rgba(224,48,48,0.5);font-weight:bold;}
.login-field{display:flex;flex-direction:column;gap:8px;margin-bottom:20px;}
.login-label{font-size:0.78rem;letter-spacing:2px;color:#7ab0c8;text-transform:uppercase;font-weight:bold;}
.login-input{background:#040c12;border:1px solid #254050;color:#e8f4fa;padding:13px 14px;font-size:1rem;font-family:'Courier New',monospace;border-radius:2px;outline:none;width:100%;transition:border-color .2s,box-shadow .2s;letter-spacing:1px;}
.login-input:focus{border-color:#00d4ff;box-shadow:0 0 0 1px rgba(0,212,255,0.2),0 0 14px rgba(0,212,255,0.1);}
.login-input::placeholder{color:#3a6070;letter-spacing:1px;}
.login-clearance{display:flex;flex-direction:column;gap:8px;margin-bottom:26px;}
.login-clearance-label{font-size:0.78rem;letter-spacing:2px;color:#7ab0c8;text-transform:uppercase;font-weight:bold;}
.clearance-opts{display:flex;gap:8px;}
.clr-opt{flex:1;padding:10px 6px;text-align:center;background:#040c12;border:1px solid #254050;font-size:0.78rem;color:#8ab8c8;cursor:pointer;border-radius:2px;letter-spacing:1px;transition:all .2s;font-family:'Courier New',monospace;font-weight:bold;}
.clr-opt:hover{border-color:#8ab8c8;color:#c8e0ec;background:rgba(0,212,255,0.06);}
.clr-opt.selected{border-color:#e03030;color:#ff6060;background:rgba(224,48,48,0.1);}
.clr-opt.ts-sci{border-color:#e030e0!important;color:#f060f0!important;background:rgba(224,48,224,0.1)!important;}
.clr-opt.secret{border-color:#d4a020!important;color:#f0c040!important;background:rgba(212,160,32,0.1)!important;}
.login-btn{width:100%;padding:15px;background:linear-gradient(135deg,rgba(0,212,255,0.12),rgba(0,100,180,0.12));border:1px solid #00d4ff;color:#00d4ff;font-size:0.9rem;font-family:'Courier New',monospace;letter-spacing:4px;font-weight:900;cursor:pointer;border-radius:2px;transition:all .25s;margin-top:4px;}
.login-btn:hover{background:linear-gradient(135deg,rgba(0,212,255,0.22),rgba(0,100,180,0.22));box-shadow:0 0 22px rgba(0,212,255,0.3);}
.login-error{font-size:0.78rem;color:#ff5555;letter-spacing:1px;text-align:center;margin-top:12px;min-height:20px;opacity:0;transition:opacity .2s;font-weight:bold;}
.login-error.show{opacity:1;}
.login-footer{position:absolute;bottom:18px;left:0;right:0;text-align:center;font-size:0.65rem;color:#3a6070;letter-spacing:1.5px;}
.login-bracket{position:absolute;width:20px;height:20px;border-color:#254050;border-style:solid;border-width:0;}
.login-bracket.tl{top:12px;left:12px;border-top-width:1px;border-left-width:1px;}
.login-bracket.tr{top:12px;right:12px;border-top-width:1px;border-right-width:1px;}
.login-bracket.bl{bottom:12px;left:12px;border-bottom-width:1px;border-left-width:1px;}
.login-bracket.br{bottom:12px;right:12px;border-bottom-width:1px;border-right-width:1px;}
.login-time{position:absolute;top:16px;right:18px;font-size:0.72rem;color:#5a9ab0;letter-spacing:2px;}
.login-node{position:absolute;top:16px;left:18px;font-size:0.72rem;color:#3a6070;letter-spacing:1px;}

/* ============================================================
   APP LAUNCHER PAGE
   ============================================================ */
#launcher-page{position:fixed;inset:0;z-index:7000;background:#020810;display:none;flex-direction:column;overflow:hidden;}
#launcher-page.open{display:flex;}
#launcher-page::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 100% 70% at 50% 100%,rgba(0,60,120,0.2) 0%,transparent 70%);pointer-events:none;}
.launcher-scanline{position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 3px,rgba(0,212,255,0.018) 3px,rgba(0,212,255,0.018) 4px);pointer-events:none;z-index:0;}
.launcher-grid-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(0,212,255,0.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,212,255,0.03) 1px,transparent 1px);background-size:60px 60px;mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black 30%,transparent 100%);-webkit-mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black 30%,transparent 100%);}
.launcher-header{position:relative;z-index:2;background:linear-gradient(180deg,#050d14,#030a10);border-bottom:2px solid #254050;padding:0 28px;height:64px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0;}
.launcher-brand{display:flex;align-items:center;gap:14px;}
.launcher-mark{font-size:1.8rem;color:#00d4ff;text-shadow:0 0 12px rgba(0,212,255,0.5);}
.launcher-title{font-size:1.1rem;font-weight:900;letter-spacing:4px;color:#00d4ff;}
.launcher-sub{font-size:0.72rem;letter-spacing:2px;color:#5a8090;margin-top:3px;}
.launcher-right{display:flex;align-items:center;gap:18px;}
.launcher-operator{display:flex;flex-direction:column;align-items:flex-end;gap:4px;}
.launcher-op-name{color:#c8e0ec;letter-spacing:1px;font-size:0.8rem;font-weight:bold;}
.launcher-clock{color:#00d4ff;font-size:0.9rem;letter-spacing:2px;font-weight:bold;}
.launcher-signout{background:transparent;border:1px solid #254050;color:#8ab8c8;padding:7px 16px;font-size:0.72rem;cursor:pointer;border-radius:2px;font-family:'Courier New',monospace;letter-spacing:1px;transition:all .2s;font-weight:bold;}
.launcher-signout:hover{border-color:#e03030;color:#ff5555;background:rgba(224,48,48,0.06);}
.launcher-body{position:relative;z-index:2;flex:1;display:flex;flex-direction:column;align-items:center;padding:40px 20px;overflow-y:auto;}
.launcher-welcome{text-align:center;margin-bottom:48px;}
.launcher-welcome-title{font-size:1.3rem;font-weight:900;letter-spacing:3px;color:#e8f4fa;margin-bottom:10px;}
.launcher-welcome-sub{font-size:0.78rem;color:#5a8090;letter-spacing:2px;}
.app-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;max-width:1020px;width:100%;}
@media(max-width:900px){.app-grid{grid-template-columns:repeat(2,1fr);}}
.app-tile{background:rgba(6,14,20,0.95);border:1px solid #1a3040;border-radius:4px;padding:32px 20px 32px;display:flex;flex-direction:column;align-items:center;cursor:pointer;transition:all .25s;position:relative;overflow:hidden;aspect-ratio:1/1.1;justify-content:center;}
.app-tile::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 60% at 50% 30%,var(--tile-glow,rgba(0,212,255,0.06)) 0%,transparent 70%);transition:opacity .25s;}
.app-tile:hover::before{opacity:2;}
.app-tile:not(.unlicensed):hover{border-color:var(--tile-accent,#00d4ff);box-shadow:0 0 24px var(--tile-shadow,rgba(0,212,255,0.15));transform:translateY(-3px);}
.app-tile.unlicensed{cursor:not-allowed;--tile-glow:rgba(30,30,30,0.04);--tile-accent:#2a2a2a;}
.app-tile.unlicensed:hover .app-tooltip{opacity:1;}
.app-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:#060e14;border:1px solid #e03030;color:#ff5555;padding:6px 12px;font-size:0.72rem;letter-spacing:1px;border-radius:2px;white-space:nowrap;opacity:0;transition:opacity .2s;pointer-events:none;z-index:10;font-weight:bold;}
.app-icon{width:96px;height:96px;margin-bottom:18px;display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0;}
.app-name{font-size:0.82rem;font-weight:900;letter-spacing:2px;text-align:center;margin-bottom:8px;color:var(--tile-accent,#00d4ff);text-transform:uppercase;}
.app-desc{font-size:0.72rem;color:#6a9ab0;letter-spacing:0.3px;text-align:center;line-height:1.7;}
.app-desc.grey{color:#3a3a3a;}
.app-name.grey{color:#404040;}
.app-version{position:absolute;bottom:10px;right:12px;font-size:0.62rem;color:#3a6070;letter-spacing:1px;}
.app-version.grey{color:#252525;}
.app-status{position:absolute;top:10px;right:12px;font-size:0.65rem;letter-spacing:1px;padding:3px 8px;border-radius:2px;font-weight:bold;}
.app-status.live{color:#20c860;border:1px solid rgba(32,200,96,0.4);background:rgba(32,200,96,0.08);}
.app-status.unlicensed{color:#353535;border:1px solid #252525;background:rgba(0,0,0,0.3);}
.app-lock{position:absolute;top:11px;left:13px;font-size:0.9rem;color:#303030;}

.launcher-footer{position:relative;z-index:2;border-top:1px solid #1a3040;padding:10px 28px;display:flex;justify-content:space-between;align-items:center;font-size:0.68rem;color:#3a6070;letter-spacing:1px;flex-shrink:0;}

/* NSNSIM-122 addition: planning-status badge for tiles that are
 * unlinked-but-not-disabled (GEOINT / CYBER modules per PO Q1). */
.app-status.planning{color:#c89aff;border:1px solid rgba(200,154,255,0.35);background:rgba(200,154,255,0.06);}

/* NSNSIM-122 addition: 'unlinked' tile variant — cursor:default, no hover
 * lift, muted glow. GEOINT/CYBER (planning-only tiles per PO Q1/Q2). */
.app-tile.unlinked{cursor:default;}
.app-tile.unlinked:hover::before{opacity:1;}
.app-tile.unlinked:hover{border-color:#1a3040;box-shadow:none;transform:none;}
.app-tile.unlinked:hover .app-tooltip{opacity:1;}

/* CRT scanline overlay — matches ISR41 body::after */
body::after{content:'';position:fixed;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,var(--scanline,rgba(0,212,255,0.02)) 2px,var(--scanline,rgba(0,212,255,0.02)) 4px);pointer-events:none;z-index:9999}
