:root{
  --bg:#eef2f8; --panel:#ffffff; --panel2:#e7edf5; --card:#ffffff;
  --text:#16202e; --muted:#5b6b80; --cyan:#0a9db0; --accent:#2b7de9;
  --line:rgba(20,40,70,.10); --radius:14px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  background:radial-gradient(1200px 600px at 70% -10%,#dbe8fb 0%,var(--bg) 55%);color:var(--text);line-height:1.7}
.hidden{display:none !important}
a{color:var(--cyan);text-decoration:none}

/* 登录页 */
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login__card{width:min(380px,92vw);background:var(--panel);border:1px solid var(--line);
  border-radius:18px;padding:34px 28px;box-shadow:0 20px 60px rgba(0,0,0,.45);text-align:center}
.login__brand{color:var(--muted);letter-spacing:2px;margin:0 0 6px;font-size:13px}
.login__title{margin:0 0 22px;font-size:20px}
.login__form{display:flex;flex-direction:column;gap:12px}
.login__form input{padding:12px 14px;border-radius:10px;border:1px solid var(--line);
  background:var(--bg);color:var(--text);font-size:15px;outline:none}
.login__form input:focus{border-color:var(--cyan)}
.login__form button{padding:12px;border:0;border-radius:10px;cursor:pointer;font-size:15px;font-weight:600;
  background:linear-gradient(90deg,var(--cyan),var(--accent));color:#06121f}
.login__err{color:#ff8a8a;min-height:20px;margin:10px 0 0;font-size:13px}

/* 导航 */
.nav{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;
  padding:14px 22px;background:rgba(255,255,255,.82);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.nav__brand{font-weight:700;font-size:18px;color:var(--text)}
.nav__brand span{color:var(--cyan)}
.nav__right{display:flex;align-items:center;gap:10px}
.role-tag{font-size:12px;color:var(--muted);border:1px solid var(--line);padding:3px 9px;border-radius:999px}
.nav__btn{padding:7px 13px;border-radius:9px;border:1px solid var(--cyan);background:transparent;color:var(--cyan);
  cursor:pointer;font-size:13px}
.nav__btn--ghost{border-color:var(--line);color:var(--muted)}

/* Hero */
.hero{position:relative;padding:90px 22px 60px;text-align:center;overflow:hidden}
.hero__scan{position:absolute;inset:0;background:linear-gradient(transparent 50%,rgba(54,214,231,.05) 50%);
  background-size:100% 4px;opacity:.4;pointer-events:none}
.hero__inner{position:relative;max-width:900px;margin:0 auto}
.hero__site{letter-spacing:3px;color:var(--cyan);margin:0 0 8px;font-size:13px}
.hero__name{font-size:38px;margin:0 0 10px}
.hero__role{color:var(--muted);margin:0 0 18px}
.hero__tags{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-bottom:22px}
.tag{background:var(--panel2);border:1px solid var(--line);padding:6px 12px;border-radius:999px;font-size:13px;color:var(--text)}
.tag--accent{border-color:var(--cyan);color:var(--cyan)}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:14px}
.stats__item{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px 10px}
.stats__num{font-size:20px;font-weight:700;color:var(--cyan)}
.stats__label{font-size:12px;color:var(--muted);margin-top:4px}

/* 区块 */
.section{max-width:1040px;margin:0 auto;padding:46px 22px}
.section__title{font-size:24px;margin:0 0 22px;padding-left:12px;border-left:4px solid var(--cyan)}
.section--accent{background:linear-gradient(180deg,rgba(79,168,255,.08),transparent);border-radius:18px}
.section__hint{color:var(--muted);font-size:14px}
.about__meta{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.about__meta span{background:var(--panel2);border:1px solid var(--line);padding:5px 12px;border-radius:999px;font-size:13px}
.about__text{font-size:15px}
.skills{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.skill-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px}
.skill-card h3{margin:0 0 10px;color:var(--cyan);font-size:16px}
.skill-card ul{margin:0;padding-left:18px;color:var(--text)}
.timeline__item{display:grid;grid-template-columns:160px 1fr;gap:18px;padding:16px 0;border-top:1px solid var(--line)}
.timeline__when{color:var(--muted);font-size:14px}
.timeline__body h3{margin:0 0 6px;font-size:16px}
.projects{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.project{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px}
.project--accent{border-color:var(--cyan)}
.project h3{margin:0 0 8px;font-size:16px}
.project__link{display:inline-block;margin-top:8px;font-size:14px}
.jobs__text{font-size:15px}
.jobs__status{display:flex;gap:14px;flex-wrap:wrap;margin:16px 0}
.jobs__status span{background:var(--panel2);border:1px solid var(--line);padding:8px 14px;border-radius:10px;font-size:13px}
.resume-btn{display:inline-block;margin-top:6px;padding:10px 18px;border-radius:10px;background:linear-gradient(90deg,var(--cyan),var(--accent));color:#06121f;font-weight:600}
.contact{display:flex;flex-direction:column;gap:10px}
.contact__item{display:flex;gap:10px;background:var(--card);border:1px solid var(--line);padding:12px 14px;border-radius:10px}
.contact__item span{color:var(--muted);min-width:64px}
.edu p{margin:6px 0;font-size:14px;color:var(--muted)}
.blog-list{color:var(--text);font-size:15px}
.blog-link{margin-top:10px}

/* 媒体画廊 */
.gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.gallery__item{position:relative;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;aspect-ratio:4/3}
.gallery__item img,.gallery__item video{width:100%;height:100%;object-fit:cover;display:block}
.gallery__ph{display:flex;align-items:center;justify-content:center;height:100%;color:var(--muted);font-size:34px}
.gallery__cap{position:absolute;left:0;right:0;bottom:0;padding:8px 10px;font-size:12px;background:rgba(0,0,0,.55)}
.empty-tip{color:var(--muted);font-size:14px;padding:20px 0}

.footer{text-align:center;color:var(--muted);padding:30px 20px;border-top:1px solid var(--line);font-size:13px}

/* 弹窗 */
.modal{position:fixed;inset:0;z-index:50;background:rgba(15,23,42,.35);display:flex;align-items:flex-start;justify-content:center;padding:30px 14px;overflow:auto}
.modal__box{width:min(760px,96vw);background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:22px}
.modal__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.modal__head h2{margin:0;font-size:18px}
.modal__close{background:none;border:0;color:var(--muted);font-size:26px;cursor:pointer;line-height:1}
.modal__actions{display:flex;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.up-btn{display:inline-block;padding:9px 16px;border-radius:10px;background:var(--card);border:1px solid var(--cyan);color:var(--cyan);cursor:pointer;font-size:14px}
.modal__hint{color:var(--muted);font-size:12px;margin-bottom:14px}
.modal__foot{margin-top:16px;text-align:right}
.media-list{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.m-item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px}
.m-item__prev{height:120px;border-radius:8px;overflow:hidden;background:var(--bg);display:flex;align-items:center;justify-content:center}
.m-item__prev img,.m-item__prev video{width:100%;height:100%;object-fit:cover}
.m-item__cap{width:100%;margin-top:8px;padding:7px 9px;border-radius:8px;border:1px solid var(--line);background:var(--bg);color:var(--text);font-size:13px}
.m-item__op{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.m-item__op button{flex:1;padding:6px 8px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--muted);cursor:pointer;font-size:12px}
.m-item__op button:hover{border-color:var(--cyan);color:var(--cyan)}

/* 文字编辑表单 */
.text-form{display:flex;flex-direction:column;gap:16px}
.fgroup{border:1px solid var(--line);border-radius:12px;padding:14px;background:var(--card)}
.fgroup__title{font-size:14px;color:var(--cyan);margin:0 0 10px;font-weight:600}
.frow{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.frow label{font-size:12px;color:var(--muted)}
.frow input,.frow textarea{padding:9px 11px;border-radius:8px;border:1px solid var(--line);background:var(--bg);color:var(--text);font-size:14px;font-family:inherit}
.frow textarea{min-height:74px;resize:vertical}
.frow--list input{margin-bottom:6px}
.flist-add{font-size:12px;color:var(--cyan);background:none;border:1px dashed var(--line);border-radius:8px;padding:6px;cursor:pointer}
.flist-del{font-size:11px;color:#ff9a9a;background:none;border:0;cursor:pointer;align-self:flex-start}

/* Toast */
.toast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%);z-index:80;background:var(--card);
  border:1px solid var(--cyan);color:var(--text);padding:11px 18px;border-radius:10px;font-size:14px;box-shadow:0 10px 30px rgba(0,0,0,.4)}

@media(max-width:760px){
  .stats{grid-template-columns:repeat(2,1fr)}
  .skills,.projects,.gallery,.media-list{grid-template-columns:1fr}
  .timeline__item{grid-template-columns:1fr}
  .hero__name{font-size:30px}
}
