/* ===== 原点创客 登录弹窗组件样式（login-modal）=====
 * 作用域限定在 #loginModal 内，不影响宿主页面样式
 * 使用：把 <div id="akLoginModal"> 弹窗结构放入页面，引入本文件与 login-modal.js
 */
#loginModal, #loginModal *{margin:0;padding:0;box-sizing:border-box;font-family:system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;}#loginModal{position:fixed !important;top:50% !important;left:50% !important;transform:translate(-50%,-50%) !important;z-index:9999 !important;width:1040px;max-width:calc(100vw - 24px);height:760px;max-height:calc(100vh - 16px);border-radius:20px;overflow:hidden;box-shadow:0 25px 60px rgba(0,0,0,0.35);display:none;grid-template-columns:1fr 1fr;background:rgba(255,255,255,0.8);-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px);}#loginModal .left-panel{position:relative;display:flex;flex-direction:column;justify-content:space-between;background:linear-gradient(135deg,rgba(156,163,175,0.6) 0%,rgba(107,114,128,0.6) 50%,rgba(75,85,99,0.6) 100%);padding:24px;color:#fff;overflow:hidden;}#loginModal .brand-logo{display:flex;align-items:center;gap:8px;font-size:23px;font-weight:700;letter-spacing:3px;position:relative;z-index:20;
  font-family:'Consolas','Monaco','Courier New',monospace;
  color:#e8f4ff;
}#loginModal .characters-scale-wrap{transform:scale(0.7);transform-origin:bottom center;width:385px;height:280px;position:relative;z-index:20;display:flex;align-items:flex-end;justify-content:center;}#loginModal .characters-container{position:relative;width:550px;height:400px;}#loginModal .char{position:absolute;bottom:0;transition:all 0.7s ease-in-out;transform-origin:bottom center;}#loginModal .eye-wrap{position:absolute;display:flex;transition:all 0.7s ease-in-out;}#loginModal .eye-wrap-fast{position:absolute;display:flex;transition:all 0.2s ease-out;}#loginModal .eye{background:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:height 0.15s ease;}#loginModal .pupil{background:#2D2D2D;border-radius:50%;transition:transform 0.1s ease-out;}#loginModal .pupil-only{background:#2D2D2D;border-radius:50%;transition:transform 0.1s ease-out;}#loginModal .mouth{position:absolute;height:4px;background:#2D2D2D;border-radius:9999px;transition:all 0.2s ease-out;}#loginModal .char-purple{left:70px;width:180px;background:#6C3FF5;border-radius:10px 10px 0 0;z-index:1;}#loginModal .char-purple .eye-wrap{gap:32px;}#loginModal .char-purple .eye{width:18px;height:18px;}#loginModal .char-purple .pupil{width:7px;height:7px;}#loginModal .char-black{left:240px;width:120px;height:310px;background:#2D2D2D;border-radius:8px 8px 0 0;z-index:2;}#loginModal .char-black .eye-wrap{gap:24px;}#loginModal .char-black .eye{width:16px;height:16px;}#loginModal .char-black .pupil{width:6px;height:6px;}#loginModal .char-orange{left:0px;width:240px;height:200px;background:#FF9B6B;border-radius:120px 120px 0 0;z-index:3;}#loginModal .char-orange .eye-wrap-fast{gap:32px;}#loginModal .char-orange .pupil-only{width:12px;height:12px;}#loginModal .char-yellow{left:310px;width:140px;height:230px;background:#E8D754;border-radius:70px 70px 0 0;z-index:4;}#loginModal .char-yellow .eye-wrap-fast{gap:24px;}#loginModal .char-yellow .pupil-only{width:12px;height:12px;}#loginModal .char-yellow .mouth{width:80px;}#loginModal .bottom-links{position:relative;z-index:20;display:flex;align-items:center;gap:24px;font-size:12px;color:#4B5563;}#loginModal .bottom-links a{color:#4B5563;text-decoration:none;transition:color 0.2s;}#loginModal .bottom-links a:hover{color:#111827;}#loginModal .grid-bg{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,0.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,0.05) 1px,transparent 1px);background-size:20px 20px;}#loginModal .glow-1{position:absolute;top:25%;right:25%;width:256px;height:256px;background:rgba(156,163,175,0.2);border-radius:50%;filter:blur(48px);}#loginModal .glow-2{position:absolute;bottom:25%;left:25%;width:384px;height:384px;background:rgba(209,213,219,0.2);border-radius:50%;filter:blur(48px);}#loginModal .right-panel{display:flex;align-items:center;justify-content:center;padding:16px 36px;background:rgba(255,255,255,0.8);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);overflow:hidden;min-height:0;}#loginModal .form-container{width:100%;max-width:360px;max-height:100%;}#loginModal .form-header{text-align:center;margin-bottom:16px;}#loginModal .form-header h1{font-size:24px;font-weight:700;letter-spacing:-0.025em;margin-bottom:4px;color:#09090b;}#loginModal .form-header p{font-size:12px;color:#71717a;}#loginModal .login-tabs{display:flex;border-bottom:1px solid #e4e4e7;margin-bottom:16px;}#loginModal .login-tab{flex:1;padding:10px 0;text-align:center;font-size:14px;font-weight:500;color:#71717a;cursor:pointer;border:none;background:none;border-bottom:2px solid transparent;transition:all 0.2s;}#loginModal .login-tab.active{color:#6C3FF5;border-bottom-color:#6C3FF5;}#loginModal .login-tab:hover{color:#6C3FF5;}#loginModal .tab-panel{display:none;}#loginModal .tab-panel.active{display:block;}#loginModal .form-group{margin-bottom:12px;}#loginModal .form-group label{display:block;font-size:12px;font-weight:500;color:#09090b;margin-bottom:5px;}#loginModal .required{color:#ef4444;margin-left:2px;font-weight:700;}#loginModal .form-group input{width:100%;height:40px;padding:0 12px;border:1px solid rgba(0,0,0,0.1);border-radius:8px;font-size:13px;background:#fff;outline:none;transition:border-color 0.2s;}#loginModal .form-group input:focus{border-color:#6C3FF5;}#loginModal .form-group input::placeholder{color:#a1a1aa;}#loginModal .password-wrap{position:relative;}#loginModal .password-wrap input{padding-right:36px;}#loginModal .toggle-pwd{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:#71717a;display:flex;align-items:center;padding:3px;}#loginModal .toggle-pwd:hover{color:#09090b;}#loginModal .sms-wrap{display:flex;gap:8px;}#loginModal .sms-wrap input{flex:1;}#loginModal .sms-btn{height:40px;padding:0 12px;border:1px solid #6C3FF5;background:#fff;color:#6C3FF5;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all 0.2s;min-width:96px;}#loginModal .sms-btn:hover{background:#6C3FF5;color:#fff;}#loginModal .sms-btn:disabled{border-color:#d4d4d8;color:#a1a1aa;cursor:not-allowed;background:#f4f4f5;}#loginModal .captcha-wrap{margin-bottom:12px;}#loginModal .captcha-label{display:block;font-size:12px;font-weight:500;color:#09090b;margin-bottom:5px;}#loginModal .captcha-box{position:relative;width:100%;height:120px;border-radius:10px 10px 0 0;overflow:hidden;background-image:url('/img/captcha-bg.svg');background-size:cover;background-position:center;border:1px solid rgba(15,23,42,0.12);border-bottom:0;}#loginModal .captcha-pattern{display:none;}#loginModal .captcha-gap{position:absolute;width:41px;height:41px;background:rgba(0,0,0,0.5);border-radius:0;top:37px;box-shadow:inset 0 0 8px rgba(0,0,0,0.4);
  clip-path:url(#aklmGapClip);
}#loginModal .captcha-piece{position:absolute;width:41px;height:41px;top:37px;left:0;border-radius:0;cursor:grab;z-index:2;transition:filter 0.2s;
  background-image:url('/img/captcha-bg.svg');
  background-repeat:no-repeat;
  clip-path:url(#aklmPieceClip);
  filter:drop-shadow(0 0 1.5px rgba(255,255,255,0.9)) drop-shadow(0 0 3px rgba(255,255,255,0.5)) drop-shadow(0 2px 6px rgba(0,0,0,0.4));
}#loginModal .captcha-piece:active{cursor:grabbing;box-shadow:0 4px 12px rgba(0,0,0,0.4);}#loginModal .captcha-piece.verified{cursor:default;box-shadow:0 0 0 2px #22c55e,0 2px 8px rgba(0,0,0,0.3);}#loginModal .captcha-slider{position:relative;width:100%;height:34px;margin-top:0;background:#f8fafc;border-radius:0 0 10px 10px;border:1px solid rgba(15,23,42,0.12);border-top:0;overflow:hidden;}#loginModal .captcha-slider-track{position:absolute;left:0;top:0;height:100%;width:0;background:linear-gradient(90deg,#c4b5fd,#a5b4fc);border-radius:16px;transition:width 0.1s;}#loginModal .captcha-slider-btn{position:absolute;left:0;top:50%;transform:translateY(-50%);width:40px;height:28px;background:#fff;border-radius:14px;box-shadow:0 1px 4px rgba(0,0,0,0.2);cursor:grab;display:flex;align-items:center;justify-content:center;z-index:2;transition:left 0.1s;user-select:none;}#loginModal .captcha-slider-btn:active{cursor:grabbing;}#loginModal .captcha-slider-btn.verified{background:#22c55e;color:#fff;}#loginModal .captcha-slider-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:12px;color:#71717a;pointer-events:none;z-index:1;}#loginModal .captcha-refresh{position:absolute;top:6px;right:6px;width:24px;height:24px;background:rgba(255,255,255,0.8);border:none;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:3;color:#4b5563;transition:background 0.2s;}#loginModal .captcha-refresh:hover{background:#fff;}#loginModal .captcha-msg{font-size:11px;margin-top:4px;height:16px;}#loginModal .captcha-msg.success{color:#22c55e;}#loginModal .captcha-msg.error{color:#ef4444;}#loginModal .form-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}#loginModal .forgot-link{font-size:12px;color:#6C3FF5;font-weight:500;text-decoration:none;}#loginModal .forgot-link:hover{text-decoration:underline;}#loginModal .error-msg{padding:8px 10px;font-size:12px;color:#dc2626;background:rgba(220,38,38,0.1);border:1px solid rgba(220,38,38,0.3);border-radius:8px;margin-bottom:10px;display:none;}#loginModal .hover-btn{position:relative;width:100%;height:40px;padding:0 20px;background:#fff;border:1px solid rgba(0,0,0,0.1);border-radius:9999px;font-size:14px;font-weight:500;color:#09090b;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;overflow:hidden;transition:all 0.3s ease;}#loginModal .hover-btn::before{content:'';position:absolute;inset:0;background:#09090b;transform:scaleX(0);transform-origin:left;transition:transform 0.3s ease;}#loginModal .hover-btn:hover::before{transform:scaleX(1);}#loginModal .hover-btn:hover{color:#fff;border-color:#09090b;}#loginModal .hover-btn span, #loginModal .hover-btn svg{position:relative;z-index:1;}#loginModal .hover-btn:disabled{opacity:0.5;cursor:not-allowed;}#loginModal .signup-tip{text-align:center;font-size:12px;color:#71717a;margin-top:16px;}#loginModal .signup-tip a{color:#09090b;font-weight:500;text-decoration:none;}#loginModal .signup-tip a:hover{text-decoration:underline;}#loginModal .error-msg.success{color:#16a34a;background:rgba(22,163,74,0.1);border-color:rgba(22,163,74,0.3);}#loginModal .brand-logo{cursor:pointer;user-select:none;}/* ===== 响应式：平板/手机适配 ===== */
@media (max-width:960px){#loginModal{top:0;left:0;transform:none;width:100vw;max-width:none;height:100vh;max-height:none;border-radius:0;grid-template-columns:1fr;}#loginModal .left-panel{display:none;}#loginModal .brand-logo{font-size:18px;letter-spacing:2px;}#loginModal .characters-scale-wrap{transform:scale(0.5);transform-origin:top center;width:100%;height:200px;}#loginModal .bottom-links{display:none;}#loginModal .right-panel{padding:16px;overflow:hidden;height:100vh;}
}#loginModal .modal-close{position:absolute;top:12px;right:16px;z-index:10000;width:32px;height:32px;border:none;border-radius:50%;background:rgba(255,255,255,0.6);color:#333;font-size:20px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background 0.2s,color 0.2s;}#loginModal .modal-close:hover{background:#fff;color:#333;}


/* ===== 隐藏浏览器自带的密码可见切换图标（避免与自定义眼睛按钮重复） ===== */
#loginModal input[type="password"]::-ms-reveal{display:none !important;visibility:hidden !important;width:0 !important;height:0 !important;}
#loginModal input[type="password"]::-ms-clear{display:none !important;visibility:hidden !important;}
#loginModal input[type="password"]::-webkit-credentials-auto-fill-button{display:none !important;visibility:hidden !important;}

/* ===== 角色云朵对话气泡（Catalyst 风格：白色圆角 + 小尾巴 + 弹入动画） ===== */
#loginModal .speech-bubble{
  position:absolute;
  bottom:100%;
  left:50%;
  transform:translate(-50%,0);
  background:#fff;
  border-radius:20px;
  padding:8px 14px;
  font-size:14px;
  color:#333;
  font-weight:600;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
  white-space:nowrap;
  z-index:50;
  margin-bottom:8px;
  animation:bubblePop 0.3s ease;
}
#loginModal .speech-bubble::after{
  content:'';
  position:absolute;
  bottom:-6px;
  left:50%;
  transform:translateX(-50%);
  width:0;height:0;
  border-left:6px solid transparent;
  border-right:6px solid transparent;
  border-top:6px solid #fff;
}
@keyframes bubblePop{
  from{ opacity:0; transform:translate(-50%,8px) scale(0.8); }
  to{ opacity:1; transform:translate(-50%,0) scale(1); }
}

/* ===== 重置密码视图：蓝色主按钮 + 输入框标红 ===== */
#loginModal .btn-reset{background:#167BFF;border-color:#167BFF;color:#fff;}
#loginModal .btn-reset:hover{color:#fff;border-color:#167BFF;}
#loginModal .btn-reset::before{background:#0e5fd8;}
#loginModal .form-group input.invalid{border-color:#ef4444 !important;box-shadow:0 0 0 3px rgba(239,68,68,0.12);}

/* ===== 编辑器顶部导航（Arduino / Scratch / TurboWarp 共用，与 Python 编辑器一致） ===== */
.ed-topnav{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:#fff;border-bottom:1px solid #e5e7eb;box-shadow:0 1px 6px rgba(0,0,0,0.06);position:relative;z-index:9995;}
.ed-nav-left{display:flex;align-items:center;}
.ed-nav-home{width:32px;height:32px;border:none;background:transparent;border-radius:8px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:#374151;transition:background .2s;padding:0;}
.ed-nav-home:hover{background:#f3f4f6;}
.ed-nav-center{flex:1;display:flex;justify-content:center;min-width:0;}
.ed-nav-title{font-size:16px;font-weight:700;color:#111827;white-space:nowrap;}
.ed-nav-right{display:flex;align-items:center;gap:8px;}
.ed-nav-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:none;border-radius:6px;color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:filter .2s;font-family:inherit;}
.ed-nav-btn:hover{filter:brightness(1.08);}
.ed-nav-save{background:#167BFF;}
.ed-nav-publish{background:#FF8819;}
.ed-nav-login{background:#FF8819;}
/* 编辑器页顶部导航占位（Arduino 页面在导航下留出空间） */
.ed-nav-spacer{height:54px;}

@media (max-height:740px){
#loginModal .form-header{margin-bottom:10px;}
#loginModal .login-tabs{margin-bottom:10px;}
#loginModal .form-group{margin-bottom:6px;}
#loginModal .captcha-wrap{margin-bottom:8px;}
#loginModal .captcha-box{height:104px;}
#loginModal .signup-tip{margin-top:10px;}
}
@media (max-width:960px) and (max-height:720px){
#loginModal .form-container{width:min(100%,340px);}
}

/* 学校子域名注册上下文 */
.school-context{padding:11px 13px;border:2px solid #dbeafe;border-radius:12px;background:#f8fbff;color:#64748b;font-size:14px;font-weight:700}
.school-context.ready{border-color:#bfdbfe;color:#1d4ed8;background:#eff6ff}
.school-context.error{border-color:#fecaca;color:#b91c1c;background:#fef2f2}
/* 登录后未分配校区提示 */
.assignment-required-overlay{position:fixed;inset:0;z-index:100000;display:grid;place-items:center;background:rgba(15,23,42,.48);backdrop-filter:blur(8px);padding:20px}
.assignment-required-card{width:min(460px,100%);background:#fff;border-radius:24px;padding:34px;text-align:center;box-shadow:0 30px 80px rgba(15,23,42,.28);font-family:system-ui,-apple-system,"Microsoft YaHei",sans-serif;color:#1e293b}
.assignment-required-icon{width:72px;height:72px;margin:0 auto 18px;border-radius:22px;background:#dbeafe;display:grid;place-items:center;font-size:34px}
.assignment-required-card h2{margin:0 0 12px;font-size:23px}.assignment-required-card p{margin:9px 0;color:#64748b;line-height:1.75}.assignment-required-card strong{color:#1d4ed8}.assignment-required-tip{margin:20px 0;padding:14px;border-radius:13px;background:#f8fbff;border:1px solid #dbeafe;color:#334155;font-weight:700}.assignment-required-card button{width:100%;border:0;border-radius:12px;padding:13px;background:#2563eb;color:#fff;font-size:15px;font-weight:800;cursor:pointer}

@media (max-width:960px) and (max-height:720px){
  #registerView .form-header{display:none}
  #registerView .form-group{margin-bottom:7px}
  #registerView .form-group input,#registerView .sms-btn{height:34px}
  #registerView .school-context{padding:8px 10px;font-size:13px}
  #registerView .captcha-box{height:86px}
  #registerView .captcha-wrap{margin-bottom:6px}
  #registerView .signup-tip{margin-top:6px}
}

@media (max-width:960px) and (max-height:720px){
  #registerView{transform:scale(.90);transform-origin:top center;width:111.1%;margin-left:-5.55%}
}

