:root{
  --bg:#07111f;
  --bg-deep:#050c17;
  --panel:#0b1728;
  --panel-soft:#0e1d31;
  --text:#e6f1ff;
  --muted:#8892b0;
  --muted-light:#a8b6cf;
  --accent:#64ffda;
  --accent-2:#6bdcff;
  --accent-soft:rgba(100,255,218,.10);
  --line:rgba(136,146,176,.18);
  --line-strong:rgba(100,255,218,.28);
  --shadow:0 28px 70px rgba(0,0,0,.32);
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}

body{
  margin:0;
  min-height:100vh;
  font-family:Inter,Segoe UI,Arial,sans-serif;
  color:var(--text);
  background:
    radial-gradient(circle at 12% 0%,rgba(25,54,92,.28),transparent 34%),
    radial-gradient(circle at 88% 32%,rgba(18,64,82,.08),transparent 28%),
    linear-gradient(180deg,var(--bg-deep),var(--bg));
  position:relative;
  overflow-x:hidden;
}

body::before{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:0;
  opacity:.16;
  background-image:
    linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);
  background-size:54px 54px;
  mask-image:linear-gradient(to bottom,rgba(255,255,255,.45),transparent 76%);
}

body::after{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:80;
  opacity:.035;
  background-image:radial-gradient(circle at 20% 20%,#fff 0 1px,transparent 1.4px);
  background-size:7px 7px;
  mix-blend-mode:soft-light;
}

a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}

.scroll-progress{
  position:fixed;
  top:0;
  left:0;
  width:100%;
  height:2px;
  z-index:100;
  background:transparent;
}

.scroll-progress span{
  display:block;
  width:0%;
  height:100%;
  background:linear-gradient(90deg,var(--accent),var(--accent-2));
  box-shadow:0 0 14px rgba(100,255,218,.42);
}

.page-shell{
  width:min(1260px,calc(100% - 44px));
  margin:auto;
  position:relative;
  z-index:1;
}

.topbar{
  height:78px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:24px;
  position:sticky;
  top:0;
  z-index:60;
  background:rgba(5,12,23,.82);
  backdrop-filter:blur(20px);
  -webkit-backdrop-filter:blur(20px);
  border-bottom:1px solid rgba(136,146,176,.09);
}

.brand{
  display:flex;
  align-items:center;
  gap:12px;
}

.brand-mark{
  width:42px;
  height:42px;
  border-radius:12px;
  display:grid;
  place-items:center;
  font-family:Manrope,Inter,sans-serif;
  font-weight:800;
  color:#04100c;
  background:linear-gradient(135deg,var(--accent),#72f3ff);
  box-shadow:0 10px 30px rgba(100,255,218,.15),inset 0 1px 0 rgba(255,255,255,.55);
  transition:.25s ease;
}

.brand:hover .brand-mark{
  transform:rotate(-5deg) translateY(-1px);
}

.brand-copy strong,.brand-copy small{display:block}
.brand-copy strong{font-size:.96rem}
.brand-copy small{margin-top:3px;color:var(--muted);font-size:.75rem}

.topnav{
  display:flex;
  align-items:center;
  gap:18px;
}

.topnav a{
  position:relative;
  padding:29px 0 26px;
  font-size:.78rem;
  color:#c9d6e7;
  transition:.2s ease;
}

.topnav a span{
  color:var(--accent);
  margin-right:4px;
}

.topnav a::after{
  content:"";
  position:absolute;
  left:0;
  right:0;
  bottom:-1px;
  height:2px;
  transform:scaleX(0);
  transform-origin:left;
  background:var(--accent);
  transition:.2s ease;
}

.topnav a:hover,
.topnav a.active{color:var(--accent)}

.topnav a:hover::after,
.topnav a.active::after{transform:scaleX(1)}

.portfolio-layout{
  display:grid;
  grid-template-columns:340px minmax(0,1fr);
  gap:64px;
  align-items:start;
}

.intro-panel{
  min-height:calc(100vh - 78px);
  position:relative;
}

.intro-inner{
  position:sticky;
  top:108px;
  min-height:calc(100vh - 132px);
  display:flex;
  flex-direction:column;
  isolation:isolate;
}

.intro-watermark{
  position:absolute;
  top:-55px;
  left:-22px;
  z-index:-1;
  font-family:Manrope,Inter,sans-serif;
  font-size:11rem;
  line-height:1;
  font-weight:800;
  letter-spacing:-13px;
  color:transparent;
  -webkit-text-stroke:1px rgba(136,146,176,.055);
  user-select:none;
  pointer-events:none;
}

.kicker{
  margin:0 0 16px;
  color:var(--accent);
  text-transform:uppercase;
  letter-spacing:2.2px;
  font-size:.70rem;
  font-weight:800;
}

.intro-panel h1{
  margin:0;
  font-family:Manrope,Inter,sans-serif;
  font-size:clamp(3.55rem,5.6vw,5rem);
  line-height:.88;
  letter-spacing:-4px;
}

.intro-panel h1 span{
  display:block;
  color:var(--accent);
  text-shadow:0 0 44px rgba(100,255,218,.08);
}

.intro-panel h2{
  margin:24px 0 0;
  max-width:325px;
  font-size:1.14rem;
  line-height:1.55;
  color:#d9e6f5;
  font-weight:600;
}

.intro-text{
  margin:20px 0 0;
  max-width:325px;
  color:var(--muted-light);
  line-height:1.85;
  font-size:.93rem;
}

.intro-actions{
  display:flex;
  align-items:center;
  gap:22px;
  margin-top:28px;
}

.primary-link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:46px;
  padding:0 18px;
  border-radius:8px;
  border:1px solid var(--accent);
  color:var(--accent);
  background:linear-gradient(180deg,rgba(100,255,218,.035),transparent);
  font-size:.84rem;
  font-weight:700;
  transition:.2s ease;
}

.primary-link:hover{
  background:var(--accent-soft);
  transform:translateY(-2px);
  box-shadow:0 12px 28px rgba(0,0,0,.18);
}

.text-link{
  color:#dce8f4;
  font-size:.84rem;
  font-weight:600;
  transition:.2s ease;
}

.text-link:hover{
  color:var(--accent);
  transform:translateX(2px);
}

.intro-tech{
  display:flex;
  flex-wrap:wrap;
  gap:7px;
  margin-top:26px;
  max-width:325px;
}

.intro-tech span,.mini-tags span,.project-stack span{
  padding:6px 9px;
  border-radius:999px;
  border:1px solid rgba(136,146,176,.14);
  color:#a9b9cf;
  font-size:.69rem;
  background:rgba(255,255,255,.018);
  transition:.18s ease;
}

.intro-tech span:hover,.mini-tags span:hover,.project-stack span:hover{
  color:var(--accent);
  border-color:rgba(100,255,218,.24);
  background:rgba(100,255,218,.04);
}

.intro-meta{
  margin-top:auto;
  padding-top:30px;
  display:grid;
  gap:7px;
  color:#71809b;
  font-size:.73rem;
}

.intro-meta span:first-child{
  display:flex;
  align-items:center;
  gap:8px;
  color:#a9b9cf;
}

.status-dot{
  width:8px;
  height:8px;
  border-radius:50%;
  background:var(--accent);
  box-shadow:0 0 0 5px rgba(100,255,218,.08);
}

.scroll-cue{
  display:flex;
  align-items:center;
  gap:10px;
  margin-top:22px;
  color:#64738b;
  font-size:.68rem;
  letter-spacing:.4px;
  transition:.2s ease;
}

.scroll-cue:hover{color:var(--accent)}

.scroll-cue-line{
  width:28px;
  height:1px;
  background:currentColor;
  position:relative;
  overflow:hidden;
}

.scroll-cue-line::after{
  content:"";
  position:absolute;
  inset:0;
  background:var(--accent);
  transform:translateX(-100%);
  animation:cue 2.4s ease-in-out infinite;
}

@keyframes cue{
  0%,25%{transform:translateX(-100%)}
  65%,100%{transform:translateX(100%)}
}

.content-column{
  padding-bottom:60px;
  min-width:0;
}

.portfolio-section{
  padding:96px 0 28px;
  scroll-margin-top:76px;
  position:relative;
}

.portfolio-section::before{
  content:attr(data-section);
  position:absolute;
  top:56px;
  right:0;
  font-family:Manrope,Inter,sans-serif;
  font-size:5.7rem;
  font-weight:800;
  letter-spacing:-5px;
  color:rgba(136,146,176,.025);
  pointer-events:none;
}

.section-heading{
  display:flex;
  align-items:center;
  gap:13px;
  margin-bottom:36px;
  position:relative;
  z-index:2;
}

.section-heading>span{
  color:var(--accent);
  font-family:Manrope,Inter,sans-serif;
  font-size:.80rem;
  font-weight:800;
}

.section-heading h2{
  margin:0;
  font-family:Manrope,Inter,sans-serif;
  font-size:clamp(1.8rem,3vw,2.45rem);
  letter-spacing:-1.25px;
}

.section-line{
  height:1px;
  flex:1;
  max-width:260px;
  background:linear-gradient(90deg,var(--line),transparent);
}

.about-layout{
  display:grid;
  grid-template-columns:1.18fr .82fr;
  gap:46px;
  align-items:start;
}

.about-copy p{
  color:var(--muted-light);
  line-height:1.9;
  font-size:.98rem;
  margin:0 0 18px;
}

.about-copy .lead-copy{
  color:#dbe8f6;
  font-size:1.17rem;
  line-height:1.75;
}

.about-copy strong{color:var(--accent)}

.about-facts{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:12px;
  margin-top:30px;
}

.about-facts article{
  min-height:92px;
  padding:17px 14px;
  border-top:1px solid var(--line-strong);
  background:linear-gradient(180deg,rgba(100,255,218,.03),transparent);
  transition:.22s ease;
}

.about-facts article:hover{
  transform:translateY(-3px);
  background:linear-gradient(180deg,rgba(100,255,218,.06),transparent);
}

.about-facts strong{
  display:block;
  font-family:Manrope,Inter,sans-serif;
  font-size:1.6rem;
}

.about-facts span{
  display:block;
  margin-top:5px;
  color:var(--muted);
  font-size:.71rem;
}

.profile-photo{
  margin:0;
  position:relative;
  isolation:isolate;
}

.profile-photo::before{
  content:"";
  position:absolute;
  inset:14px -14px -14px 14px;
  border:1px solid rgba(100,255,218,.52);
  border-radius:12px;
  z-index:-1;
  transition:.25s ease;
}

.profile-photo::after{
  content:"";
  position:absolute;
  inset:0;
  border-radius:12px;
  z-index:2;
  background:linear-gradient(160deg,rgba(100,255,218,.07),transparent 42%);
  pointer-events:none;
  transition:.25s ease;
}

.profile-photo:hover::before{
  transform:translate(4px,4px);
  opacity:.75;
}

.profile-photo:hover::after{opacity:.25}

.profile-photo img{
  width:100%;
  aspect-ratio:4/5;
  object-fit:cover;
  object-position:center;
  border-radius:12px;
  position:relative;
  z-index:1;
  filter:saturate(.92) contrast(1.03);
}

.profile-photo figcaption{
  position:relative;
  z-index:3;
  margin-top:16px;
}

.profile-photo figcaption strong,.profile-photo figcaption span{display:block}
.profile-photo figcaption strong{font-size:.88rem}
.profile-photo figcaption span{margin-top:4px;color:var(--muted);font-size:.72rem}

.experience-list{
  display:grid;
  position:relative;
}

.experience-list::before{
  content:"";
  position:absolute;
  left:156px;
  top:8px;
  bottom:8px;
  width:1px;
  background:linear-gradient(180deg,var(--line-strong),var(--line),transparent);
}

.experience-item{
  display:grid;
  grid-template-columns:138px 1fr;
  gap:34px;
  padding:28px 0 30px;
  border-top:1px solid var(--line);
  transition:.2s ease;
  position:relative;
}

.experience-item:last-child{border-bottom:1px solid var(--line)}

.experience-item::before{
  content:"";
  position:absolute;
  left:151px;
  top:35px;
  width:10px;
  height:10px;
  border-radius:50%;
  border:2px solid var(--accent);
  background:var(--bg);
  box-shadow:0 0 0 5px rgba(100,255,218,.05);
}

.experience-item:hover{
  padding-left:10px;
  background:linear-gradient(90deg,rgba(100,255,218,.035),transparent 72%);
}

.experience-period{
  color:var(--muted);
  font-size:.76rem;
  padding-top:4px;
}

.experience-body{
  padding-left:2px;
}

.experience-body h3{
  margin:0 0 9px;
  font-size:1.06rem;
}

.experience-body p{
  margin:0;
  color:var(--muted-light);
  line-height:1.78;
  font-size:.92rem;
}

.mini-tags{
  display:flex;
  flex-wrap:wrap;
  gap:7px;
  margin-top:16px;
}

.featured-projects{
  display:grid;
  gap:112px;
}

.featured-project{
  display:grid;
  grid-template-columns:minmax(0,1.16fr) minmax(300px,.84fr);
  align-items:center;
  position:relative;
}

.featured-project.reverse{
  grid-template-columns:minmax(300px,.84fr) minmax(0,1.16fr);
}

.featured-project.reverse .project-visual{order:2}
.featured-project.reverse .project-copy{
  order:1;
  margin-right:-46px;
  margin-left:0;
  text-align:left;
}

.project-visual{
  min-height:330px;
  border-radius:16px;
  overflow:hidden;
  border:1px solid rgba(136,146,176,.12);
  background:#0a1627;
  box-shadow:var(--shadow);
  position:relative;
  transition:.28s ease;
}

.project-visual::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:linear-gradient(145deg,rgba(100,255,218,.05),transparent 42%);
  opacity:.9;
  transition:.25s ease;
}

.featured-project:hover .project-visual{
  transform:translateY(-4px);
  border-color:rgba(100,255,218,.22);
}

.featured-project:hover .project-visual::after{opacity:.25}

.browser-bar{
  height:38px;
  padding:0 14px;
  display:flex;
  align-items:center;
  gap:6px;
  border-bottom:1px solid rgba(136,146,176,.10);
  background:#0c1a2e;
}

.browser-bar span{
  width:7px;
  height:7px;
  border-radius:50%;
  background:#41516b;
}

.project-copy{
  position:relative;
  z-index:4;
  margin-left:-48px;
  padding:24px 26px;
  border:1px solid rgba(136,146,176,.13);
  border-radius:12px;
  background:rgba(8,20,34,.90);
  backdrop-filter:blur(15px);
  -webkit-backdrop-filter:blur(15px);
  box-shadow:0 22px 48px rgba(0,0,0,.28);
}

.project-kicker{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin-bottom:8px;
}

.project-type{
  display:block;
  color:var(--accent);
  font-size:.71rem;
  font-weight:700;
}

.project-number{
  font-family:Manrope,Inter,sans-serif;
  font-size:.72rem;
  color:#596a84;
}

.project-copy h3{
  margin:0 0 13px;
  font-family:Manrope,Inter,sans-serif;
  font-size:1.82rem;
  letter-spacing:-1px;
}

.project-copy p{
  margin:0;
  color:var(--muted-light);
  line-height:1.8;
  font-size:.92rem;
}

.project-stack{
  display:flex;
  flex-wrap:wrap;
  gap:7px;
  margin-top:17px;
}

.mock-rpg{
  position:absolute;
  inset:38px 0 0;
  background:
    linear-gradient(180deg,rgba(40,91,122,.45),transparent 34%),
    repeating-linear-gradient(0deg,#13263a 0 28px,#102237 28px 56px);
}

.mock-building{
  position:absolute;
  left:18%;
  top:18%;
  width:64%;
  height:48%;
  border:2px solid rgba(100,255,218,.45);
  background:#172e43;
  box-shadow:inset 0 -30px 0 rgba(0,0,0,.15);
}

.mock-building::before,.mock-building::after{
  content:"";
  position:absolute;
  top:16%;
  width:18%;
  height:32%;
  background:#294863;
}

.mock-building::before{left:15%}
.mock-building::after{right:15%}

.mock-building span{
  position:absolute;
  left:50%;
  top:14px;
  transform:translateX(-50%);
  color:var(--accent);
  font-family:Manrope,Inter,sans-serif;
  font-weight:800;
}

.mock-character{
  position:absolute;
  left:47%;
  bottom:54px;
  width:20px;
  height:28px;
  background:var(--accent);
  box-shadow:0 10px 0 #31485f;
}

.mock-dialog{
  position:absolute;
  left:7%;
  right:7%;
  bottom:18px;
  padding:10px 14px;
  border:1px solid rgba(255,255,255,.18);
  background:#08111d;
  color:#dce8f4;
  font-size:.72rem;
}

.visual-campus{
  background:
    radial-gradient(circle at 78% 25%,rgba(100,255,218,.10),transparent 25%),
    #091524;
}

.mock-campus{padding:22px}

.mock-nav{
  height:34px;
  border-radius:10px;
  background:#101f33;
  margin-bottom:18px;
}

.mock-hero{
  display:grid;
  grid-template-columns:1.2fr .8fr;
  gap:13px;
  height:140px;
}

.mock-hero div:first-child{
  border-radius:12px;
  background:linear-gradient(135deg,#142b45,#0b1b2d);
  grid-row:1/3;
}

.mock-hero div:nth-child(2),.mock-hero div:nth-child(3){
  border-radius:12px;
  background:#10253b;
}

.mock-cards{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:10px;
  margin-top:13px;
}

.mock-cards span{
  height:64px;
  border-radius:10px;
  background:#10253b;
  border-top:1px solid rgba(100,255,218,.18);
}

.visual-mobile{
  display:grid;
  place-items:center;
  background:
    radial-gradient(circle at 50% 30%,rgba(100,255,218,.11),transparent 32%),
    #091524;
}

.phone-mock{
  width:150px;
  height:275px;
  border:5px solid #17263a;
  border-radius:28px;
  padding:12px;
  background:#050a10;
  box-shadow:0 22px 50px rgba(0,0,0,.35);
  transition:.25s ease;
}

.featured-project:hover .phone-mock{transform:translateY(-4px) rotate(.8deg)}

.phone-notch{
  width:56px;
  height:8px;
  border-radius:999px;
  background:#111a26;
  margin:0 auto 10px;
}

.phone-screen{
  height:calc(100% - 18px);
  border-radius:17px;
  padding:18px 14px;
  background:linear-gradient(180deg,#151e2c,#0c1420);
}

.poke-title{
  color:var(--accent);
  font-size:.75rem;
  font-weight:800;
  letter-spacing:2px;
  text-align:center;
}

.poke-ball{
  width:74px;
  height:74px;
  border-radius:50%;
  margin:28px auto;
  border:8px solid #d1dceb;
  position:relative;
}

.poke-ball::before{
  content:"";
  position:absolute;
  left:-7px;
  right:-7px;
  top:50%;
  height:8px;
  transform:translateY(-50%);
  background:#d1dceb;
}

.poke-ball::after{
  content:"";
  position:absolute;
  left:50%;
  top:50%;
  width:18px;
  height:18px;
  border-radius:50%;
  transform:translate(-50%,-50%);
  background:#151e2c;
  border:5px solid #d1dceb;
}

.poke-lines{
  display:grid;
  gap:8px;
}

.poke-lines span{
  height:8px;
  border-radius:999px;
  background:#1e334a;
}

.poke-lines span:nth-child(2){width:75%}
.poke-lines span:nth-child(3){width:55%}

.tech-groups{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:14px;
}

.tech-groups article{
  min-height:150px;
  padding:24px;
  border:1px solid rgba(136,146,176,.10);
  border-top-color:var(--line-strong);
  border-radius:10px;
  background:linear-gradient(180deg,rgba(100,255,218,.025),rgba(255,255,255,.008));
  transition:.22s ease;
}

.tech-groups article:hover{
  transform:translateY(-4px);
  border-color:rgba(100,255,218,.20);
  background:linear-gradient(180deg,rgba(100,255,218,.055),rgba(255,255,255,.01));
  box-shadow:0 18px 36px rgba(0,0,0,.18);
}

.tech-index{
  color:var(--accent);
  font-size:.70rem;
  font-weight:800;
}

.tech-groups h3{
  margin:14px 0 8px;
  font-size:1.13rem;
}

.tech-groups p{
  margin:0;
  color:var(--muted-light);
  line-height:1.75;
  font-size:.87rem;
}

.campus-intro{
  max-width:680px;
  margin-bottom:28px;
}

.campus-intro p{
  color:var(--muted-light);
  line-height:1.75;
}

.campus-intro .lead-copy{
  margin:0 0 8px;
  color:#e3edf7;
  font-size:1.18rem;
  font-weight:600;
}

.campus-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:16px;
}

.campus-card{
  min-height:315px;
  padding:25px;
  border-radius:14px;
  border:1px solid rgba(136,146,176,.15);
  background:linear-gradient(145deg,#0e1d31,#091522);
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  transition:.25s ease;
  position:relative;
  overflow:hidden;
}

.campus-card::before{
  content:attr(data-campus);
  position:absolute;
  right:-8px;
  bottom:-17px;
  font-family:Manrope,Inter,sans-serif;
  font-size:4.4rem;
  font-weight:800;
  letter-spacing:-3px;
  color:rgba(255,255,255,.025);
  pointer-events:none;
}

.campus-card::after{
  content:"";
  position:absolute;
  width:210px;
  height:210px;
  border-radius:50%;
  right:-78px;
  bottom:-92px;
  background:radial-gradient(circle,rgba(100,255,218,.13),transparent 70%);
  transition:.3s ease;
}

.campus-card:hover{
  transform:translateY(-6px);
  border-color:var(--line-strong);
  box-shadow:0 24px 54px rgba(0,0,0,.25);
}

.campus-card:hover::after{
  transform:scale(1.14);
}

.campus-card-top{
  display:flex;
  justify-content:space-between;
  align-items:center;
}

.campus-number{
  color:var(--accent);
  font-size:.76rem;
  font-weight:800;
}

.campus-status{
  padding:5px 8px;
  border-radius:999px;
  background:rgba(100,255,218,.08);
  color:var(--accent);
  border:1px solid rgba(100,255,218,.16);
  font-size:.62rem;
  font-weight:800;
}

.campus-card small{
  color:var(--muted);
  font-size:.73rem;
}

.campus-card h3{
  margin:7px 0 10px;
  font-family:Manrope,Inter,sans-serif;
  font-size:2.15rem;
  letter-spacing:-1px;
}

.campus-card p{
  margin:0;
  color:var(--muted-light);
  line-height:1.72;
  font-size:.9rem;
  max-width:340px;
}

.campus-arrow{
  color:var(--accent);
  font-size:.82rem;
  font-weight:700;
  position:relative;
  z-index:2;
  transition:.2s ease;
}

.campus-card:hover .campus-arrow{
  transform:translateX(5px);
}

.closing-panel{
  margin-top:118px;
  padding:60px 0 30px;
  border-top:1px solid var(--line);
  max-width:740px;
}

.closing-panel h2{
  margin:0;
  font-family:Manrope,Inter,sans-serif;
  font-size:clamp(2.3rem,5vw,4.2rem);
  line-height:1.04;
  letter-spacing:-2px;
}

.closing-panel>p:not(.kicker){
  color:var(--muted-light);
  line-height:1.8;
  max-width:560px;
  margin:18px 0 24px;
}

.footer{
  margin-top:72px;
  padding:22px 0 28px;
  border-top:1px solid rgba(136,146,176,.10);
  display:flex;
  justify-content:space-between;
  gap:20px;
  color:#66758e;
  font-size:.72rem;
}

.reveal{
  opacity:0;
  transform:translateY(22px);
  transition:opacity .7s ease,transform .7s ease;
}

.reveal.in-view{
  opacity:1;
  transform:none;
}

@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
  }
  .reveal{opacity:1;transform:none}
}

@media(max-width:1080px){
  .portfolio-layout{
    grid-template-columns:305px minmax(0,1fr);
    gap:44px;
  }

  .topnav{gap:12px}
  .topnav a{font-size:.72rem}

  .featured-project,
  .featured-project.reverse{
    grid-template-columns:1fr;
    gap:22px;
  }

  .featured-project.reverse .project-visual,
  .featured-project.reverse .project-copy{
    order:initial;
  }

  .featured-project.reverse .project-copy,
  .project-copy{
    margin:0;
  }
}

@media(max-width:900px){
  .page-shell{width:min(100% - 28px,900px)}
  .topnav{display:none}

  .portfolio-layout{display:block}

  .intro-panel{
    min-height:auto;
    padding:68px 0 46px;
  }

  .intro-inner{
    position:static;
    min-height:auto;
  }

  .intro-meta{margin-top:28px}
  .scroll-cue{display:none}

  .portfolio-section{padding-top:78px}

  .about-layout{grid-template-columns:1fr}

  .profile-photo{max-width:380px}

  .experience-list::before{display:none}
  .experience-item::before{display:none}

  .project-visual{min-height:290px}
}

@media(max-width:620px){
  .page-shell{width:min(100% - 20px,620px)}
  .topbar{height:70px}
  .brand-copy small{display:none}

  .intro-panel{padding-top:46px}

  .intro-panel h1{
    font-size:3.45rem;
    letter-spacing:-3px;
  }

  .intro-watermark{
    font-size:8rem;
    top:-28px;
  }

  .about-facts,
  .tech-groups,
  .campus-grid{
    grid-template-columns:1fr;
  }

  .experience-item{
    grid-template-columns:1fr;
    gap:8px;
    padding-left:0!important;
  }

  .project-visual{min-height:250px}

  .project-copy{
    padding:20px;
  }

  .footer{flex-direction:column}
}

/* Social links */
.social-links{
  display:flex;
  align-items:center;
  gap:14px;
  margin-top:24px;
}

.social-links a{
  width:38px;
  height:38px;
  display:grid;
  place-items:center;
  border-radius:10px;
  color:#7f8da5;
  border:1px solid rgba(136,146,176,.12);
  background:rgba(255,255,255,.012);
  transition:transform .2s ease,color .2s ease,border-color .2s ease,background .2s ease,box-shadow .2s ease;
}

.social-links a:hover{
  color:var(--accent);
  border-color:rgba(100,255,218,.32);
  background:rgba(100,255,218,.055);
  transform:translateY(-3px);
  box-shadow:0 10px 26px rgba(0,0,0,.2),0 0 24px rgba(100,255,218,.06);
}

.social-links svg{
  width:20px;
  height:20px;
  fill:currentColor;
  stroke:currentColor;
  stroke-width:1.8;
}

.social-links svg rect,
.social-links svg circle{
  fill:none;
}

.social-links .instagram-dot{
  fill:currentColor;
  stroke:none;
}

/* Cursor-follow illumination inspired by editorial portfolio interactions */
.spotlight-zone{
  --spot-x:50%;
  --spot-y:50%;
}

.experience-item.spotlight-zone{
  background:
    radial-gradient(420px circle at var(--spot-x) var(--spot-y),
      rgba(100,255,218,.095),
      rgba(100,255,218,.028) 28%,
      transparent 62%);
}

.experience-item.spotlight-zone:hover{
  background:
    radial-gradient(460px circle at var(--spot-x) var(--spot-y),
      rgba(100,255,218,.13),
      rgba(100,255,218,.035) 32%,
      transparent 64%);
}

.about-facts article.spotlight-zone{
  background:
    radial-gradient(280px circle at var(--spot-x) var(--spot-y),
      rgba(100,255,218,.12),
      transparent 58%),
    linear-gradient(180deg,rgba(100,255,218,.025),transparent);
}

.tech-groups article.spotlight-zone{
  background:
    radial-gradient(340px circle at var(--spot-x) var(--spot-y),
      rgba(100,255,218,.115),
      transparent 58%),
    linear-gradient(180deg,rgba(100,255,218,.02),rgba(255,255,255,.008));
}

.project-copy.spotlight-zone{
  background:
    radial-gradient(380px circle at var(--spot-x) var(--spot-y),
      rgba(100,255,218,.10),
      transparent 60%),
    rgba(8,20,34,.91);
}

.campus-card.spotlight-zone{
  background:
    radial-gradient(420px circle at var(--spot-x) var(--spot-y),
      rgba(100,255,218,.13),
      transparent 58%),
    linear-gradient(145deg,#0e1d31,#091522);
}

.primary-link,
.text-link,
.project-copy h3,
.experience-body h3,
.tech-groups h3,
.campus-card h3{
  transition:color .2s ease,text-shadow .2s ease,transform .2s ease;
}

.experience-item:hover h3,
.tech-groups article:hover h3,
.featured-project:hover .project-copy h3,
.campus-card:hover h3{
  color:#f4fbff;
  text-shadow:0 0 18px rgba(100,255,218,.08);
}

/* Floating One Piece / Nika reference */
.nika-fruit{
  --fruit-x:0px;
  --fruit-y:0px;
  position:fixed;
  right:28px;
  bottom:24px;
  z-index:70;
  width:78px;
  height:78px;
  padding:0;
  border:0;
  background:transparent;
  cursor:pointer;
  transform:translate(var(--fruit-x),var(--fruit-y));
  filter:drop-shadow(0 12px 18px rgba(0,0,0,.28));
}

.nika-fruit svg{
  width:100%;
  height:100%;
  overflow:visible;
  animation:nikaFloat 4.8s ease-in-out infinite;
  transform-origin:50% 55%;
  transition:filter .25s ease;
}

.nika-fruit:hover svg{
  filter:drop-shadow(0 0 14px rgba(213,116,255,.42));
}

.nika-fruit:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:6px;
  border-radius:50%;
}

.nika-label{
  position:absolute;
  right:88px;
  top:50%;
  transform:translateY(-50%) translateX(8px);
  white-space:nowrap;
  padding:7px 10px;
  border-radius:8px;
  border:1px solid rgba(213,116,255,.22);
  background:rgba(8,15,28,.88);
  color:#d9c7f4;
  font-size:.68rem;
  letter-spacing:.3px;
  opacity:0;
  pointer-events:none;
  transition:.2s ease;
  backdrop-filter:blur(12px);
}

.nika-fruit:hover .nika-label,
.nika-fruit:focus-visible .nika-label{
  opacity:1;
  transform:translateY(-50%) translateX(0);
}

.nika-fruit.is-burst svg{
  animation:nikaBurst .7s cubic-bezier(.2,.8,.2,1);
}

.nika-cloud{
  transform-origin:60px 34px;
  animation:nikaCloud 3.8s ease-in-out infinite;
}

.nika-body{
  transform-origin:60px 70px;
  animation:nikaPulse 3.2s ease-in-out infinite;
}

@keyframes nikaFloat{
  0%,100%{transform:translateY(0) rotate(-3deg)}
  50%{transform:translateY(-10px) rotate(3deg)}
}

@keyframes nikaCloud{
  0%,100%{transform:rotate(-3deg) scale(1)}
  50%{transform:rotate(4deg) scale(1.05)}
}

@keyframes nikaPulse{
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.025)}
}

@keyframes nikaBurst{
  0%{transform:scale(1) rotate(0)}
  35%{transform:scale(1.22) rotate(-18deg)}
  70%{transform:scale(.96) rotate(12deg)}
  100%{transform:scale(1) rotate(0)}
}

@media(max-width:900px){
  .nika-fruit{
    width:64px;
    height:64px;
    right:16px;
    bottom:16px;
  }

  .nika-label{
    display:none;
  }
}

@media(max-width:620px){
  .social-links{
    margin-top:20px;
  }

  .nika-fruit{
    width:56px;
    height:56px;
    right:12px;
    bottom:12px;
  }
}


/* Final refinements: portrait framing + Gomu Gomu only at page end */
.profile-photo{
  width:100%;
  max-width:292px;
  justify-self:end;
  margin-top:-4px;
}

.profile-photo img{
  aspect-ratio:3/4;
  object-fit:cover;
  object-position:center center;
}

.profile-photo figcaption{
  padding-right:4px;
}

.closing-panel{
  position:relative;
  max-width:none;
  min-height:300px;
  padding-right:175px;
  overflow:visible;
}

.nika-fruit{
  --fruit-x:0px;
  --fruit-y:0px;
  position:absolute;
  right:8px;
  bottom:34px;
  width:132px;
  height:132px;
  z-index:4;
  transform:none;
  opacity:1;
  pointer-events:auto;
  filter:drop-shadow(0 18px 26px rgba(0,0,0,.34));
}

.nika-fruit svg{
  width:100%;
  height:100%;
  animation:gomuFloat 4.4s ease-in-out infinite;
  transform-origin:50% 58%;
}

.nika-fruit:hover svg{
  filter:drop-shadow(0 0 16px rgba(139,119,232,.34));
}

.nika-label{
  right:142px;
  color:#b8aaf1;
  border-color:rgba(139,119,232,.26);
}

.gomu-stem{
  transform-origin:76px 38px;
  animation:gomuStem 4.4s ease-in-out infinite;
}

.gomu-body{
  transform-origin:75px 90px;
  animation:gomuPulse 3.8s ease-in-out infinite;
}

@keyframes gomuFloat{
  0%,100%{transform:translateY(0) rotate(-2deg)}
  50%{transform:translateY(-10px) rotate(2deg)}
}

@keyframes gomuStem{
  0%,100%{transform:rotate(-1deg)}
  50%{transform:rotate(3deg)}
}

@keyframes gomuPulse{
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.018)}
}

@media(max-width:900px){
  .profile-photo{
    max-width:310px;
    justify-self:start;
  }

  .closing-panel{
    min-height:270px;
    padding-right:135px;
  }

  .nika-fruit{
    width:104px;
    height:104px;
    right:0;
    bottom:32px;
  }
}

@media(max-width:620px){
  .profile-photo{
    max-width:100%;
  }

  .closing-panel{
    min-height:360px;
    padding-right:0;
    padding-bottom:150px;
  }

  .nika-fruit{
    width:94px;
    height:94px;
    right:8px;
    bottom:34px;
  }

  .nika-label{
    display:none;
  }
}


/* CV / formación profesional */
.cv-grid{
  display:grid;
  grid-template-columns:1.08fr 1fr 1fr;
  gap:14px;
  margin-top:48px;
}

.cv-card{
  min-height:260px;
  padding:22px;
  border:1px solid rgba(136,146,176,.12);
  border-top-color:rgba(100,255,218,.34);
  border-radius:12px;
  background:
    radial-gradient(360px circle at var(--spot-x,50%) var(--spot-y,50%),rgba(100,255,218,.07),transparent 60%),
    linear-gradient(180deg,rgba(255,255,255,.025),rgba(255,255,255,.008));
  transition:transform .22s ease,border-color .22s ease,box-shadow .22s ease;
}

.cv-card:hover{
  transform:translateY(-4px);
  border-color:rgba(100,255,218,.22);
  box-shadow:0 20px 42px rgba(0,0,0,.20);
}

.cv-label{
  display:inline-block;
  color:var(--accent);
  text-transform:uppercase;
  letter-spacing:1.4px;
  font-size:.68rem;
  font-weight:800;
}

.cv-card h3{
  margin:12px 0 10px;
  font-family:Manrope,Inter,sans-serif;
  font-size:1.05rem;
  line-height:1.35;
}

.cv-card p{
  margin:0;
  color:var(--muted-light);
  line-height:1.72;
  font-size:.84rem;
}

.cv-list{
  margin:0;
  padding-left:17px;
  color:var(--muted-light);
  font-size:.80rem;
  line-height:1.58;
}

.cv-list li{
  margin-bottom:7px;
}

.cv-list li::marker{
  color:var(--accent);
}

/* Más amplitud para el perfil profesional */
.profile-photo{
  max-width:315px;
}

.profile-photo img{
  aspect-ratio:3/4;
  object-fit:cover;
  object-position:50% 50%;
}

/* Seis grupos técnicos en escritorio */
.tech-groups{
  grid-template-columns:repeat(3,1fr);
}

/* Imagen 2D Gomu Gomu al final */
.closing-panel{
  min-height:330px;
  padding-right:205px;
}

.nika-fruit{
  width:150px;
  height:170px;
  right:8px;
  bottom:28px;
  display:grid;
  place-items:center;
  overflow:visible;
}

.gomu-image{
  width:100%;
  height:100%;
  object-fit:contain;
  display:block;
  transform-origin:50% 62%;
  animation:gomuImageFloat 4.5s ease-in-out infinite;
  filter:drop-shadow(0 18px 24px rgba(0,0,0,.34));
  transition:filter .25s ease;
}

.nika-fruit:hover .gomu-image{
  filter:
    drop-shadow(0 18px 24px rgba(0,0,0,.34))
    drop-shadow(0 0 14px rgba(139,119,232,.28));
}

.nika-fruit.is-burst .gomu-image{
  animation:gomuImageBurst .72s cubic-bezier(.2,.8,.2,1);
}

@keyframes gomuImageFloat{
  0%,100%{transform:translateY(0) rotate(-1.7deg)}
  50%{transform:translateY(-12px) rotate(1.7deg)}
}

@keyframes gomuImageBurst{
  0%{transform:scale(1) rotate(0)}
  32%{transform:scale(1.12) rotate(-8deg)}
  66%{transform:scale(.98) rotate(5deg)}
  100%{transform:scale(1) rotate(0)}
}

@media(max-width:1080px){
  .cv-grid{
    grid-template-columns:1fr 1fr;
  }

  .cv-card:first-child{
    grid-column:1 / -1;
    min-height:auto;
  }

  .tech-groups{
    grid-template-columns:repeat(2,1fr);
  }
}

@media(max-width:900px){
  .profile-photo{
    max-width:340px;
  }

  .closing-panel{
    padding-right:160px;
  }

  .nika-fruit{
    width:120px;
    height:140px;
  }
}

@media(max-width:620px){
  .cv-grid,
  .tech-groups{
    grid-template-columns:1fr;
  }

  .cv-card:first-child{
    grid-column:auto;
  }

  .profile-photo{
    max-width:100%;
  }

  .closing-panel{
    min-height:420px;
    padding-right:0;
    padding-bottom:185px;
  }

  .nika-fruit{
    width:112px;
    height:138px;
    right:8px;
    bottom:28px;
  }
}


/* Ajustes finales solicitados */
body{
  --cursor-x:50vw;
  --cursor-y:24vh;
  background:
    radial-gradient(620px circle at var(--cursor-x) var(--cursor-y),
      rgba(100,255,218,.105),
      rgba(79,168,255,.045) 30%,
      transparent 64%),
    radial-gradient(circle at 12% 0%,rgba(25,54,92,.28),transparent 34%),
    radial-gradient(circle at 88% 32%,rgba(18,64,82,.08),transparent 28%),
    linear-gradient(180deg,var(--bg-deep),var(--bg));
}

.topbar{
  justify-content:flex-end;
}

.topnav{
  margin-left:auto;
}

/* La fruta ya no reserva espacio en el cierre */
.closing-panel{
  min-height:auto;
  padding-right:0;
}

/* Easter egg únicamente al pie final */
.footer{
  position:relative;
  min-height:118px;
  padding:24px 118px 30px 0;
  align-items:flex-end;
}

.footer .nika-fruit{
  position:absolute;
  right:0;
  bottom:18px;
  width:88px;
  height:98px;
  margin:0;
  padding:0;
  border:0;
  background:transparent;
  display:grid;
  place-items:center;
  cursor:pointer;
  z-index:3;
  opacity:.88;
  transition:opacity .22s ease,transform .22s ease;
}

.footer .nika-fruit:hover{
  opacity:1;
  transform:translateY(-2px);
}

.footer .gomu-image{
  width:100%;
  height:100%;
  object-fit:contain;
  display:block;
  animation:gomuImageFloat 4.8s ease-in-out infinite;
  filter:drop-shadow(0 12px 16px rgba(0,0,0,.28));
}

.footer .nika-label{
  right:96px;
  top:50%;
}

@media(max-width:900px){
  .footer{
    padding-right:105px;
  }

  .footer .nika-fruit{
    width:78px;
    height:88px;
    right:2px;
  }
}

@media(max-width:620px){
  .topbar{
    justify-content:flex-end;
  }

  .footer{
    min-height:170px;
    padding:22px 0 105px;
  }

  .footer .nika-fruit{
    width:74px;
    height:84px;
    right:0;
    bottom:14px;
  }
}


/* Visibilidad garantizada del easter egg en el último bloque */
.footer{
  overflow:visible;
}

.footer .nika-fruit{
  display:grid!important;
  visibility:visible!important;
  opacity:1!important;
  width:108px;
  height:126px;
  right:8px;
  bottom:8px;
  z-index:12;
}

.footer .gomu-image{
  display:block!important;
  width:100%;
  height:100%;
  object-fit:contain;
}


/* Narrative content refinements */
.cv-intro{
  margin:0 0 14px;
  color:var(--muted);
  line-height:1.65;
  font-size:.78rem;
}

.section-intro{
  max-width:760px;
  margin:-10px 0 30px;
  color:var(--muted-light);
  line-height:1.85;
  font-size:.95rem;
}

/* One Piece easter egg */
.one-piece-easter{
  position:relative;
  margin-top:82px;
  min-height:330px;
  padding:38px 210px 38px 34px;
  border-top:1px solid rgba(139,119,232,.30);
  border-bottom:1px solid rgba(136,146,176,.10);
  background:
    radial-gradient(360px circle at 90% 50%,rgba(139,119,232,.11),transparent 68%),
    linear-gradient(135deg,rgba(139,119,232,.045),rgba(100,255,218,.018) 42%,transparent 72%);
  overflow:hidden;
}

.one-piece-easter::before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:
    linear-gradient(90deg,rgba(139,119,232,.12) 0 2px,transparent 2px 100%);
  opacity:.42;
}

.easter-copy{
  position:relative;
  z-index:2;
  max-width:700px;
}

.easter-eyebrow{
  display:inline-block;
  margin-bottom:14px;
  color:#aa99f0;
  text-transform:uppercase;
  letter-spacing:1.8px;
  font-size:.67rem;
  font-weight:800;
}

.easter-quote{
  margin:0;
  font-family:Manrope,Inter,sans-serif;
  font-size:clamp(1.9rem,4vw,3.4rem);
  line-height:1.08;
  letter-spacing:-1.8px;
  color:#eef4ff;
}

.easter-japanese{
  margin:12px 0 0;
  color:#9e8bea;
  font-size:1rem;
  font-weight:700;
  letter-spacing:.5px;
}

.easter-context{
  max-width:650px;
  margin:22px 0 0;
  color:var(--muted-light);
  line-height:1.82;
  font-size:.92rem;
}

.easter-credit{
  margin:20px 0 0;
  color:#70809a;
  font-size:.72rem;
  line-height:1.6;
}

.easter-credit span{
  display:block;
  margin-top:4px;
  color:#8f82ca;
}

.one-piece-easter .nika-fruit{
  position:absolute;
  right:24px;
  bottom:24px;
  width:150px;
  height:176px;
  display:grid!important;
  place-items:center;
  visibility:visible!important;
  opacity:.94!important;
  z-index:4;
  padding:0;
  border:0;
  background:transparent;
  cursor:pointer;
  filter:none;
  transition:opacity .22s ease,transform .22s ease;
}

.one-piece-easter .nika-fruit:hover{
  opacity:1!important;
  transform:translateY(-3px);
}

.one-piece-easter .gomu-image{
  display:block!important;
  width:100%;
  height:100%;
  object-fit:contain;
  animation:gomuImageFloat 4.8s ease-in-out infinite;
  filter:
    drop-shadow(0 16px 20px rgba(0,0,0,.35))
    drop-shadow(0 0 10px rgba(139,119,232,.12));
}

.one-piece-easter .nika-label{
  right:158px;
  top:54%;
  color:#c4b7f6;
  border-color:rgba(139,119,232,.28);
  background:rgba(8,15,28,.91);
}

/* Footer returns to a minimal footer now that the fruit lives above it */
.footer{
  min-height:auto;
  padding:24px 0 28px;
  align-items:center;
  overflow:visible;
}

@media(max-width:900px){
  .one-piece-easter{
    padding-right:170px;
  }

  .one-piece-easter .nika-fruit{
    width:125px;
    height:150px;
    right:12px;
  }
}

@media(max-width:620px){
  .section-intro{
    margin-top:0;
  }

  .one-piece-easter{
    min-height:500px;
    padding:30px 20px 180px;
  }

  .easter-quote{
    font-size:2rem;
  }

  .one-piece-easter .nika-fruit{
    width:118px;
    height:142px;
    right:18px;
    bottom:22px;
  }

  .one-piece-easter .nika-label{
    display:none;
  }
}


/* One Piece: título original en japonés + traducción + reflexión */
.easter-japanese{
  margin:0;
  max-width:760px;
  font-family:Manrope,Inter,sans-serif;
  font-size:clamp(2.3rem,5vw,4.4rem);
  line-height:1.04;
  letter-spacing:-1.4px;
  color:#eef4ff;
  font-weight:800;
  text-wrap:balance;
}

.easter-quote{
  margin:12px 0 0;
  font-family:Inter,Segoe UI,Arial,sans-serif;
  font-size:clamp(1.05rem,2vw,1.35rem);
  line-height:1.5;
  letter-spacing:0;
  color:#b9addf;
  font-weight:600;
}

.easter-reflection{
  display:grid;
  gap:14px;
  max-width:720px;
  margin-top:26px;
}

.easter-reflection p{
  margin:0;
  color:var(--muted-light);
  line-height:1.85;
  font-size:.92rem;
}

.easter-reflection em{
  color:#c7bcf1;
  font-style:normal;
  font-weight:700;
}

.easter-credit{
  margin-top:24px;
  padding-top:16px;
  border-top:1px solid rgba(139,119,232,.15);
}

@media(max-width:620px){
  .easter-japanese{
    font-size:2.25rem;
  }

  .easter-quote{
    font-size:1rem;
  }

  .easter-reflection p{
    font-size:.88rem;
  }
}


/* Perfil principal en formato JSON */
.profile-json{
  margin:28px 0 26px;
  border:1px solid rgba(136,146,176,.14);
  border-radius:16px;
  overflow:hidden;
  background:
    linear-gradient(180deg,rgba(11,23,40,.92),rgba(7,17,31,.78));
  box-shadow:
    0 18px 42px rgba(0,0,0,.18),
    inset 0 1px 0 rgba(255,255,255,.025);
}

.profile-json-header{
  min-height:42px;
  padding:0 14px;
  display:flex;
  align-items:center;
  gap:9px;
  border-bottom:1px solid rgba(136,146,176,.10);
  background:rgba(255,255,255,.015);
}

.profile-json-dot{
  width:7px;
  height:7px;
  flex:0 0 7px;
  border-radius:50%;
  background:var(--accent);
  box-shadow:0 0 14px rgba(100,255,218,.45);
}

.profile-json-title{
  color:#b9c7dc;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.72rem;
  font-weight:700;
  letter-spacing:.02em;
}

.profile-json-type{
  margin-left:auto;
  color:#5e6f88;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.58rem;
  font-weight:700;
  letter-spacing:.12em;
}

.profile-json-code{
  margin:0;
  padding:16px 16px 18px;
  overflow:auto;
  white-space:pre-wrap;
  overflow-wrap:anywhere;
  tab-size:2;
  color:#9fb0c7;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:clamp(.68rem,1.1vw,.76rem);
  line-height:1.62;
  scrollbar-width:thin;
}

.profile-json-code code{
  font:inherit;
}

.json-brace{
  color:#e6f1ff;
}

.json-key{
  color:#7dd3fc;
}

.json-string{
  color:#b8e0c8;
}

.json-motto{
  color:#c7b8ff;
}

.profile-json:hover{
  border-color:rgba(100,255,218,.24);
  box-shadow:
    0 20px 48px rgba(0,0,0,.22),
    0 0 0 1px rgba(100,255,218,.025),
    inset 0 1px 0 rgba(255,255,255,.03);
}

@media(max-width:900px){
  .profile-json{
    max-width:620px;
  }

  .profile-json-code{
    font-size:.76rem;
  }
}

@media(max-width:620px){
  .profile-json{
    margin-top:22px;
    border-radius:13px;
  }

  .profile-json-code{
    padding:14px;
    font-size:.68rem;
    line-height:1.58;
  }
}


/* Tipos adicionales dentro de victor.json */
.json-number{
  color:#f0b979;
}


/* Segundo bloque de perfil: vargas.java */
.profile-code{
  margin:18px 0 24px;
  border:1px solid rgba(136,146,176,.14);
  border-radius:16px;
  overflow:hidden;
  background:
    linear-gradient(180deg,rgba(11,23,40,.92),rgba(7,17,31,.78));
  box-shadow:
    0 18px 42px rgba(0,0,0,.16),
    inset 0 1px 0 rgba(255,255,255,.025);
}

.profile-code-header{
  min-height:42px;
  padding:0 14px;
  display:flex;
  align-items:center;
  gap:9px;
  border-bottom:1px solid rgba(136,146,176,.10);
  background:rgba(255,255,255,.015);
}

.profile-code-dot{
  width:7px;
  height:7px;
  flex:0 0 7px;
  border-radius:50%;
}

.java-dot{
  background:#f0b323;
  box-shadow:0 0 14px rgba(240,179,35,.35);
}

.profile-code-title{
  color:#b9c7dc;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.72rem;
  font-weight:700;
}

.profile-code-type{
  margin-left:auto;
  color:#5e6f88;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.58rem;
  font-weight:700;
  letter-spacing:.12em;
}

.profile-code-body{
  margin:0;
  padding:16px 16px 18px;
  overflow:auto;
  white-space:pre-wrap;
  overflow-wrap:anywhere;
  tab-size:2;
  color:#9fb0c7;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:clamp(.66rem,1.05vw,.74rem);
  line-height:1.6;
  scrollbar-width:thin;
}

.profile-code-body code{
  font:inherit;
}

.java-keyword{
  color:#c792ea;
}

.java-class{
  color:#ffcb6b;
}

.java-method{
  color:#82aaff;
}

.java-string{
  color:#c3e88d;
}

.java-brace{
  color:#e6f1ff;
}

.profile-code:hover{
  border-color:rgba(240,179,35,.24);
  box-shadow:
    0 20px 48px rgba(0,0,0,.2),
    0 0 0 1px rgba(240,179,35,.025),
    inset 0 1px 0 rgba(255,255,255,.03);
}

@media(max-width:620px){
  .profile-code{
    border-radius:13px;
  }

  .profile-code-body{
    padding:14px;
    font-size:.66rem;
    line-height:1.56;
  }
}


/* Etiquetas discretas para perfiles sociales */
.social-links a{
  position:relative;
}

.social-links a::after{
  content:attr(data-label);
  position:absolute;
  left:50%;
  bottom:calc(100% + 9px);
  transform:translate(-50%,4px);
  padding:5px 8px;
  border:1px solid rgba(136,146,176,.14);
  border-radius:7px;
  background:rgba(5,12,23,.94);
  color:#b9c7dc;
  font-size:.62rem;
  font-weight:700;
  letter-spacing:.02em;
  white-space:nowrap;
  pointer-events:none;
  opacity:0;
  transition:opacity .18s ease,transform .18s ease;
  box-shadow:0 10px 24px rgba(0,0,0,.22);
}

.social-links a:hover::after,
.social-links a:focus-visible::after{
  opacity:1;
  transform:translate(-50%,0);
}


/* Stack técnico dentro de Tecnologías y competencias */
.tech-stackline{
  margin-top:16px;
  padding-top:13px;
  border-top:1px solid rgba(136,146,176,.10);
  color:var(--accent);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.69rem;
  line-height:1.65;
  letter-spacing:.01em;
}

.tech-groups article{
  min-height:220px;
}


/* =========================================================
   PLENUS · Portal de actividades interactivas
   ========================================================= */
.plenus-portal{
  --plenus-accent:#64ffda;
  --plenus-blue:#6bdcff;
  --plenus-panel:rgba(10,24,41,.78);
  --plenus-border:rgba(136,146,176,.15);
  --plenus-cursor-x:50vw;
  --plenus-cursor-y:28vh;
  min-height:100vh;
  background:
    radial-gradient(620px circle at var(--plenus-cursor-x) var(--plenus-cursor-y),
      rgba(100,255,218,.075),
      rgba(107,220,255,.028) 30%,
      transparent 66%),
    radial-gradient(circle at 12% 0%,rgba(25,54,92,.28),transparent 34%),
    radial-gradient(circle at 88% 32%,rgba(18,64,82,.08),transparent 28%),
    linear-gradient(180deg,var(--bg-deep),var(--bg));
  background-attachment:fixed;
}

.plenus-shell{
  width:min(1180px,calc(100% - 40px));
  margin:0 auto;
  padding-bottom:40px;
  position:relative;
  z-index:2;
}

.plenus-topbar{
  min-height:78px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:24px;
  position:sticky;
  top:0;
  z-index:40;
  border-bottom:1px solid rgba(136,146,176,.10);
  background:rgba(5,12,23,0);
  backdrop-filter:blur(0);
  -webkit-backdrop-filter:blur(0);
  transition:
    background .28s ease,
    border-color .28s ease,
    box-shadow .28s ease,
    backdrop-filter .28s ease;
}

.plenus-topbar::before{
  content:"";
  position:absolute;
  inset:0 -18px;
  z-index:-1;
  border-radius:0 0 14px 14px;
  background:linear-gradient(180deg,rgba(7,17,31,0),rgba(7,17,31,0));
  opacity:0;
  transition:opacity .28s ease,background .28s ease;
  pointer-events:none;
}

.plenus-topbar.is-scrolled{
  border-bottom-color:rgba(100,255,218,.12);
  background:rgba(5,12,23,.66);
  backdrop-filter:blur(18px) saturate(125%);
  -webkit-backdrop-filter:blur(18px) saturate(125%);
  box-shadow:0 14px 34px rgba(0,0,0,.16);
}

.plenus-topbar.is-scrolled::before{
  opacity:1;
  background:
    linear-gradient(180deg,rgba(8,20,34,.82),rgba(5,12,23,.68));
}

.plenus-topbar.is-scrolled .plenus-identity-mark{
  border-color:rgba(100,255,218,.52);
  box-shadow:
    0 7px 22px rgba(0,0,0,.12),
    inset 0 0 22px rgba(100,255,218,.04);
}

.plenus-identity{
  display:flex;
  align-items:center;
  gap:12px;
}

.plenus-identity-mark{
  width:42px;
  height:42px;
  border:1px solid rgba(100,255,218,.38);
  border-radius:11px;
  display:flex;
  align-items:center;
  justify-content:center;
  color:var(--plenus-accent);
  background:rgba(100,255,218,.045);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.72rem;
  font-weight:800;
  letter-spacing:-.08em;
  box-shadow:inset 0 0 22px rgba(100,255,218,.025);
  position:relative;
  overflow:hidden;
  transition:transform .22s ease,border-color .22s ease,background .22s ease,box-shadow .22s ease;
}

.plenus-identity-mark::before{
  content:"";
  position:absolute;
  inset:-60%;
  background:linear-gradient(115deg,transparent 38%,rgba(107,220,255,.16) 50%,transparent 62%);
  transform:translateX(-72%) rotate(8deg);
  transition:transform .45s ease;
}

.plenus-brand-bracket,
.plenus-brand-letter{
  position:relative;
  z-index:1;
}

.plenus-brand-bracket{
  color:var(--plenus-blue);
  font-size:.76rem;
  font-weight:800;
}

.plenus-brand-letter{
  margin:0 1px;
  color:var(--plenus-accent);
  font-size:.86rem;
  font-weight:900;
  letter-spacing:-.02em;
  text-shadow:0 0 12px rgba(100,255,218,.28);
}

.plenus-identity:hover .plenus-identity-mark,
.plenus-identity:focus-visible .plenus-identity-mark{
  transform:translateY(-1px);
  border-color:rgba(100,255,218,.62);
  background:rgba(100,255,218,.075);
  box-shadow:0 8px 24px rgba(0,0,0,.16),inset 0 0 24px rgba(100,255,218,.045);
}

.plenus-identity:hover .plenus-identity-mark::before,
.plenus-identity:focus-visible .plenus-identity-mark::before{
  transform:translateX(72%) rotate(8deg);
}

.plenus-identity strong,
.plenus-identity small{
  display:block;
}

.plenus-identity strong{
  color:#e6f1ff;
  font-size:.9rem;
}

.plenus-identity small{
  margin-top:3px;
  color:#6f8098;
  font-size:.68rem;
}

.plenus-back{
  color:#93a4bc;
  font-size:.76rem;
  font-weight:600;
  transition:color .18s ease;
}

.plenus-back:hover{
  color:var(--plenus-accent);
}

.plenus-hero{
  padding:84px 0 58px;
  max-width:850px;
  position:relative;
  isolation:isolate;
}

.plenus-hero::before{
  content:"";
  position:absolute;
  width:430px;
  height:220px;
  left:235px;
  top:118px;
  z-index:-1;
  border-radius:50%;
  background:radial-gradient(ellipse,rgba(100,255,218,.105),rgba(107,220,255,.035) 38%,transparent 70%);
  filter:blur(18px);
  opacity:.72;
  pointer-events:none;
  animation:plenusHeroGlow 5.5s ease-in-out infinite alternate;
}

.plenus-hero.compact{
  padding:64px 0 46px;
}

.plenus-kicker{
  margin:0 0 14px;
  color:var(--plenus-accent);
  text-transform:uppercase;
  letter-spacing:2px;
  font-size:.68rem;
  font-weight:800;
  animation:plenusHeroReveal .48s ease both;
}

.plenus-hero h1{
  margin:0;
  font-family:Manrope,Inter,sans-serif;
  font-size:clamp(3rem,7vw,6.1rem);
  line-height:.96;
  letter-spacing:-4px;
  color:#e6f1ff;
  animation:plenusHeroReveal .58s .08s cubic-bezier(.2,.7,.2,1) both;
}

.plenus-hero.compact h1{
  font-size:clamp(2.7rem,6vw,5rem);
}

.plenus-hero h1 span{
  display:inline-block;
  position:relative;
  color:var(--plenus-accent);
  text-shadow:0 0 34px rgba(100,255,218,.08);
}

.plenus-hero h1 span::after{
  content:"";
  position:absolute;
  left:2%;
  bottom:-9px;
  width:42%;
  height:2px;
  border-radius:999px;
  background:linear-gradient(90deg,var(--plenus-accent),rgba(107,220,255,.18),transparent);
  box-shadow:0 0 12px rgba(100,255,218,.2);
  transform:scaleX(0);
  transform-origin:left;
  animation:plenusHeroLine .72s .52s cubic-bezier(.2,.7,.2,1) forwards;
}

.plenus-hero > p:last-child{
  max-width:760px;
  margin:24px 0 0;
  color:#9aabc2;
  font-size:1rem;
  line-height:1.8;
  animation:plenusHeroReveal .58s .18s cubic-bezier(.2,.7,.2,1) both;
}

@keyframes plenusHeroReveal{
  from{opacity:0;transform:translateY(12px)}
  to{opacity:1;transform:translateY(0)}
}

@keyframes plenusHeroLine{
  to{transform:scaleX(1)}
}

@keyframes plenusHeroGlow{
  from{transform:translate3d(-8px,4px,0) scale(.96);opacity:.54}
  to{transform:translate3d(10px,-5px,0) scale(1.04);opacity:.82}
}

@media(prefers-reduced-motion:reduce){
  .plenus-kicker,
  .plenus-hero h1,
  .plenus-hero > p:last-child,
  .plenus-hero::before,
  .plenus-hero h1 span::after{
    animation:none!important;
  }

  .plenus-hero h1 span::after{
    transform:scaleX(1);
  }

  .plenus-motion-ready .plenus-subject-card,
  .plenus-motion-ready .plenus-subject-card.is-visible{
    --reveal-y:0px;
    --reveal-opacity:1;
    transition-delay:0ms;
  }
}

.plenus-subjects,
.session-panel{
  padding:32px 0 12px;
  border-top:1px solid rgba(136,146,176,.11);
}

.plenus-section-head{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:24px;
  margin-bottom:26px;
  padding-bottom:14px;
  position:relative;
}

.plenus-section-head::after{
  content:"";
  position:absolute;
  left:0;
  right:0;
  bottom:0;
  height:1px;
  background:linear-gradient(90deg,rgba(100,255,218,.3),rgba(107,220,255,.08) 46%,transparent 82%);
}

.plenus-section-head > div{
  display:flex;
  align-items:center;
  gap:12px;
}

.plenus-section-head > div::after{
  content:"";
  width:58px;
  height:1px;
  margin-left:3px;
  background:linear-gradient(90deg,rgba(100,255,218,.38),transparent);
}

.plenus-section-index{
  min-width:31px;
  height:25px;
  padding:0 7px;
  border:1px solid rgba(100,255,218,.18);
  border-radius:7px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  color:var(--plenus-accent);
  background:rgba(100,255,218,.045);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.68rem;
  font-weight:800;
  box-shadow:inset 0 0 16px rgba(100,255,218,.025);
}

.plenus-section-head h2{
  margin:0;
  font-family:Manrope,Inter,sans-serif;
  color:#edf5ff;
  font-size:1.34rem;
  letter-spacing:-.35px;
}

.plenus-cycle{
  padding-bottom:2px;
  color:#72859d;
  font-size:.66rem;
  text-transform:uppercase;
  letter-spacing:1.25px;
  font-weight:800;
}

.plenus-subject-grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:16px;
}

.plenus-subject-card{
  --reveal-y:0px;
  --reveal-opacity:1;
  --card-pink:255 102 217;
  --card-violet:145 92 255;
  min-height:310px;
  padding:24px;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  border:1px solid transparent;
  border-radius:16px;
  background:
    radial-gradient(360px circle at 4% 0%,rgb(var(--card-pink) / .08),transparent 58%) padding-box,
    radial-gradient(300px circle at 96% 92%,rgb(var(--card-violet) / .05),transparent 62%) padding-box,
    linear-gradient(180deg,rgba(10,23,39,.94),rgba(6,14,27,.90)) padding-box,
    linear-gradient(135deg,
      rgb(var(--card-pink) / .29),
      rgb(var(--card-violet) / .15) 44%,
      rgba(107,220,255,.08) 72%,
      rgba(136,146,176,.11)) border-box;
  box-shadow:
    0 22px 46px rgba(0,0,0,.16),
    inset 0 1px 0 rgba(255,255,255,.018);
  opacity:var(--reveal-opacity);
  transform:translateY(var(--reveal-y));
  transition:
    opacity .5s ease,
    transform .5s cubic-bezier(.2,.7,.2,1),
    box-shadow .26s ease,
    filter .26s ease;
  transition-delay:var(--card-delay,0ms);
  position:relative;
  overflow:hidden;
  isolation:isolate;
}

.plenus-subject-card:nth-child(1){
  --card-pink:255 101 214;
  --card-violet:137 90 255;
}

.plenus-subject-card:nth-child(2){
  --card-pink:255 78 196;
  --card-violet:194 80 255;
}

.plenus-subject-card:nth-child(3){
  --card-pink:222 82 255;
  --card-violet:255 86 190;
}

.plenus-subject-card > *{
  position:relative;
  z-index:2;
}

.plenus-subject-card::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:0;
  pointer-events:none;
  opacity:.28;
  background-image:
    linear-gradient(90deg,transparent 0 24px,rgb(var(--card-pink) / .07) 25px,transparent 26px),
    linear-gradient(0deg,transparent 0 24px,rgb(var(--card-violet) / .055) 25px,transparent 26px),
    radial-gradient(circle,rgb(var(--card-pink) / .20) 0 1px,transparent 1.5px);
  background-size:52px 52px,52px 52px,52px 52px;
  mask-image:linear-gradient(145deg,rgba(0,0,0,.9),rgba(0,0,0,.26) 54%,transparent 86%);
  -webkit-mask-image:linear-gradient(145deg,rgba(0,0,0,.9),rgba(0,0,0,.26) 54%,transparent 86%);
  transition:opacity .28s ease,transform .45s ease;
}

.plenus-subject-card::after{
  content:"";
  position:absolute;
  left:22px;
  top:0;
  width:84px;
  height:1px;
  z-index:3;
  pointer-events:none;
  background:linear-gradient(90deg,
    transparent,
    rgb(var(--card-pink) / .67) 22%,
    rgb(var(--card-violet) / .47) 68%,
    transparent);
  box-shadow:0 0 10px rgb(var(--card-pink) / .21);
  opacity:.60;
  transition:width .28s ease,opacity .28s ease,box-shadow .28s ease;
}

.plenus-subject-card:hover{
  transform:translateY(calc(var(--reveal-y) - 5px));
  filter:saturate(1.04);
  box-shadow:
    0 30px 58px rgba(0,0,0,.24),
    0 0 0 1px rgb(var(--card-pink) / .07),
    0 0 30px rgb(var(--card-pink) / .055),
    inset 0 1px 0 rgba(255,255,255,.025);
}

.plenus-subject-card:hover::before{
  opacity:.43;
  transform:translate3d(5px,-4px,0);
}

.plenus-subject-card:hover::after{
  width:132px;
  opacity:1;
  box-shadow:
    0 0 12px rgb(var(--card-pink) / .29),
    0 0 20px rgb(var(--card-violet) / .12);
}

.plenus-motion-ready .plenus-subject-card{
  --reveal-y:16px;
  --reveal-opacity:0;
}

.plenus-motion-ready .plenus-subject-card.is-visible{
  --reveal-y:0px;
  --reveal-opacity:1;
}

.plenus-motion-ready .plenus-subject-card:nth-child(1){--card-delay:0ms}
.plenus-motion-ready .plenus-subject-card:nth-child(2){--card-delay:90ms}
.plenus-motion-ready .plenus-subject-card:nth-child(3){--card-delay:180ms}


.plenus-card-top{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin-bottom:34px;
}

.plenus-subject-code{
  color:#ff7bdf;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.74rem;
  font-weight:800;
  text-shadow:
    0 0 7px rgba(255,123,223,.24),
    0 0 14px rgba(255,123,223,.08);
  transition:transform .22s ease,text-shadow .22s ease,color .22s ease;
}

.plenus-subject-card:hover .plenus-subject-code{
  color:#ff9ce8;
  transform:translateX(2px);
  text-shadow:
    0 0 10px rgba(255,156,232,.36),
    0 0 18px rgba(255,156,232,.14);
}

.plenus-status,
.session-state{
  padding:5px 8px;
  border:1px solid rgba(136,146,176,.14);
  border-radius:999px;
  color:#7789a1;
  background:rgba(255,255,255,.015);
  font-size:.58rem;
  font-weight:800;
  text-transform:uppercase;
  letter-spacing:.08em;
}

.plenus-status{
  --progress:0%;
  min-width:92px;
  padding:6px 10px 11px 21px;
  position:relative;
  overflow:hidden;
  color:#8fa2ba;
  border-color:rgba(136,146,176,.16);
  background:
    linear-gradient(90deg,rgba(100,255,218,.08),rgba(107,220,255,.025)),
    rgba(255,255,255,.012);
  text-align:center;
  letter-spacing:.06em;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.018);
}

.plenus-status::before{
  content:"";
  position:absolute;
  left:9px;
  top:9px;
  width:6px;
  height:6px;
  border-radius:50%;
  background:#60738d;
  box-shadow:0 0 0 4px rgba(96,115,141,.08);
  transition:background .22s ease,box-shadow .22s ease;
}

.plenus-status::after{
  content:"";
  position:absolute;
  left:8px;
  bottom:5px;
  width:var(--progress);
  max-width:calc(100% - 16px);
  height:2px;
  border-radius:999px;
  background:linear-gradient(90deg,var(--plenus-accent),var(--plenus-blue));
  box-shadow:0 0 9px rgba(100,255,218,.22);
  transition:width .48s cubic-bezier(.2,.7,.2,1);
}

.plenus-status.is-live,
.session-state.is-live{
  color:#8fffe4;
  border-color:rgba(100,255,218,.24);
  background:rgba(100,255,218,.055);
}

.plenus-status.is-live::before{
  background:var(--plenus-accent);
  box-shadow:0 0 0 4px rgba(100,255,218,.08),0 0 12px rgba(100,255,218,.3);
}

.plenus-semester{
  margin:0 0 8px;
  color:#ff66d9;
  font-size:.72rem;
  font-weight:800;
  letter-spacing:.03em;
  text-shadow:
    0 0 8px rgba(255,102,217,.35),
    0 0 18px rgba(255,102,217,.16);
  transition:color .2s ease,text-shadow .2s ease,transform .2s ease;
}

.plenus-subject-card:hover .plenus-semester{
  color:#ff8ce8;
  transform:translateX(2px);
  text-shadow:
    0 0 10px rgba(255,140,232,.42),
    0 0 22px rgba(255,140,232,.18);
}

.plenus-subject-card h3{
  margin:0;
  color:#e6f1ff;
  font-family:Manrope,Inter,sans-serif;
  font-size:1.5rem;
  letter-spacing:-.5px;
}

.plenus-subject-copy{
  min-height:76px;
  margin:14px 0 0;
  color:#91a1b8;
  font-size:.84rem;
  line-height:1.65;
}

.plenus-card-footer{
  padding-top:18px;
  border-top:1px solid rgba(136,146,176,.10);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
}

.plenus-card-footer > span{
  color:#64758d;
  font-size:.65rem;
}

.plenus-card-footer a{
  color:var(--plenus-accent);
  font-size:.74rem;
  font-weight:800;
  white-space:nowrap;
  display:inline-flex;
  align-items:center;
  transition:transform .2s ease,color .2s ease,text-shadow .2s ease;
}

.plenus-subject-card:hover .plenus-card-footer a{
  color:#8fffe4;
  transform:translateX(4px);
  text-shadow:0 0 14px rgba(100,255,218,.18);
}

.plenus-footer{
  margin-top:52px;
  padding:22px 0 8px;
  display:flex;
  justify-content:space-between;
  gap:20px;
  border-top:1px solid rgba(136,146,176,.09);
  color:#5f7088;
  font-size:.68rem;
}

/* Materias · listado de sesiones */
.subject-page{
  max-width:1120px;
}

.session-list{
  display:grid;
  gap:12px;
}

.session-row{
  min-height:180px;
  display:grid;
  grid-template-columns:92px minmax(0,1fr) 160px;
  gap:22px;
  align-items:center;
  padding:24px;
  border:1px solid rgba(136,146,176,.13);
  border-radius:14px;
  background:linear-gradient(180deg,rgba(11,24,41,.78),rgba(7,17,31,.62));
  transition:border-color .2s ease,transform .2s ease,background .2s ease;
}

.session-row:hover{
  transform:translateY(-2px);
  border-color:rgba(100,255,218,.23);
  background:linear-gradient(180deg,rgba(13,31,50,.88),rgba(7,17,31,.7));
}

.session-number{
  color:rgba(100,255,218,.72);
  font-family:Manrope,Inter,sans-serif;
  font-size:1.45rem;
  font-weight:800;
  letter-spacing:-1px;
}

.session-label{
  color:#71839a;
  font-size:.63rem;
  font-weight:800;
  text-transform:uppercase;
  letter-spacing:1.2px;
}

.session-main h3{
  margin:7px 0 8px;
  color:#e6f1ff;
  font-size:1.1rem;
}

.session-main p{
  margin:0;
  color:#8fa0b7;
  font-size:.8rem;
  line-height:1.65;
}

.session-tags{
  display:flex;
  flex-wrap:wrap;
  gap:7px;
  margin-top:14px;
}

.session-tags span{
  padding:5px 8px;
  border:1px solid rgba(136,146,176,.12);
  border-radius:999px;
  color:#8193aa;
  font-size:.6rem;
}

.session-action{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:18px;
}

.session-action a{
  color:var(--plenus-accent);
  font-size:.73rem;
  font-weight:800;
}

.session-empty{
  padding:46px 28px;
  border:1px dashed rgba(136,146,176,.18);
  border-radius:14px;
  text-align:center;
  background:rgba(255,255,255,.008);
}

.session-empty-code{
  display:inline-block;
  margin-bottom:14px;
  color:var(--plenus-accent);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.66rem;
  font-weight:800;
  letter-spacing:.14em;
}

.session-empty h3{
  margin:0;
  color:#e6f1ff;
  font-size:1.12rem;
}

.session-empty p{
  max-width:620px;
  margin:12px auto 0;
  color:#8293aa;
  font-size:.82rem;
  line-height:1.7;
}

@media(max-width:900px){
  .plenus-subject-grid{
    grid-template-columns:1fr;
  }

  .plenus-subject-card{
    min-height:250px;
  }

  .session-row{
    grid-template-columns:72px 1fr;
  }

  .session-action{
    grid-column:2;
    align-items:flex-start;
    flex-direction:row;
    justify-content:space-between;
  }
}

@media(max-width:620px){
  .plenus-shell{
    width:min(100% - 26px,1180px);
  }

  .plenus-topbar{
    min-height:68px;
  }

  .plenus-identity small{
    display:none;
  }

  .plenus-hero,
  .plenus-hero.compact{
    padding:48px 0 36px;
  }

  .plenus-hero h1,
  .plenus-hero.compact h1{
    font-size:2.7rem;
    letter-spacing:-2.5px;
  }

  .plenus-hero > p:last-child{
    font-size:.88rem;
  }

  .plenus-section-head{
    align-items:flex-start;
  }

  .plenus-cycle{
    display:none;
  }

  .plenus-card-footer{
    align-items:flex-start;
    flex-direction:column;
  }

  .session-row{
    grid-template-columns:1fr;
    gap:12px;
  }

  .session-number{
    font-size:1rem;
  }

  .session-action{
    grid-column:auto;
    flex-direction:row;
    align-items:center;
  }

  .plenus-footer{
    flex-direction:column;
  }
}


/* =========================================================
   PLENUS · Login y administración
   ========================================================= */
.plenus-nav-actions{display:flex;align-items:center;gap:16px}
.plenus-login{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:38px;
  padding:0 14px 0 10px;
  border:1px solid rgba(100,255,218,.28);
  border-radius:10px;
  color:var(--plenus-accent);
  font-size:.72rem;
  font-weight:800;
  background:
    linear-gradient(180deg,rgba(100,255,218,.055),rgba(100,255,218,.018));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.025);
  position:relative;
  overflow:hidden;
  transition:
    transform .2s ease,
    background .2s ease,
    border-color .2s ease,
    box-shadow .2s ease,
    color .2s ease;
}

.plenus-login::before{
  content:"→";
  width:20px;
  height:20px;
  border-radius:6px;
  display:grid;
  place-items:center;
  color:#07111f;
  background:var(--plenus-accent);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.72rem;
  font-weight:900;
  box-shadow:0 0 14px rgba(100,255,218,.16);
  transition:transform .2s ease,box-shadow .2s ease;
}

.plenus-login::after{
  content:"";
  position:absolute;
  inset:-70% -35%;
  background:linear-gradient(115deg,transparent 43%,rgba(255,255,255,.09) 50%,transparent 57%);
  transform:translateX(-66%) rotate(8deg);
  transition:transform .5s ease;
  pointer-events:none;
}

.plenus-login:hover,
.plenus-login:focus-visible{
  transform:translateY(-1px);
  color:#9affea;
  background:
    linear-gradient(180deg,rgba(100,255,218,.09),rgba(100,255,218,.03));
  border-color:rgba(100,255,218,.52);
  box-shadow:0 10px 24px rgba(0,0,0,.14),0 0 20px rgba(100,255,218,.035);
}

.plenus-login:hover::before,
.plenus-login:focus-visible::before{
  transform:translateX(2px);
  box-shadow:0 0 18px rgba(100,255,218,.28);
}

.plenus-login:hover::after,
.plenus-login:focus-visible::after{
  transform:translateX(66%) rotate(8deg);
}
.session-row.is-disabled{opacity:.56}
.session-row.is-disabled:hover{transform:none;border-color:rgba(136,146,176,.13)}
.session-row.is-disabled .session-action a{color:#687b94;cursor:not-allowed}
.hidden{display:none!important}

.plenus-admin-login{max-width:540px;margin:72px auto 0;padding:34px;border:1px solid rgba(136,146,176,.15);border-radius:20px;background:linear-gradient(180deg,rgba(12,27,46,.9),rgba(7,17,31,.8));box-shadow:0 26px 70px rgba(0,0,0,.22)}
.plenus-admin-login h1,.plenus-admin-head h1{margin:0;font-family:Manrope,Inter,sans-serif;color:#e6f1ff;font-size:clamp(2.5rem,6vw,4.7rem);line-height:.98;letter-spacing:-3px}
.plenus-admin-login h1 span,.plenus-admin-head h1 span{color:var(--plenus-accent)}
.plenus-admin-login>p:last-of-type,.plenus-admin-head p{color:#91a1b8;line-height:1.7}
.plenus-admin-login form{display:grid;gap:10px;margin-top:25px}
.plenus-admin-login label{color:#a9bad0;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.plenus-admin-login input{width:100%;padding:13px 14px;border:1px solid rgba(136,146,176,.2);border-radius:11px;background:#09182a;color:#eef7ff;outline:none}
.plenus-admin-login input:focus{border-color:var(--plenus-accent);box-shadow:0 0 0 3px rgba(100,255,218,.08)}
.plenus-admin-login button,.plenus-admin-user button,.plenus-admin-session-control button{border:0;border-radius:10px;padding:11px 14px;font-weight:800;cursor:pointer}
.plenus-admin-login button{margin-top:8px;background:var(--plenus-accent);color:#06131d}
.plenus-admin-msg{min-height:20px;color:#8fa0b7;font-size:.75rem}.plenus-admin-msg.bad{color:#ff8a98}

.plenus-admin-dashboard{padding:60px 0}
.plenus-admin-head{display:flex;justify-content:space-between;gap:32px;align-items:flex-end;padding-bottom:34px;border-bottom:1px solid rgba(136,146,176,.11)}
.plenus-admin-user{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex-wrap:wrap;color:#7f91a8;font-size:.72rem}
.plenus-admin-user button.secondary{background:#12263e;color:#dce9f7;border:1px solid rgba(136,146,176,.16)}
.plenus-admin-subject{padding:34px 0;border-bottom:1px solid rgba(136,146,176,.1)}
.plenus-admin-subject-head{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:16px}
.plenus-admin-subject-head h2{margin:4px 0 0;color:#e6f1ff;font-size:1.2rem}
.plenus-admin-session-grid{display:grid;gap:10px}
.plenus-admin-session{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:20px;border:1px solid rgba(136,146,176,.13);border-radius:14px;background:rgba(10,24,41,.64)}
.plenus-admin-session.is-enabled{border-color:rgba(100,255,218,.18)}
.plenus-admin-session.is-disabled{opacity:.72}
.plenus-admin-session-meta{color:#6f8199;font-size:.63rem;text-transform:uppercase;letter-spacing:.09em;font-weight:800}
.plenus-admin-session h3{margin:5px 0 8px;color:#e6f1ff;font-size:1rem}
.plenus-admin-session a{color:#8193aa;font-size:.67rem}
.plenus-admin-session-control{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.plenus-admin-session-control .plenus-toggle-on{background:#64ffda;color:#06131d}
.plenus-admin-session-control .plenus-toggle-off{background:rgba(255,113,133,.12);color:#ff9dad;border:1px solid rgba(255,113,133,.25)}
@media(max-width:700px){
  .plenus-nav-actions{gap:8px}.plenus-back{display:none}
  .plenus-admin-head,.plenus-admin-session,.plenus-admin-subject-head{align-items:flex-start;flex-direction:column}
  .plenus-admin-session-control{width:100%;justify-content:space-between}
}

/* =========================================================
   Landing · Code blocks visual refresh (preview)
   victor.json + vargas.java
   ========================================================= */
.profile-json,
.profile-code{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  transform:translateZ(0);
}

.profile-json{
  border-color:rgba(125,211,252,.16);
  background:
    radial-gradient(420px circle at 8% 0%,rgba(125,211,252,.075),transparent 58%),
    linear-gradient(180deg,rgba(10,22,38,.96),rgba(6,15,28,.90));
  box-shadow:
    0 20px 46px rgba(0,0,0,.20),
    inset 0 1px 0 rgba(255,255,255,.025);
}

.profile-code{
  border-color:rgba(240,179,35,.15);
  background:
    radial-gradient(430px circle at 10% 0%,rgba(240,179,35,.07),transparent 58%),
    radial-gradient(320px circle at 92% 100%,rgba(199,146,234,.045),transparent 60%),
    linear-gradient(180deg,rgba(11,22,37,.96),rgba(6,14,26,.90));
  box-shadow:
    0 20px 46px rgba(0,0,0,.19),
    inset 0 1px 0 rgba(255,255,255,.025);
}

.profile-json::before,
.profile-code::before{
  content:"";
  position:absolute;
  left:16px;
  right:16px;
  top:0;
  height:1px;
  z-index:3;
  pointer-events:none;
  opacity:.72;
}

.profile-json::before{
  background:linear-gradient(90deg,transparent,#7dd3fc 20%,#64ffda 54%,transparent 92%);
  box-shadow:0 0 14px rgba(125,211,252,.20);
}

.profile-code::before{
  background:linear-gradient(90deg,transparent,#f0b323 20%,#c792ea 58%,transparent 92%);
  box-shadow:0 0 14px rgba(240,179,35,.18);
}

.profile-json::after,
.profile-code::after{
  content:"";
  position:absolute;
  left:0;
  right:0;
  top:-34%;
  height:76px;
  z-index:1;
  pointer-events:none;
  opacity:0;
  transform:skewY(-2deg);
}

.profile-json::after{
  background:linear-gradient(180deg,transparent,rgba(125,211,252,.045),transparent);
}

.profile-code::after{
  background:linear-gradient(180deg,transparent,rgba(240,179,35,.04),transparent);
}

.profile-json:hover::after,
.profile-code:hover::after{
  animation:codeScan 2.9s cubic-bezier(.2,.65,.2,1);
}

.profile-json-header,
.profile-code-header{
  position:relative;
  z-index:2;
  min-height:44px;
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
}

.profile-json-header{
  background:
    linear-gradient(90deg,rgba(125,211,252,.045),rgba(255,255,255,.012) 46%,transparent);
}

.profile-code-header{
  background:
    linear-gradient(90deg,rgba(240,179,35,.04),rgba(199,146,234,.018) 48%,transparent);
}

.profile-json-title,
.profile-code-title{
  letter-spacing:.025em;
}

.profile-json-title{
  color:#c8e9fa;
}

.profile-code-title{
  color:#ead9ad;
}

.profile-json-type,
.profile-code-type{
  padding:4px 7px;
  border-radius:999px;
  border:1px solid rgba(136,146,176,.12);
  background:rgba(255,255,255,.018);
  line-height:1;
}

.profile-json-type{
  color:#78cfee;
  border-color:rgba(125,211,252,.16);
  background:rgba(125,211,252,.035);
}

.profile-code-type{
  color:#e4bb5d;
  border-color:rgba(240,179,35,.16);
  background:rgba(240,179,35,.03);
}

.profile-json-dot{
  animation:jsonPulse 2.8s ease-in-out infinite;
}

.java-dot{
  animation:javaPulse 3s ease-in-out infinite;
}

.profile-json-code,
.profile-code-body{
  position:relative;
  z-index:2;
  background-image:
    linear-gradient(rgba(255,255,255,.012) 1px,transparent 1px);
  background-size:100% 25px;
  animation:codeReveal .58s cubic-bezier(.2,.7,.2,1) both;
}

.profile-code-body{
  animation-delay:.12s;
}

.profile-json-code{
  color:#a9b9cd;
}

.profile-code-body{
  color:#a6b4c7;
}

.json-key{
  color:#73d2ff;
  text-shadow:0 0 10px rgba(115,210,255,.08);
}

.json-string{
  color:#a7e3c0;
}

.json-number{
  color:#f3b76c;
}

.json-motto{
  color:#d1bcff;
  text-shadow:0 0 12px rgba(209,188,255,.10);
}

.java-keyword{
  color:#d09af0;
}

.java-class{
  color:#ffd36f;
  text-shadow:0 0 10px rgba(255,211,111,.08);
}

.java-method{
  color:#8cb7ff;
}

.java-string{
  color:#b9e58a;
}

.profile-json:hover{
  border-color:rgba(125,211,252,.30);
  box-shadow:
    0 24px 56px rgba(0,0,0,.24),
    0 0 0 1px rgba(125,211,252,.025),
    0 0 32px rgba(125,211,252,.035),
    inset 0 1px 0 rgba(255,255,255,.035);
}

.profile-code:hover{
  border-color:rgba(240,179,35,.27);
  box-shadow:
    0 24px 56px rgba(0,0,0,.23),
    0 0 0 1px rgba(240,179,35,.025),
    0 0 32px rgba(240,179,35,.03),
    inset 0 1px 0 rgba(255,255,255,.035);
}

.profile-json,
.profile-code{
  transition:
    transform .24s ease,
    border-color .24s ease,
    box-shadow .24s ease;
}

.profile-json:hover,
.profile-code:hover{
  transform:translateY(-3px);
}

@keyframes codeScan{
  0%{top:-34%;opacity:0}
  18%{opacity:.85}
  72%{opacity:.55}
  100%{top:108%;opacity:0}
}

@keyframes codeReveal{
  from{opacity:0;transform:translateY(10px)}
  to{opacity:1;transform:translateY(0)}
}

@keyframes jsonPulse{
  0%,100%{box-shadow:0 0 10px rgba(100,255,218,.28)}
  50%{box-shadow:0 0 17px rgba(125,211,252,.52)}
}

@keyframes javaPulse{
  0%,100%{box-shadow:0 0 10px rgba(240,179,35,.24)}
  50%{box-shadow:0 0 17px rgba(240,179,35,.48)}
}

@media(prefers-reduced-motion:reduce){
  .profile-json-code,
  .profile-code-body,
  .profile-json-dot,
  .java-dot,
  .profile-json:hover::after,
  .profile-code:hover::after{
    animation:none!important;
  }

  .profile-json:hover,
  .profile-code:hover{
    transform:none;
  }
}


/* =========================================================
   Landing · Code blocks visual refresh V2
   Más contraste visual entre JSON y Java
   ========================================================= */
.profile-json{
  border:1px solid transparent;
  background:
    radial-gradient(420px circle at 0 0,rgba(73,193,255,.13),transparent 58%) padding-box,
    linear-gradient(180deg,rgba(8,21,37,.98),rgba(5,13,25,.94)) padding-box,
    linear-gradient(145deg,rgba(80,210,255,.48),rgba(100,255,218,.18) 45%,rgba(125,211,252,.08) 72%,rgba(136,146,176,.10)) border-box;
  box-shadow:
    0 22px 52px rgba(0,0,0,.24),
    inset 3px 0 0 rgba(80,210,255,.30),
    inset 0 1px 0 rgba(255,255,255,.035),
    0 0 28px rgba(80,210,255,.025);
}

.profile-code{
  border:1px solid transparent;
  background:
    radial-gradient(430px circle at 0 0,rgba(240,179,35,.12),transparent 56%) padding-box,
    radial-gradient(320px circle at 100% 100%,rgba(199,146,234,.075),transparent 60%) padding-box,
    linear-gradient(180deg,rgba(10,20,34,.98),rgba(5,13,24,.94)) padding-box,
    linear-gradient(145deg,rgba(240,179,35,.46),rgba(199,146,234,.26) 50%,rgba(130,170,255,.08) 76%,rgba(136,146,176,.10)) border-box;
  box-shadow:
    0 22px 52px rgba(0,0,0,.23),
    inset 3px 0 0 rgba(240,179,35,.30),
    inset 0 1px 0 rgba(255,255,255,.035),
    0 0 28px rgba(240,179,35,.025);
}

.profile-json::before{
  left:0;
  right:auto;
  top:0;
  width:108px;
  height:2px;
  opacity:1;
  background:linear-gradient(90deg,#56d8ff,#64ffda 58%,transparent);
  box-shadow:
    0 0 12px rgba(86,216,255,.36),
    0 0 24px rgba(100,255,218,.12);
}

.profile-code::before{
  left:0;
  right:auto;
  top:0;
  width:108px;
  height:2px;
  opacity:1;
  background:linear-gradient(90deg,#f0b323,#c792ea 60%,transparent);
  box-shadow:
    0 0 12px rgba(240,179,35,.34),
    0 0 24px rgba(199,146,234,.10);
}

.profile-json-header,
.profile-code-header{
  min-height:46px;
  box-shadow:inset 0 -1px 0 rgba(136,146,176,.10);
}

.profile-json-header{
  background:
    linear-gradient(90deg,rgba(73,193,255,.085),rgba(100,255,218,.018) 54%,rgba(255,255,255,.006));
}

.profile-code-header{
  background:
    linear-gradient(90deg,rgba(240,179,35,.075),rgba(199,146,234,.025) 54%,rgba(255,255,255,.006));
}

.profile-json-header::after,
.profile-code-header::after{
  content:"";
  position:absolute;
  left:14px;
  bottom:-1px;
  width:94px;
  height:1px;
  border-radius:999px;
  pointer-events:none;
}

.profile-json-header::after{
  background:linear-gradient(90deg,#56d8ff,rgba(100,255,218,.35),transparent);
  box-shadow:0 0 10px rgba(86,216,255,.22);
}

.profile-code-header::after{
  background:linear-gradient(90deg,#f0b323,rgba(199,146,234,.45),transparent);
  box-shadow:0 0 10px rgba(240,179,35,.20);
}

.profile-json-title{
  color:#d9f3ff;
  text-shadow:0 0 12px rgba(86,216,255,.10);
}

.profile-code-title{
  color:#f2ddb0;
  text-shadow:0 0 12px rgba(240,179,35,.08);
}

.profile-json-type{
  color:#9ce6ff;
  border-color:rgba(86,216,255,.25);
  background:rgba(86,216,255,.055);
}

.profile-code-type{
  color:#ffd46c;
  border-color:rgba(240,179,35,.24);
  background:linear-gradient(90deg,rgba(240,179,35,.055),rgba(199,146,234,.025));
}

.profile-json-code{
  padding-left:18px;
  background-image:
    linear-gradient(90deg,transparent 0 9px,rgba(86,216,255,.16) 9px 10px,transparent 10px),
    linear-gradient(180deg,transparent 0 34%,rgba(86,216,255,.032) 34% 39%,transparent 39%),
    linear-gradient(rgba(255,255,255,.012) 1px,transparent 1px);
  background-size:100% 100%,100% 100%,100% 25px;
}

.profile-code-body{
  padding-left:18px;
  background-image:
    linear-gradient(90deg,transparent 0 9px,rgba(240,179,35,.15) 9px 10px,transparent 10px),
    linear-gradient(180deg,transparent 0 43%,rgba(199,146,234,.028) 43% 48%,transparent 48%),
    linear-gradient(rgba(255,255,255,.012) 1px,transparent 1px);
  background-size:100% 100%,100% 100%,100% 25px;
}

.profile-json:hover{
  border-color:transparent;
  box-shadow:
    0 28px 64px rgba(0,0,0,.28),
    inset 3px 0 0 rgba(86,216,255,.52),
    inset 0 1px 0 rgba(255,255,255,.045),
    0 0 0 1px rgba(86,216,255,.06),
    0 0 38px rgba(86,216,255,.06);
}

.profile-code:hover{
  border-color:transparent;
  box-shadow:
    0 28px 64px rgba(0,0,0,.27),
    inset 3px 0 0 rgba(240,179,35,.52),
    inset 0 1px 0 rgba(255,255,255,.045),
    0 0 0 1px rgba(240,179,35,.055),
    0 0 38px rgba(199,146,234,.05);
}

.profile-json:hover .profile-json-header{
  background:
    linear-gradient(90deg,rgba(73,193,255,.115),rgba(100,255,218,.026) 56%,rgba(255,255,255,.006));
}

.profile-code:hover .profile-code-header{
  background:
    linear-gradient(90deg,rgba(240,179,35,.105),rgba(199,146,234,.038) 56%,rgba(255,255,255,.006));
}

.profile-json:hover .json-key{
  color:#89e0ff;
  text-shadow:0 0 11px rgba(86,216,255,.14);
}

.profile-code:hover .java-class{
  color:#ffdc82;
  text-shadow:0 0 12px rgba(240,179,35,.15);
}


/* =========================================================
   Landing · Code blocks ambient animation V3
   ========================================================= */
.profile-json-code,
.profile-code-body{
  overflow:hidden;
}

.profile-json-code::before{
  content:"";
  position:absolute;
  left:12px;
  right:12px;
  top:-6%;
  height:1px;
  z-index:4;
  pointer-events:none;
  opacity:0;
  background:linear-gradient(90deg,
    transparent,
    rgba(86,216,255,.18) 16%,
    rgba(86,216,255,.72) 50%,
    rgba(100,255,218,.20) 82%,
    transparent);
  box-shadow:
    0 0 8px rgba(86,216,255,.22),
    0 0 18px rgba(86,216,255,.08);
  animation:jsonAmbientScan 9.5s ease-in-out infinite;
}

.profile-code-body::before{
  content:"";
  position:absolute;
  left:12px;
  right:14px;
  top:24%;
  height:25px;
  z-index:1;
  pointer-events:none;
  opacity:.18;
  border-left:2px solid rgba(240,179,35,.58);
  background:
    linear-gradient(90deg,
      rgba(240,179,35,.07),
      rgba(199,146,234,.03) 58%,
      transparent 92%);
  box-shadow:
    inset 0 0 18px rgba(240,179,35,.025);
  animation:javaActiveLine 11s steps(1,end) infinite;
}

.profile-code-body::after{
  content:"";
  position:absolute;
  width:2px;
  height:14px;
  left:31px;
  top:calc(24% + 5px);
  z-index:4;
  pointer-events:none;
  background:#ffd36f;
  box-shadow:
    0 0 8px rgba(240,179,35,.42),
    0 0 14px rgba(199,146,234,.10);
  animation:
    javaCaretMove 11s steps(1,end) infinite,
    javaCaretBlink 1.05s steps(1,end) infinite;
}

.profile-json-header{
  animation:jsonHeaderBreath 7s ease-in-out infinite;
}

.profile-code-header{
  animation:javaHeaderBreath 7.8s ease-in-out infinite;
}

@keyframes jsonAmbientScan{
  0%,18%{top:-6%;opacity:0}
  24%{opacity:.7}
  68%{opacity:.44}
  76%{top:104%;opacity:0}
  100%{top:104%;opacity:0}
}

@keyframes javaActiveLine{
  0%,22%{top:24%}
  23%,47%{top:43%}
  48%,72%{top:61%}
  73%,100%{top:78%}
}

@keyframes javaCaretMove{
  0%,22%{top:calc(24% + 5px);left:31px}
  23%,47%{top:calc(43% + 5px);left:43px}
  48%,72%{top:calc(61% + 5px);left:36px}
  73%,100%{top:calc(78% + 5px);left:48px}
}

@keyframes javaCaretBlink{
  0%,46%{opacity:.92}
  47%,100%{opacity:.12}
}

@keyframes jsonHeaderBreath{
  0%,100%{
    box-shadow:
      inset 0 -1px 0 rgba(136,146,176,.10),
      inset 0 0 0 rgba(86,216,255,0);
  }
  50%{
    box-shadow:
      inset 0 -1px 0 rgba(86,216,255,.16),
      inset 0 0 24px rgba(86,216,255,.025);
  }
}

@keyframes javaHeaderBreath{
  0%,100%{
    box-shadow:
      inset 0 -1px 0 rgba(136,146,176,.10),
      inset 0 0 0 rgba(240,179,35,0);
  }
  50%{
    box-shadow:
      inset 0 -1px 0 rgba(240,179,35,.15),
      inset 0 0 24px rgba(240,179,35,.022);
  }
}

@media(prefers-reduced-motion:reduce){
  .profile-json-code::before,
  .profile-code-body::before,
  .profile-code-body::after,
  .profile-json-header,
  .profile-code-header{
    animation:none!important;
  }

  .profile-json-code::before,
  .profile-code-body::before,
  .profile-code-body::after{
    display:none;
  }
}


/* =========================================================
   Landing · Mini editor UX V4
   Números de línea + status bar + expandir/contraer
   ========================================================= */
.code-editor-viewport{
  --code-collapsed-height:320px;
  position:relative;
  height:var(--code-collapsed-height);
  overflow:hidden;
  transition:height .42s cubic-bezier(.2,.7,.2,1);
}

.code-editor-viewport::after{
  content:"";
  position:absolute;
  left:0;
  right:0;
  bottom:0;
  height:78px;
  z-index:4;
  pointer-events:none;
  opacity:1;
  background:linear-gradient(180deg,transparent,rgba(5,13,25,.94) 88%);
  transition:opacity .24s ease;
}

.profile-code .code-editor-viewport::after{
  background:linear-gradient(180deg,transparent,rgba(5,13,24,.94) 88%);
}

.code-editor-viewport.is-expanded::after{
  opacity:0;
}

.code-line-gutter{
  position:absolute;
  left:0;
  top:0;
  width:44px;
  z-index:6;
  padding:16px 8px 18px 0;
  border-right:1px solid rgba(136,146,176,.08);
  background:linear-gradient(90deg,rgba(255,255,255,.012),transparent);
  color:#45566f;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:clamp(.68rem,1.1vw,.76rem);
  line-height:1.62;
  text-align:right;
  user-select:none;
  pointer-events:none;
}

.profile-code .code-line-gutter{
  font-size:clamp(.66rem,1.05vw,.74rem);
  line-height:1.6;
}

.code-line-gutter span{
  display:block;
  min-height:1.62em;
}

.profile-code .code-line-gutter span{
  min-height:1.6em;
}

.profile-json-code,
.profile-code-body{
  margin:0;
  min-width:100%;
  padding-left:58px;
  padding-right:16px;
  white-space:pre;
  overflow-x:auto;
  overflow-y:visible;
  scrollbar-width:thin;
}

.profile-json-code::before{
  left:50px;
  right:12px;
}

.profile-code-body::before{
  left:48px;
  right:14px;
}

.profile-code-body::after{
  left:62px;
}

.code-editor-status{
  min-height:34px;
  padding:0 10px 0 13px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  position:relative;
  z-index:7;
  border-top:1px solid rgba(136,146,176,.09);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.57rem;
  letter-spacing:.035em;
}

.profile-json .code-editor-status{
  color:#78abc0;
  background:linear-gradient(90deg,rgba(86,216,255,.055),rgba(6,15,28,.92) 54%);
}

.profile-code .code-editor-status{
  color:#a58e60;
  background:linear-gradient(90deg,rgba(240,179,35,.05),rgba(6,14,26,.92) 54%);
}

.code-editor-status-meta{
  display:flex;
  align-items:center;
  gap:8px;
  min-width:0;
}

.code-editor-status-meta span{
  display:inline-flex;
  align-items:center;
  gap:6px;
  white-space:nowrap;
}

.code-editor-status-meta span + span::before{
  content:"•";
  color:#44536a;
  margin-right:2px;
}

.code-editor-toggle{
  min-height:24px;
  padding:0 8px;
  border:1px solid rgba(136,146,176,.12);
  border-radius:7px;
  display:inline-flex;
  align-items:center;
  gap:6px;
  flex:0 0 auto;
  color:#91a4ba;
  background:rgba(255,255,255,.014);
  font:inherit;
  cursor:pointer;
  transition:
    color .18s ease,
    border-color .18s ease,
    background .18s ease,
    transform .18s ease;
}

.profile-json .code-editor-toggle:hover,
.profile-json .code-editor-toggle:focus-visible{
  color:#9beaff;
  border-color:rgba(86,216,255,.26);
  background:rgba(86,216,255,.055);
  transform:translateY(-1px);
}

.profile-code .code-editor-toggle:hover,
.profile-code .code-editor-toggle:focus-visible{
  color:#ffd36f;
  border-color:rgba(240,179,35,.25);
  background:rgba(240,179,35,.05);
  transform:translateY(-1px);
}

.code-editor-toggle-icon{
  font-size:.68rem;
  line-height:1;
  transition:transform .22s ease;
}

.code-editor-toggle[aria-expanded="true"] .code-editor-toggle-icon{
  transform:rotate(180deg);
}

.profile-json-title::after,
.profile-code-title::after{
  content:" ×";
  color:#52647d;
  font-weight:500;
}

@media(max-width:620px){
  .code-editor-viewport{
    --code-collapsed-height:290px;
  }

  .code-line-gutter{
    width:38px;
    padding-right:6px;
  }

  .profile-json-code,
  .profile-code-body{
    padding-left:50px;
  }

  .code-editor-status{
    padding-left:10px;
  }

  .code-editor-status-meta span:nth-child(3){
    display:none;
  }
}

@media(prefers-reduced-motion:reduce){
  .code-editor-viewport,
  .code-editor-toggle,
  .code-editor-toggle-icon{
    transition:none!important;
  }
}


/* =========================================================
   Landing · Identidad ambiental por sección
   ========================================================= */
.section-ambient{
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  overflow:hidden;
}

.section-ambient-layer{
  position:absolute;
  inset:-10%;
  opacity:0;
  transform:scale(1.02);
  transition:opacity .9s ease,transform 1.1s ease;
  filter:blur(7px);
  will-change:opacity,transform;
}

.section-ambient-layer.is-active{
  opacity:1;
  transform:scale(1);
}

.section-ambient-layer[data-theme="sobre-mi"]{
  background:
    radial-gradient(620px circle at 67% 30%,rgba(72,208,255,.075),transparent 66%),
    radial-gradient(520px circle at 18% 46%,rgba(100,255,218,.038),transparent 68%);
}

.section-ambient-layer[data-theme="experiencia"]{
  background:
    radial-gradient(650px circle at 70% 34%,rgba(145,105,255,.075),transparent 66%),
    radial-gradient(500px circle at 24% 58%,rgba(217,110,255,.028),transparent 70%);
}

.section-ambient-layer[data-theme="proyectos"]{
  background:
    radial-gradient(680px circle at 70% 38%,rgba(75,126,255,.082),transparent 66%),
    radial-gradient(480px circle at 32% 54%,rgba(76,214,255,.032),transparent 70%);
}

.section-ambient-layer[data-theme="tecnologias"]{
  background:
    radial-gradient(650px circle at 72% 38%,rgba(86,244,181,.062),transparent 67%),
    radial-gradient(500px circle at 30% 56%,rgba(72,208,255,.032),transparent 70%);
}

.section-ambient-layer[data-theme="campus"]{
  background:
    radial-gradient(650px circle at 72% 38%,rgba(100,255,218,.055),transparent 67%),
    radial-gradient(560px circle at 28% 58%,rgba(151,112,255,.055),transparent 70%);
}

/* Acentos locales: mantienen el lenguaje del sitio sin volverlo multicolor */
#sobre-mi{
  --section-accent:#64ffda;
  --section-accent-rgb:100,255,218;
}

#experiencia{
  --section-accent:#b49cff;
  --section-accent-rgb:180,156,255;
}

#proyectos{
  --section-accent:#83adff;
  --section-accent-rgb:131,173,255;
}

#tecnologias{
  --section-accent:#72f0bd;
  --section-accent-rgb:114,240,189;
}

#campus{
  --section-accent:#8fe9ff;
  --section-accent-rgb:143,233,255;
}

.portfolio-section .section-heading>span{
  color:var(--section-accent,var(--accent));
  text-shadow:0 0 14px rgba(var(--section-accent-rgb,100,255,218),.08);
  transition:color .35s ease,text-shadow .35s ease;
}

.portfolio-section .section-line{
  background:
    linear-gradient(
      90deg,
      rgba(var(--section-accent-rgb,100,255,218),.30),
      rgba(var(--section-accent-rgb,100,255,218),.08) 46%,
      transparent 88%
    );
  transition:background .35s ease;
}

.portfolio-section::before{
  color:rgba(var(--section-accent-rgb,136,146,176),.030);
  transition:color .45s ease,transform .6s ease;
}

.portfolio-section.reveal-section-active::before{
  transform:translateY(-3px);
}

@media(prefers-reduced-motion:reduce){
  .section-ambient-layer{
    transition:none!important;
    transform:none!important;
  }

  .portfolio-section::before{
    transition:none!important;
  }
}


/* =========================================================
   Landing · Proyectos destacados · Showcase V2
   ========================================================= */
.featured-project{
  --project-accent:100,255,218;
  --project-accent-2:107,220,255;
  --visual-x:0px;
  --visual-y:0px;
  --copy-x:0px;
  --copy-y:0px;
  isolation:isolate;
}

.featured-project:nth-child(1){
  --project-accent:91,221,255;
  --project-accent-2:100,255,218;
}

.featured-project:nth-child(2){
  --project-accent:100,255,218;
  --project-accent-2:171,126,255;
}

.featured-project:nth-child(3){
  --project-accent:112,240,189;
  --project-accent-2:91,221,255;
}

.featured-project::before{
  content:"";
  position:absolute;
  width:64%;
  height:78%;
  left:8%;
  top:11%;
  z-index:-1;
  border-radius:50%;
  pointer-events:none;
  opacity:.42;
  filter:blur(42px);
  background:
    radial-gradient(circle,
      rgba(var(--project-accent),.115),
      rgba(var(--project-accent-2),.045) 42%,
      transparent 72%);
  transition:opacity .35s ease,transform .45s ease;
}

.featured-project.reverse::before{
  left:auto;
  right:8%;
}

.featured-project:hover::before{
  opacity:.68;
  transform:scale(1.035);
}

.featured-project .project-visual{
  border-color:rgba(var(--project-accent),.18);
  background:
    radial-gradient(420px circle at 15% 8%,rgba(var(--project-accent),.055),transparent 58%),
    #081524;
  box-shadow:
    0 26px 58px rgba(0,0,0,.24),
    0 0 0 1px rgba(var(--project-accent),.018),
    inset 0 1px 0 rgba(255,255,255,.022);
  transform:translate3d(var(--visual-x),var(--visual-y),0);
  transition:
    transform .22s ease-out,
    border-color .28s ease,
    box-shadow .28s ease;
  will-change:transform;
}

.featured-project .project-visual::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:5;
  pointer-events:none;
  opacity:.22;
  background:
    linear-gradient(120deg,transparent 26%,rgba(var(--project-accent),.10) 44%,transparent 61%);
  transform:translateX(-72%);
  transition:transform .7s cubic-bezier(.2,.7,.2,1),opacity .28s ease;
}

.featured-project .project-visual::after{
  z-index:4;
  background:
    radial-gradient(420px circle at var(--project-light-x,50%) var(--project-light-y,44%),
      rgba(var(--project-accent),.10),
      transparent 48%),
    linear-gradient(145deg,rgba(var(--project-accent),.045),transparent 44%);
  opacity:.82;
}

.featured-project:hover .project-visual{
  border-color:rgba(var(--project-accent),.34);
  box-shadow:
    0 32px 70px rgba(0,0,0,.29),
    0 0 0 1px rgba(var(--project-accent),.045),
    0 0 40px rgba(var(--project-accent),.055),
    inset 0 1px 0 rgba(255,255,255,.03);
}

.featured-project:hover .project-visual::before{
  opacity:.48;
  transform:translateX(72%);
}

.featured-project:hover .project-visual::after{
  opacity:1;
}

.featured-project .project-copy{
  border-color:rgba(var(--project-accent),.15);
  background:
    radial-gradient(340px circle at 0 0,rgba(var(--project-accent),.055),transparent 60%),
    rgba(7,18,32,.91);
  box-shadow:
    0 24px 54px rgba(0,0,0,.29),
    inset 0 1px 0 rgba(255,255,255,.025);
  transform:translate3d(var(--copy-x),var(--copy-y),0);
  transition:
    transform .24s ease-out,
    border-color .28s ease,
    box-shadow .28s ease;
  overflow:hidden;
  will-change:transform;
}

.featured-project .project-copy::before{
  content:"";
  position:absolute;
  left:22px;
  top:0;
  width:82px;
  height:2px;
  border-radius:999px;
  background:
    linear-gradient(90deg,
      rgba(var(--project-accent),.95),
      rgba(var(--project-accent-2),.58),
      transparent);
  box-shadow:0 0 14px rgba(var(--project-accent),.24);
  transition:width .3s ease,box-shadow .3s ease;
}

.featured-project:hover .project-copy{
  border-color:rgba(var(--project-accent),.27);
  box-shadow:
    0 29px 62px rgba(0,0,0,.32),
    0 0 28px rgba(var(--project-accent),.035),
    inset 0 1px 0 rgba(255,255,255,.035);
}

.featured-project:hover .project-copy::before{
  width:132px;
  box-shadow:0 0 18px rgba(var(--project-accent),.34);
}

.featured-project .project-type{
  color:rgb(var(--project-accent));
  text-shadow:0 0 13px rgba(var(--project-accent),.10);
}

.featured-project .project-number{
  color:rgba(var(--project-accent-2),.55);
}

.featured-project .project-stack span{
  border-color:rgba(var(--project-accent),.14);
  background:rgba(var(--project-accent),.022);
  transition:
    color .2s ease,
    border-color .2s ease,
    background .2s ease,
    transform .2s ease;
}

.featured-project .project-stack span:hover{
  color:rgb(var(--project-accent));
  border-color:rgba(var(--project-accent),.30);
  background:rgba(var(--project-accent),.055);
  transform:translateY(-1px);
}

/* Entrada escalonada interna del showcase */
.featured-project.reveal .project-visual{
  opacity:0;
  transform:translate3d(calc(var(--visual-x) - 14px),calc(var(--visual-y) + 8px),0);
}

.featured-project.reveal.reverse .project-visual{
  transform:translate3d(calc(var(--visual-x) + 14px),calc(var(--visual-y) + 8px),0);
}

.featured-project.reveal .project-copy{
  opacity:0;
  transform:translate3d(var(--copy-x),calc(var(--copy-y) + 12px),0);
}

.featured-project.reveal.in-view .project-visual{
  opacity:1;
  transform:translate3d(var(--visual-x),var(--visual-y),0);
  transition-delay:.05s;
}

.featured-project.reveal.in-view .project-copy{
  opacity:1;
  transform:translate3d(var(--copy-x),var(--copy-y),0);
  transition-delay:.16s;
}

/* RPG: más sensación de pantalla de juego */
.featured-project:nth-child(1) .mock-building{
  box-shadow:
    inset 0 -30px 0 rgba(0,0,0,.15),
    0 0 20px rgba(var(--project-accent),.055);
}

.featured-project:nth-child(1) .mock-building span{
  text-shadow:0 0 12px rgba(var(--project-accent),.24);
}

.featured-project:nth-child(1) .mock-character{
  animation:projectCharacterIdle 2.8s ease-in-out infinite;
  box-shadow:
    0 10px 0 #31485f,
    0 0 14px rgba(var(--project-accent),.16);
}

/* Campus: módulos que respiran muy suavemente */
.featured-project:nth-child(2) .mock-nav{
  box-shadow:inset 0 1px 0 rgba(var(--project-accent),.055);
}

.featured-project:nth-child(2) .mock-cards span{
  animation:projectModuleGlow 5.2s ease-in-out infinite;
}

.featured-project:nth-child(2) .mock-cards span:nth-child(2){animation-delay:.55s}
.featured-project:nth-child(2) .mock-cards span:nth-child(3){animation-delay:1.1s}

/* Android: dispositivo con luz interior */
.featured-project:nth-child(3) .phone-mock{
  border-color:#1a2d43;
  box-shadow:
    0 24px 54px rgba(0,0,0,.38),
    0 0 28px rgba(var(--project-accent),.045);
}

.featured-project:nth-child(3):hover .phone-mock{
  transform:translateY(-5px) rotate(.5deg);
  box-shadow:
    0 28px 60px rgba(0,0,0,.42),
    0 0 34px rgba(var(--project-accent),.085);
}

.featured-project:nth-child(3) .poke-ball{
  animation:projectPokePulse 4s ease-in-out infinite;
}

.featured-project:nth-child(3) .poke-title{
  color:rgb(var(--project-accent));
  text-shadow:0 0 12px rgba(var(--project-accent),.20);
}

@keyframes projectCharacterIdle{
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-3px)}
}

@keyframes projectModuleGlow{
  0%,100%{
    border-top-color:rgba(var(--project-accent),.14);
    box-shadow:inset 0 0 0 rgba(var(--project-accent),0);
  }
  50%{
    border-top-color:rgba(var(--project-accent),.30);
    box-shadow:inset 0 0 18px rgba(var(--project-accent),.025);
  }
}

@keyframes projectPokePulse{
  0%,100%{
    filter:drop-shadow(0 0 0 rgba(var(--project-accent),0));
  }
  50%{
    filter:drop-shadow(0 0 9px rgba(var(--project-accent),.18));
  }
}

@media(max-width:1080px){
  .featured-project{
    --visual-x:0px!important;
    --visual-y:0px!important;
    --copy-x:0px!important;
    --copy-y:0px!important;
  }

  .featured-project::before{
    width:82%;
    left:9%;
    opacity:.30;
  }

  .featured-project.reverse::before{
    left:9%;
    right:auto;
  }
}

@media(prefers-reduced-motion:reduce){
  .featured-project .project-visual,
  .featured-project .project-copy{
    opacity:1!important;
    transform:none!important;
    transition-delay:0ms!important;
  }

  .mock-character,
  .mock-cards span,
  .poke-ball{
    animation:none!important;
  }
}


/* =========================================================
   Landing · Proyectos destacados · Balance V2.1
   ========================================================= */
.featured-project:nth-child(2).reverse .project-copy{
  margin-right:-28px;
  padding:22px 24px;
}

.featured-project:nth-child(2).reverse .project-visual{
  margin-left:10px;
}

.featured-project:nth-child(2) .project-copy p{
  font-size:.90rem;
  line-height:1.72;
}

.featured-project:nth-child(2) .project-stack{
  gap:6px;
  margin-top:14px;
}

.featured-project:nth-child(2) .project-stack span{
  padding:5px 8px;
  font-size:.65rem;
}

@media(max-width:1080px){
  .featured-project:nth-child(2).reverse .project-copy{
    margin-right:0;
  }

  .featured-project:nth-child(2).reverse .project-visual{
    margin-left:0;
  }
}


/* =========================================================
   Landing · Experiencia y trayectoria · Timeline V2
   ========================================================= */
.experience-list{
  --timeline-x:156px;
  gap:0;
}

.experience-list::before{
  left:var(--timeline-x);
  top:14px;
  bottom:18px;
  width:1px;
  background:
    linear-gradient(
      180deg,
      rgba(180,156,255,.10),
      rgba(180,156,255,.42) 12%,
      rgba(100,255,218,.22) 56%,
      rgba(131,173,255,.16) 82%,
      transparent
    );
  box-shadow:0 0 18px rgba(180,156,255,.055);
}

.experience-item{
  --exp-accent:180,156,255;
  grid-template-columns:138px minmax(0,1fr);
  gap:34px;
  padding:30px 0 32px;
  border-top-color:rgba(136,146,176,.095);
  background:
    linear-gradient(90deg,rgba(var(--exp-accent),0),transparent);
  transition:
    background .28s ease,
    transform .28s ease,
    border-color .28s ease;
}

.experience-item:nth-child(1){--exp-accent:100,255,218}
.experience-item:nth-child(2){--exp-accent:180,156,255}
.experience-item:nth-child(3){--exp-accent:143,233,255}
.experience-item:nth-child(4){--exp-accent:131,173,255}
.experience-item:nth-child(5){--exp-accent:114,240,189}

.experience-item:last-child{
  border-bottom-color:rgba(136,146,176,.095);
}

.experience-item::before{
  left:151px;
  top:37px;
  width:10px;
  height:10px;
  border:2px solid rgb(var(--exp-accent));
  background:#07111f;
  box-shadow:
    0 0 0 5px rgba(var(--exp-accent),.055),
    0 0 14px rgba(var(--exp-accent),.10);
  transition:
    transform .25s ease,
    box-shadow .25s ease,
    background .25s ease;
  z-index:2;
}

.experience-item::after{
  content:"";
  position:absolute;
  left:var(--timeline-x);
  top:47px;
  width:1px;
  height:0;
  z-index:1;
  pointer-events:none;
  background:
    linear-gradient(
      180deg,
      rgba(var(--exp-accent),.80),
      rgba(var(--exp-accent),.08)
    );
  box-shadow:0 0 12px rgba(var(--exp-accent),.16);
  transition:height .55s cubic-bezier(.2,.7,.2,1),opacity .3s ease;
  opacity:.45;
}

.experience-item.reveal.in-view::after{
  height:calc(100% - 48px);
}

.experience-item:hover{
  padding-left:0;
  transform:translateX(4px);
  border-top-color:rgba(var(--exp-accent),.15);
  background:
    linear-gradient(
      90deg,
      rgba(var(--exp-accent),.040),
      rgba(var(--exp-accent),.012) 42%,
      transparent 78%
    );
}

.experience-item:hover::before{
  transform:scale(1.13);
  background:rgb(var(--exp-accent));
  box-shadow:
    0 0 0 6px rgba(var(--exp-accent),.07),
    0 0 20px rgba(var(--exp-accent),.28);
}

.experience-period{
  position:relative;
  padding:5px 12px 5px 0;
  color:#8c9db4;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.70rem;
  font-weight:700;
  line-height:1.45;
  letter-spacing:.015em;
  text-align:right;
  transition:color .24s ease,text-shadow .24s ease,transform .24s ease;
}

.experience-period::after{
  content:"";
  display:block;
  width:28px;
  height:1px;
  margin:8px 0 0 auto;
  background:linear-gradient(90deg,transparent,rgba(var(--exp-accent),.38));
  transition:width .25s ease,background .25s ease;
}

.experience-item:hover .experience-period{
  color:rgb(var(--exp-accent));
  transform:translateX(-2px);
  text-shadow:0 0 12px rgba(var(--exp-accent),.10);
}

.experience-item:hover .experience-period::after{
  width:46px;
  background:linear-gradient(90deg,transparent,rgba(var(--exp-accent),.72));
}

.experience-body{
  padding:0 4px 0 4px;
  position:relative;
}

.experience-body h3{
  margin:0 0 11px;
  color:#edf5ff;
  font-family:Manrope,Inter,sans-serif;
  font-size:1.10rem;
  letter-spacing:-.25px;
  line-height:1.35;
  transition:
    color .22s ease,
    text-shadow .22s ease,
    transform .22s ease;
}

.experience-item:hover .experience-body h3{
  color:#f7fbff;
  transform:translateX(2px);
  text-shadow:0 0 18px rgba(var(--exp-accent),.09);
}

.experience-body p{
  max-width:850px;
  color:#a8b8cc;
  line-height:1.74;
  font-size:.90rem;
}

.experience-body p + p{
  margin-top:10px;
}

.experience-item .mini-tags{
  gap:6px;
  margin-top:14px;
}

.experience-item .mini-tags span{
  padding:5px 8px;
  border-color:rgba(var(--exp-accent),.12);
  background:rgba(var(--exp-accent),.018);
  color:#9caec4;
  font-size:.65rem;
  transition:
    color .2s ease,
    border-color .2s ease,
    background .2s ease,
    transform .2s ease;
}

.experience-item .mini-tags span:hover{
  color:rgb(var(--exp-accent));
  border-color:rgba(var(--exp-accent),.30);
  background:rgba(var(--exp-accent),.05);
  transform:translateY(-1px);
}

/* Reveal más limpio: fecha primero, contenido después */
.experience-item.reveal .experience-period{
  opacity:0;
  transform:translateX(-8px);
}

.experience-item.reveal .experience-body{
  opacity:0;
  transform:translateY(10px);
}

.experience-item.reveal.in-view .experience-period{
  opacity:1;
  transform:none;
  transition:
    opacity .48s ease,
    transform .48s cubic-bezier(.2,.7,.2,1),
    color .24s ease,
    text-shadow .24s ease;
}

.experience-item.reveal.in-view .experience-body{
  opacity:1;
  transform:none;
  transition:
    opacity .54s .09s ease,
    transform .54s .09s cubic-bezier(.2,.7,.2,1);
}

@media(max-width:900px){
  .experience-list{
    --timeline-x:13px;
  }

  .experience-list::before{
    display:block;
    left:13px;
    top:20px;
    bottom:18px;
  }

  .experience-item{
    grid-template-columns:1fr;
    gap:10px;
    padding:26px 0 28px 34px;
  }

  .experience-item::before{
    display:block;
    left:8px;
    top:31px;
  }

  .experience-item::after{
    left:13px;
    top:42px;
  }

  .experience-item.reveal.in-view::after{
    height:calc(100% - 42px);
  }

  .experience-period{
    padding:0;
    text-align:left;
  }

  .experience-period::after{
    margin:7px auto 0 0;
    background:linear-gradient(90deg,rgba(var(--exp-accent),.38),transparent);
  }

  .experience-item:hover{
    transform:none;
  }
}

@media(prefers-reduced-motion:reduce){
  .experience-item.reveal .experience-period,
  .experience-item.reveal .experience-body,
  .experience-item.reveal.in-view .experience-period,
  .experience-item.reveal.in-view .experience-body{
    opacity:1!important;
    transform:none!important;
    transition:none!important;
  }

  .experience-item::after{
    height:calc(100% - 48px)!important;
  }
}


/* =========================================================
   Landing · Columna izquierda dinámica V1
   ========================================================= */
.intro-full{
  width:100%;
  max-height:1900px;
  display:flex;
  flex-direction:column;
  opacity:1;
  transform:translateY(0) scale(1);
  transform-origin:top left;
  overflow:hidden;
  transition:
    max-height .48s cubic-bezier(.2,.7,.2,1),
    opacity .28s ease,
    transform .38s cubic-bezier(.2,.7,.2,1);
}

.intro-compact{
  --compact-accent:100,255,218;
  width:100%;
  max-height:0;
  opacity:0;
  overflow:hidden;
  pointer-events:none;
  transform:translateY(18px) scale(.975);
  transform-origin:top left;
  transition:
    max-height .48s cubic-bezier(.2,.7,.2,1),
    opacity .32s .08s ease,
    transform .42s .06s cubic-bezier(.2,.7,.2,1);
}

.intro-inner.is-compact .intro-full{
  max-height:0;
  opacity:0;
  pointer-events:none;
  transform:translateY(-12px) scale(.985);
}

.intro-inner.is-compact .intro-compact{
  max-height:560px;
  opacity:1;
  pointer-events:auto;
  transform:none;
}

body[data-active-section="experiencia"] .intro-compact{--compact-accent:180,156,255}
body[data-active-section="proyectos"] .intro-compact{--compact-accent:131,173,255}
body[data-active-section="tecnologias"] .intro-compact{--compact-accent:114,240,189}
body[data-active-section="campus"] .intro-compact{--compact-accent:143,233,255}

.intro-compact-card{
  position:relative;
  overflow:hidden;
  padding:22px;
  border:1px solid rgba(var(--compact-accent),.18);
  border-radius:16px;
  background:
    radial-gradient(300px circle at 0 0,rgba(var(--compact-accent),.085),transparent 62%),
    linear-gradient(180deg,rgba(9,22,38,.94),rgba(6,15,28,.88));
  box-shadow:
    0 24px 54px rgba(0,0,0,.22),
    inset 0 1px 0 rgba(255,255,255,.025);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
}

.intro-compact-card::before{
  content:"";
  position:absolute;
  left:20px;
  top:0;
  width:86px;
  height:2px;
  border-radius:999px;
  background:
    linear-gradient(90deg,
      rgba(var(--compact-accent),.95),
      rgba(100,255,218,.38),
      transparent);
  box-shadow:0 0 14px rgba(var(--compact-accent),.24);
}

.intro-compact-card::after{
  content:"";
  position:absolute;
  width:170px;
  height:170px;
  right:-78px;
  top:-74px;
  border-radius:50%;
  background:radial-gradient(circle,rgba(var(--compact-accent),.11),transparent 70%);
  pointer-events:none;
}

.intro-compact-head{
  display:flex;
  align-items:center;
  gap:12px;
  position:relative;
  z-index:1;
}

.intro-compact-mark{
  width:44px;
  height:44px;
  flex:0 0 44px;
  display:grid;
  place-items:center;
  border:1px solid rgba(var(--compact-accent),.28);
  border-radius:12px;
  color:rgb(var(--compact-accent));
  background:rgba(var(--compact-accent),.045);
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.76rem;
  font-weight:900;
  letter-spacing:-.06em;
  box-shadow:inset 0 0 20px rgba(var(--compact-accent),.025);
}

.intro-compact-name strong,
.intro-compact-name small{
  display:block;
}

.intro-compact-name strong{
  color:#edf5ff;
  font-family:Manrope,Inter,sans-serif;
  font-size:.92rem;
  letter-spacing:-.2px;
}

.intro-compact-name small{
  margin-top:3px;
  color:#71849d;
  font-size:.66rem;
}

.intro-compact-current{
  margin:24px 0 0;
  padding:12px 0 13px;
  border-top:1px solid rgba(136,146,176,.10);
  border-bottom:1px solid rgba(136,146,176,.10);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
}

.intro-compact-current span{
  color:#677a93;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  font-size:.58rem;
  font-weight:800;
  letter-spacing:.10em;
  text-transform:uppercase;
}

.intro-compact-current strong{
  color:rgb(var(--compact-accent));
  font-size:.70rem;
  font-weight:800;
  text-align:right;
  text-shadow:0 0 12px rgba(var(--compact-accent),.10);
}

.intro-compact-copy{
  margin:18px 0 0;
  color:#9bacc1;
  font-size:.79rem;
  line-height:1.65;
}

.intro-compact-links{
  display:grid;
  gap:7px;
  margin-top:20px;
}

.intro-compact-links a{
  min-height:37px;
  padding:0 10px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  border:1px solid rgba(136,146,176,.10);
  border-radius:9px;
  color:#aebdd0;
  background:rgba(255,255,255,.012);
  font-size:.71rem;
  font-weight:700;
  transition:
    color .2s ease,
    border-color .2s ease,
    background .2s ease,
    transform .2s ease;
}

.intro-compact-links a::after{
  content:"→";
  color:rgb(var(--compact-accent));
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  transition:transform .2s ease;
}

.intro-compact-links a:last-child::after{
  content:"↑";
}

.intro-compact-links a:hover,
.intro-compact-links a:focus-visible{
  color:#f1f7ff;
  border-color:rgba(var(--compact-accent),.24);
  background:rgba(var(--compact-accent),.035);
  transform:translateX(2px);
}

.intro-compact-links a:hover::after,
.intro-compact-links a:focus-visible::after{
  transform:translateX(2px);
}

.intro-compact-links a:last-child:hover::after,
.intro-compact-links a:last-child:focus-visible::after{
  transform:translateY(-2px);
}

.intro-compact-status{
  margin-top:18px;
  display:flex;
  align-items:center;
  gap:8px;
  color:#657890;
  font-size:.62rem;
}

.intro-compact-status::before{
  content:"";
  width:7px;
  height:7px;
  border-radius:50%;
  background:rgb(var(--compact-accent));
  box-shadow:0 0 0 4px rgba(var(--compact-accent),.065),0 0 12px rgba(var(--compact-accent),.18);
}

@media(max-width:900px){
  .intro-full{
    max-height:none!important;
    opacity:1!important;
    transform:none!important;
    pointer-events:auto!important;
    overflow:visible;
  }

  .intro-compact{
    display:none!important;
  }
}

@media(prefers-reduced-motion:reduce){
  .intro-full,
  .intro-compact{
    transition:none!important;
  }
}


/* =========================================================
   Landing · Campus Rikytoon · Identidad PLENUS / CESBA V2
   ========================================================= */
.campus-card{
  --campus-primary:100,255,218;
  --campus-secondary:107,220,255;
  --campus-word-x:0px;
  --campus-word-y:0px;
  --campus-light-x:78%;
  --campus-light-y:32%;
  border-color:rgba(var(--campus-primary),.16);
  background:
    radial-gradient(420px circle at var(--campus-light-x) var(--campus-light-y),
      rgba(var(--campus-primary),.075),
      transparent 56%),
    linear-gradient(145deg,rgba(13,29,49,.96),rgba(7,16,29,.94));
  box-shadow:
    0 22px 48px rgba(0,0,0,.18),
    inset 0 1px 0 rgba(255,255,255,.022);
  transition:
    transform .28s cubic-bezier(.2,.7,.2,1),
    border-color .28s ease,
    box-shadow .28s ease,
    background .28s ease;
  isolation:isolate;
}

.campus-card.plenus-card{
  --campus-primary:100,255,218;
  --campus-secondary:255,102,217;
}

.campus-card.cesba-card{
  --campus-primary:132,118,255;
  --campus-secondary:240,179,35;
}

.campus-card > *{
  position:relative;
  z-index:3;
}

.campus-card::before{
  right:-10px;
  bottom:-18px;
  z-index:0;
  color:rgba(var(--campus-primary),.038);
  text-shadow:0 0 28px rgba(var(--campus-primary),.035);
  transform:translate3d(var(--campus-word-x),var(--campus-word-y),0);
  transition:
    transform .22s ease-out,
    color .28s ease,
    text-shadow .28s ease;
  will-change:transform;
}

.campus-card::after{
  width:250px;
  height:250px;
  right:-100px;
  bottom:-112px;
  z-index:1;
  background:
    radial-gradient(circle,
      rgba(var(--campus-primary),.16),
      rgba(var(--campus-secondary),.055) 42%,
      transparent 70%);
  opacity:.66;
  transform:scale(.94);
  transition:
    transform .34s ease,
    opacity .34s ease;
}

.campus-card:hover{
  transform:translateY(-6px);
  border-color:rgba(var(--campus-primary),.34);
  box-shadow:
    0 30px 62px rgba(0,0,0,.27),
    0 0 0 1px rgba(var(--campus-primary),.035),
    0 0 34px rgba(var(--campus-primary),.045),
    inset 0 1px 0 rgba(255,255,255,.03);
}

.campus-card:hover::before{
  color:rgba(var(--campus-primary),.065);
  text-shadow:0 0 34px rgba(var(--campus-secondary),.07);
}

.campus-card:hover::after{
  opacity:.92;
  transform:scale(1.10);
}

.campus-card-top{
  z-index:4;
}

.campus-number{
  color:rgb(var(--campus-primary));
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  text-shadow:0 0 12px rgba(var(--campus-primary),.12);
}

.campus-status{
  position:relative;
  padding:5px 9px 5px 20px;
  color:rgb(var(--campus-primary));
  border-color:rgba(var(--campus-primary),.20);
  background:
    linear-gradient(90deg,
      rgba(var(--campus-primary),.075),
      rgba(var(--campus-secondary),.025));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.018);
}

.campus-status::before{
  content:"";
  position:absolute;
  left:8px;
  top:50%;
  width:6px;
  height:6px;
  border-radius:50%;
  transform:translateY(-50%);
  background:rgb(var(--campus-primary));
  box-shadow:
    0 0 0 4px rgba(var(--campus-primary),.065),
    0 0 12px rgba(var(--campus-primary),.24);
  animation:campusStatusPulse 3s ease-in-out infinite;
}

.campus-card small{
  color:rgba(var(--campus-primary),.62);
  font-weight:700;
  transition:color .2s ease,text-shadow .2s ease;
}

.campus-card h3{
  color:#edf5ff;
  transition:
    color .22s ease,
    text-shadow .22s ease,
    transform .22s ease;
}

.campus-card:hover small{
  color:rgba(var(--campus-secondary),.82);
  text-shadow:0 0 10px rgba(var(--campus-secondary),.08);
}

.campus-card:hover h3{
  color:#f8fbff;
  transform:translateX(2px);
  text-shadow:0 0 20px rgba(var(--campus-primary),.10);
}

.campus-arrow{
  display:inline-flex;
  align-items:center;
  width:max-content;
  color:rgb(var(--campus-primary));
  text-shadow:0 0 12px rgba(var(--campus-primary),.08);
  transition:
    transform .22s ease,
    color .22s ease,
    text-shadow .22s ease;
}

.campus-card:hover .campus-arrow{
  color:rgb(var(--campus-secondary));
  transform:translateX(6px);
  text-shadow:0 0 14px rgba(var(--campus-secondary),.16);
}

.campus-card.plenus-card::after{
  background:
    radial-gradient(circle,
      rgba(100,255,218,.16),
      rgba(255,102,217,.065) 43%,
      transparent 70%);
}

.campus-card.cesba-card::after{
  background:
    radial-gradient(circle,
      rgba(132,118,255,.16),
      rgba(240,179,35,.060) 43%,
      transparent 70%);
}

@keyframes campusStatusPulse{
  0%,100%{
    box-shadow:
      0 0 0 4px rgba(var(--campus-primary),.055),
      0 0 9px rgba(var(--campus-primary),.16);
  }
  50%{
    box-shadow:
      0 0 0 5px rgba(var(--campus-primary),.075),
      0 0 15px rgba(var(--campus-primary),.30);
  }
}

@media(max-width:900px){
  .campus-card{
    --campus-word-x:0px!important;
    --campus-word-y:0px!important;
  }
}

@media(prefers-reduced-motion:reduce){
  .campus-status::before{
    animation:none!important;
  }

  .campus-card::before{
    transform:none!important;
  }
}


/* =========================================================
   Landing · Campus Rikytoon · Mascotas vectoriales V1
   ========================================================= */
.campus-card > .campus-mascot{
  position:absolute;
  display:block;
  pointer-events:none;
  user-select:none;
}

.campus-card > .campus-mascot-watermark{
  width:196px;
  right:-28px;
  bottom:-34px;
  z-index:1;
  opacity:.055;
  filter:
    grayscale(.22)
    saturate(.82)
    drop-shadow(0 0 20px rgba(var(--campus-primary),.12));
  transform:
    translate3d(
      calc(var(--campus-word-x) * .42),
      calc(var(--campus-word-y) * .42),
      0
    )
    scale(1.02);
  transition:
    opacity .3s ease,
    transform .22s ease-out,
    filter .3s ease;
}

.campus-card > .campus-mascot-main{
  width:92px;
  right:16px;
  bottom:15px;
  z-index:5;
  opacity:.94;
  filter:
    drop-shadow(0 10px 18px rgba(0,0,0,.24))
    drop-shadow(0 0 12px rgba(var(--campus-primary),.10));
  transform:
    translate3d(
      calc(var(--campus-word-x) * -.55),
      calc(var(--campus-word-y) * -.45),
      0
    );
  transform-origin:50% 100%;
  transition:
    opacity .25s ease,
    transform .22s ease-out,
    filter .28s ease;
  will-change:transform;
}

.campus-card:hover > .campus-mascot-watermark{
  opacity:.085;
  filter:
    grayscale(.08)
    saturate(.96)
    drop-shadow(0 0 28px rgba(var(--campus-primary),.18));
}

.campus-card:hover > .campus-mascot-main{
  opacity:1;
  transform:
    translate3d(
      calc(var(--campus-word-x) * -.55),
      calc((var(--campus-word-y) * -.45) - 4px),
      0
    )
    scale(1.035);
  filter:
    drop-shadow(0 13px 22px rgba(0,0,0,.28))
    drop-shadow(0 0 16px rgba(var(--campus-primary),.18));
}

.campus-card-body{
  position:relative;
  z-index:3;
}

.campus-card-body p{
  padding-right:58px;
}

.plenus-card > .campus-mascot-main{
  width:88px;
}

.cesba-card > .campus-mascot-main{
  width:98px;
  right:12px;
  bottom:12px;
}

.plenus-card > .campus-mascot-watermark{
  opacity:.060;
}

.cesba-card > .campus-mascot-watermark{
  width:206px;
  opacity:.052;
}

@media(max-width:1080px){
  .campus-card > .campus-mascot-main{
    width:82px;
  }

  .cesba-card > .campus-mascot-main{
    width:88px;
  }

  .campus-card > .campus-mascot-watermark{
    width:170px;
  }

  .campus-card-body p{
    padding-right:50px;
  }
}

@media(max-width:620px){
  .campus-card > .campus-mascot-main{
    width:72px;
    right:12px;
    bottom:12px;
  }

  .cesba-card > .campus-mascot-main{
    width:78px;
  }

  .campus-card > .campus-mascot-watermark{
    width:145px;
    right:-24px;
    bottom:-28px;
    opacity:.045;
  }

  .campus-card-body p{
    padding-right:44px;
  }
}

@media(prefers-reduced-motion:reduce){
  .campus-card > .campus-mascot-main,
  .campus-card > .campus-mascot-watermark{
    transform:none!important;
  }
}


/* =========================================================
   Landing · Campus Rikytoon · Emblemas monocromáticos V2
   ========================================================= */
.campus-card::before{
  right:42px;
  bottom:-18px;
  color:rgba(var(--campus-primary),.018);
  text-shadow:none;
}

.campus-card > .campus-mascot-main{
  width:122px;
  right:12px;
  bottom:16px;
  z-index:4;
  opacity:.20;
  filter:
    drop-shadow(0 12px 22px rgba(0,0,0,.24))
    drop-shadow(0 0 14px rgba(var(--campus-primary),.13));
  transform:
    translate3d(
      calc(var(--campus-word-x) * -.42),
      calc(var(--campus-word-y) * -.34),
      0
    );
  transition:
    opacity .25s ease,
    transform .22s ease-out,
    filter .28s ease;
}

.plenus-card > .campus-mascot-main{
  width:128px;
  right:8px;
  bottom:14px;
}

.cesba-card > .campus-mascot-main{
  width:132px;
  right:6px;
  bottom:11px;
}

.campus-card:hover > .campus-mascot-main{
  opacity:.34;
  transform:
    translate3d(
      calc(var(--campus-word-x) * -.42),
      calc((var(--campus-word-y) * -.34) - 3px),
      0
    )
    scale(1.025);
  filter:
    drop-shadow(0 14px 24px rgba(0,0,0,.28))
    drop-shadow(0 0 18px rgba(var(--campus-primary),.22));
}

.campus-card-body p{
  max-width:250px;
  padding-right:0;
}

.campus-arrow{
  padding-right:88px;
}

@media(max-width:1080px){
  .campus-card > .campus-mascot-main{
    width:108px;
  }

  .plenus-card > .campus-mascot-main{
    width:112px;
  }

  .cesba-card > .campus-mascot-main{
    width:116px;
  }

  .campus-card-body p{
    max-width:280px;
  }
}

@media(max-width:620px){
  .campus-card > .campus-mascot-main{
    width:88px;
    right:10px;
    bottom:12px;
    opacity:.16;
  }

  .plenus-card > .campus-mascot-main{
    width:92px;
  }

  .cesba-card > .campus-mascot-main{
    width:96px;
  }

  .campus-card:hover > .campus-mascot-main{
    opacity:.22;
  }

  .campus-arrow{
    padding-right:68px;
  }
}


/* =========================================================
   Landing · Campus Rikytoon · Cabezas generadas V3
   ========================================================= */
.campus-card > .campus-mascot-main{
  opacity:.46;
  filter:
    drop-shadow(0 12px 22px rgba(0,0,0,.22))
    drop-shadow(0 0 16px rgba(var(--campus-primary),.16));
}

.plenus-card > .campus-mascot-main{
  width:142px;
  right:2px;
  bottom:8px;
}

.cesba-card > .campus-mascot-main{
  width:146px;
  right:0;
  bottom:6px;
}

.campus-card:hover > .campus-mascot-main{
  opacity:.76;
  transform:
    translate3d(
      calc(var(--campus-word-x) * -.42),
      calc((var(--campus-word-y) * -.34) - 4px),
      0
    )
    scale(1.035);
  filter:
    drop-shadow(0 15px 25px rgba(0,0,0,.26))
    drop-shadow(0 0 20px rgba(var(--campus-primary),.24));
}

.campus-card-body p{
  max-width:245px;
}

@media(max-width:1080px){
  .plenus-card > .campus-mascot-main{width:124px}
  .cesba-card > .campus-mascot-main{width:128px}
}

@media(max-width:620px){
  .campus-card > .campus-mascot-main{opacity:.34}
  .plenus-card > .campus-mascot-main{width:96px}
  .cesba-card > .campus-mascot-main{width:100px}
  .campus-card:hover > .campus-mascot-main{opacity:.52}
}


/* =========================================================
   PLENUS · Hero · Mascota ambiental
   ========================================================= */
.plenus-hero-mascot{
  position:absolute;
  width:clamp(260px,25vw,365px);
  height:auto;
  right:-360px;
  top:70px;
  z-index:-1;
  opacity:.105;
  pointer-events:none;
  user-select:none;
  filter:
    drop-shadow(0 0 24px rgba(100,255,218,.11))
    drop-shadow(0 20px 38px rgba(0,0,0,.20));
  transform:translate3d(0,0,0);
  transform-origin:center;
  animation:plenusBearAmbient 7s ease-in-out infinite alternate;
}

.plenus-hero:hover .plenus-hero-mascot{
  opacity:.135;
  filter:
    drop-shadow(0 0 30px rgba(100,255,218,.15))
    drop-shadow(0 22px 42px rgba(0,0,0,.22));
}

@keyframes plenusBearAmbient{
  from{
    transform:translate3d(0,4px,0) scale(.985);
  }
  to{
    transform:translate3d(-7px,-5px,0) scale(1.015);
  }
}

@media(max-width:1180px){
  .plenus-hero-mascot{
    width:270px;
    right:-255px;
    top:92px;
    opacity:.075;
  }
}

@media(max-width:980px){
  .plenus-hero-mascot{
    width:210px;
    right:-112px;
    top:112px;
    opacity:.055;
  }
}

@media(max-width:760px){
  .plenus-hero-mascot{
    display:none;
  }
}

@media(prefers-reduced-motion:reduce){
  .plenus-hero-mascot{
    animation:none!important;
    transform:none!important;
  }
}
