@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&display=swap');:root{--bg:#08111f;--panel:#101d2e;--text:#f4f7fb;--muted:#aab7c8;--blue:#49a8ff;--green:#6ee7c7;--line:rgba(255,255,255,.12)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,sans-serif;line-height:1.65}a{color:inherit;text-decoration:none}header{position:fixed;z-index:20;top:0;width:100%;height:76px;background:rgba(8,17,31,.92);display:flex;align-items:center;justify-content:space-between;padding:0 max(22px,calc((100% - 1160px)/2));border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;font-weight:800}.brand span{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:linear-gradient(135deg,var(--blue),var(--green));color:#07111e}nav{display:flex;gap:24px;color:var(--muted)}#menu{display:none;background:none;border:1px solid var(--line);color:white;font-size:24px;border-radius:10px;padding:7px 12px}.hero,main>section{width:min(calc(100% - 40px),1160px);margin:auto;padding:105px 0}.hero{min-height:100vh;padding-top:145px;display:grid;grid-template-columns:1.3fr .7fr;gap:70px;align-items:center}.hero h1{font-size:clamp(3.4rem,8vw,6.2rem);line-height:.95;margin:.2em 0;color:var(--blue)}.hero h2{font-size:1.35rem}.hero p,section>p,.timeline p,.cards p{color:var(--muted)}small{color:var(--green);font-weight:800;letter-spacing:.15em}.btn{display:inline-block;background:linear-gradient(135deg,var(--blue),#1d83e8);padding:13px 20px;border:0;border-radius:12px;color:white;font-weight:800;cursor:pointer}.hero aside{padding:28px;border:1px solid var(--line);border-radius:28px;background:rgba(255,255,255,.06);overflow:hidden}.hero aside img{width:150px;height:185px;object-fit:cover;object-position:center 25%;border-radius:24px;border:4px solid var(--blue)}.hero aside b{color:var(--green)}dl{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:24px;padding-top:20px;border-top:1px solid var(--line)}dt{color:var(--muted)}dd{margin:0;text-align:right;font-weight:700}section h2{font-size:clamp(2rem,5vw,3.2rem);margin:.2em 0 1em}.alt{position:relative}.alt:before{content:'';position:absolute;inset:0 -100vw;background:rgba(255,255,255,.025);z-index:-1}.timeline{display:grid;grid-template-columns:180px 1fr;gap:35px;padding:28px 0;border-top:1px solid var(--line)}time,.timeline b,.cards b,.cards a{color:var(--green)}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.cards article{padding:25px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.05)}.contact{display:grid;grid-template-columns:1fr 1fr;gap:40px;padding:45px;border:1px solid var(--line);border-radius:28px;background:var(--panel)}form{display:grid;gap:12px}input,textarea{width:100%;padding:13px;border:1px solid var(--line);border-radius:10px;background:rgba(0,0,0,.15);color:white;font:inherit}textarea{min-height:120px}footer{text-align:center;padding:30px;color:var(--muted);border-top:1px solid var(--line)}@media(max-width:850px){#menu{display:block}nav{display:none;position:absolute;top:76px;left:14px;right:14px;background:#0d1828;padding:18px;border:1px solid var(--line);border-radius:15px;flex-direction:column}nav.open{display:flex}.hero,.contact{grid-template-columns:1fr}.cards{grid-template-columns:repeat(2,1fr)}}@media(max-width:600px){.hero{padding-top:120px}.hero h1{font-size:3.6rem}.timeline{grid-template-columns:1fr;gap:5px}.cards{grid-template-columns:1fr}.contact{padding:25px 18px}}

/* Correção reforçada para telemóveis, incluindo browsers que usam viewport largo */
html, body {
  max-width: 100%;
  overflow-x: hidden;
}

header {
  gap: 16px;
}

.brand {
  min-width: 0;
  white-space: nowrap;
}

.brand span {
  flex: 0 0 42px;
}

@media screen and (max-width: 1100px) {
  header {
    height: 76px;
    padding: 0 18px;
  }

  .brand {
    font-size: 1rem;
    max-width: calc(100% - 70px);
    overflow: hidden;
    text-overflow: ellipsis;
  }

  #menu {
    display: block !important;
    flex: 0 0 auto;
    width: 46px;
    height: 46px;
    padding: 0;
    font-size: 25px;
    line-height: 1;
    background: rgba(255,255,255,.06);
  }

  nav {
    display: none !important;
    position: fixed;
    top: 76px;
    left: 14px;
    right: 14px;
    z-index: 100;
    flex-direction: column;
    gap: 4px;
    padding: 14px;
    border: 1px solid var(--line);
    border-radius: 16px;
    background: #0d1828;
    box-shadow: 0 20px 50px rgba(0,0,0,.35);
  }

  nav.open {
    display: flex !important;
  }

  nav a {
    display: block;
    padding: 12px 13px;
    border-radius: 10px;
    font-size: 1rem;
  }

  nav a:hover {
    background: rgba(255,255,255,.06);
  }

  .hero {
    width: min(calc(100% - 28px), 760px);
    min-height: auto;
    padding-top: 125px;
    padding-bottom: 72px;
    grid-template-columns: minmax(0, 1fr);
    gap: 38px;
  }

  .hero > div,
  .hero aside {
    width: 100%;
    min-width: 0;
  }

  .hero h1 {
    font-size: clamp(3rem, 13vw, 5rem);
    line-height: .98;
    overflow-wrap: anywhere;
  }

  .hero h2 {
    font-size: 1.15rem;
  }

  .hero aside {
    padding: 24px;
  }

  .hero aside img {
    width: 145px;
    height: 180px;
  }

  main > section {
    width: min(calc(100% - 28px), 760px);
    padding: 78px 0;
  }

  .contact {
    grid-template-columns: minmax(0, 1fr);
  }

  .cards {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media screen and (max-width: 650px) {
  header {
    padding: 0 14px;
  }

  .brand {
    gap: 9px;
    font-size: .96rem;
  }

  .brand span {
    width: 40px;
    height: 40px;
    flex-basis: 40px;
  }

  .hero {
    width: calc(100% - 28px);
    padding-top: 112px;
  }

  .hero h1 {
    font-size: clamp(2.8rem, 16vw, 4.25rem);
  }

  .hero aside {
    padding: 22px 18px;
  }

  dl {
    grid-template-columns: 1fr;
    gap: 3px;
  }

  dd {
    text-align: left;
    margin-bottom: 12px;
  }

  .timeline {
    grid-template-columns: 1fr;
    gap: 5px;
  }

  .cards {
    grid-template-columns: 1fr;
  }

  .contact {
    padding: 25px 18px;
  }
}


/* Melhoria visual da área principal */
.hero{
  position:relative;
  isolation:isolate;
  gap:90px;
}

.hero::before{
  content:"";
  position:absolute;
  z-index:-2;
  width:520px;
  height:520px;
  left:-280px;
  top:110px;
  border-radius:50%;
  background:radial-gradient(circle,rgba(73,168,255,.14),transparent 68%);
  pointer-events:none;
}

.hero::after{
  content:"";
  position:absolute;
  z-index:-2;
  width:420px;
  height:420px;
  right:-220px;
  bottom:50px;
  border-radius:50%;
  background:radial-gradient(circle,rgba(110,231,199,.10),transparent 70%);
  pointer-events:none;
}

.hero-copy{
  position:relative;
  padding:34px 0;
}

.hero-label{
  display:inline-flex;
  align-items:center;
  gap:10px;
  margin-bottom:20px;
  color:var(--green);
  font-size:.78rem;
  font-weight:800;
  letter-spacing:.16em;
}

.hero-label span{
  width:34px;
  height:2px;
  border-radius:999px;
  background:linear-gradient(90deg,var(--green),transparent);
}

.hero h1{
  max-width:760px;
  margin:0 0 22px;
  font-size:clamp(4rem,7.4vw,7rem);
  line-height:.88;
  letter-spacing:-.065em;
  text-wrap:balance;
  background:linear-gradient(135deg,#64b8ff 0%,#3698f4 54%,#7edee0 100%);
  -webkit-background-clip:text;
  background-clip:text;
  color:transparent;
  filter:drop-shadow(0 15px 40px rgba(36,135,230,.12));
}

.hero h2{
  max-width:760px;
  margin:0 0 20px;
  color:#f5f8fc;
  font-size:clamp(1.22rem,2vw,1.58rem);
  line-height:1.4;
  letter-spacing:-.02em;
}

.hero-copy>p{
  max-width:740px;
  margin:0;
  font-size:1.02rem;
  line-height:1.85;
}

.hero-actions{
  display:flex;
  flex-wrap:wrap;
  gap:13px;
  margin-top:28px;
}

.btn-outline{
  border:1px solid rgba(255,255,255,.15);
  background:rgba(255,255,255,.045);
  box-shadow:none;
}

.btn-outline:hover{
  border-color:rgba(73,168,255,.5);
  background:rgba(73,168,255,.08);
}

.hero-points{
  display:flex;
  flex-wrap:wrap;
  gap:12px 18px;
  margin-top:28px;
  color:#c2cfdd;
  font-size:.84rem;
  font-weight:600;
}

.hero-points span{
  display:inline-flex;
  align-items:center;
  gap:7px;
}

.hero-points i{
  width:20px;
  height:20px;
  display:grid;
  place-items:center;
  border-radius:50%;
  background:rgba(110,231,199,.11);
  color:var(--green);
  font-size:.7rem;
  font-style:normal;
}

.profile-card{
  position:relative;
  min-height:570px;
  padding:31px!important;
  overflow:hidden;
  border:1px solid rgba(255,255,255,.13)!important;
  background:
    linear-gradient(155deg,rgba(255,255,255,.09),rgba(255,255,255,.025) 58%),
    #101b2b!important;
  box-shadow:
    0 28px 80px rgba(0,0,0,.28),
    inset 0 1px 0 rgba(255,255,255,.06);
}

.profile-card::before{
  content:"";
  position:absolute;
  inset:0;
  border-radius:inherit;
  background:linear-gradient(135deg,rgba(73,168,255,.11),transparent 42%,rgba(110,231,199,.05));
  pointer-events:none;
}

.profile-decoration{
  position:absolute;
  border-radius:50%;
  filter:blur(2px);
  pointer-events:none;
}

.profile-decoration-one{
  width:170px;
  height:170px;
  right:-70px;
  top:-60px;
  background:rgba(73,168,255,.15);
}

.profile-decoration-two{
  width:120px;
  height:120px;
  left:-55px;
  bottom:90px;
  background:rgba(110,231,199,.08);
}

.profile-photo-wrap{
  position:relative;
  z-index:1;
  width:190px;
  height:230px;
  padding:4px;
  border-radius:28px;
  background:linear-gradient(135deg,var(--blue),var(--green));
  box-shadow:0 20px 45px rgba(20,122,220,.22);
}

.profile-photo-wrap img{
  width:100%!important;
  height:100%!important;
  border:0!important;
  border-radius:24px!important;
  object-fit:cover!important;
  object-position:center 23%!important;
  background:#0c1726;
}

.profile-online{
  position:absolute;
  right:9px;
  bottom:9px;
  width:17px;
  height:17px;
  border:4px solid #101b2b;
  border-radius:50%;
  background:var(--green);
  box-shadow:0 0 18px rgba(110,231,199,.75);
}

.profile-heading{
  position:relative;
  z-index:1;
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:20px;
  margin-top:24px;
}

.profile-heading small{
  font-size:.67rem;
  letter-spacing:.13em;
}

.profile-heading h3{
  margin:4px 0 0;
  font-size:1.35rem;
}

.profile-badge{
  width:45px;
  height:45px;
  display:grid;
  place-items:center;
  flex:0 0 45px;
  border:1px solid rgba(255,255,255,.12);
  border-radius:14px;
  background:rgba(255,255,255,.055);
  color:#84c8ff;
  font-weight:800;
}

.availability{
  position:relative;
  z-index:1;
  display:inline-flex;
  align-items:center;
  gap:9px;
  margin-top:18px;
  padding:9px 13px;
  border:1px solid rgba(110,231,199,.14);
  border-radius:999px;
  background:rgba(110,231,199,.075);
  color:#8ef0d6;
  font-size:.86rem;
  font-weight:700;
}

.availability span{
  width:8px;
  height:8px;
  border-radius:50%;
  background:var(--green);
  box-shadow:0 0 14px var(--green);
}

.profile-card dl{
  position:relative;
  z-index:1;
  display:grid!important;
  grid-template-columns:1fr!important;
  gap:0!important;
  margin-top:24px;
  padding-top:8px;
  border-top:1px solid var(--line);
}

.profile-card dl div{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);
  align-items:center;
  gap:20px;
  padding:13px 0;
  border-bottom:1px solid rgba(255,255,255,.065);
}

.profile-card dl div:last-child{
  border-bottom:0;
}

.profile-card dd{
  text-align:right;
  line-height:1.45;
}

@media(max-width:1100px){
  .hero{
    gap:48px;
  }

  .profile-card{
    min-height:auto;
  }

  .profile-photo-wrap{
    width:170px;
    height:205px;
  }
}

@media(max-width:650px){
  .hero-copy{
    padding-top:4px;
  }

  .hero h1{
    font-size:clamp(3.35rem,17vw,4.6rem);
    line-height:.92;
  }

  .hero-actions{
    display:grid;
    grid-template-columns:1fr;
  }

  .hero-actions .btn{
    text-align:center;
  }

  .hero-points{
    display:grid;
    grid-template-columns:1fr;
  }

  .profile-card{
    padding:24px 20px!important;
  }

  .profile-photo-wrap{
    width:150px;
    height:184px;
  }

  .profile-card dl div{
    grid-template-columns:1fr;
    gap:3px;
  }

  .profile-card dd{
    text-align:left;
  }
}


/* Nome completo numa única linha */
.hero-name{
  white-space:nowrap;
  max-width:none!important;
  width:max-content;
  font-size:clamp(3.1rem,5.8vw,6.25rem)!important;
  line-height:.95!important;
  letter-spacing:-.06em!important;
}

@media(max-width:1100px){
  .hero-name{
    font-size:clamp(2.8rem,7vw,5.2rem)!important;
  }
}

@media(max-width:760px){
  .hero-name{
    white-space:normal;
    width:auto;
    font-size:clamp(3rem,14vw,4.5rem)!important;
  }
}

@media(min-width:761px){
  .hero-copy{
    min-width:0;
  }
}


/* Revisão do comportamento do cursor e seleção de texto
   Mantém selecionáveis apenas contactos e campos de formulário. */
main h1,
main h2,
main h3,
main h4,
main h5,
main h6,
main p,
main small,
main .section-label,
main .hero-label,
main .hero-points,
main .profile-card,
main .profile-card dt,
main .profile-card dd,
main .cards article,
main .timeline,
main .item-badge {
  cursor: default;
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

main a,
main button,
header a,
header button {
  cursor: pointer;
}

main input,
main textarea,
main select,
main [contenteditable="true"] {
  cursor: text;
  -webkit-user-select: text;
  user-select: text;
}

main a,
main .contact a,
main .contact strong,
main .contact span {
  -webkit-user-select: text;
  user-select: text;
}

/* Impede o cursor de escrita em cartões informativos. */
.cards article,
.skill-card,
.project-card,
.profile-card,
.timeline-item {
  caret-color: transparent;
}

/* Remove qualquer foco visual de edição indevido em texto normal. */
main :not(input):not(textarea):not(select):not(button):not(a):focus {
  outline: none;
}


/* O cursor de escrita só aparece depois de o visitante clicar no campo. */
input:not(:focus),
textarea:not(:focus) {
  caret-color: transparent !important;
}

input:focus,
textarea:focus {
  caret-color: auto !important;
}


/* Ligações de login, registo e conta na página principal */
.account-nav{
  display:inline-flex;
  align-items:center;
  gap:8px;
  margin-left:14px;
  padding-left:14px;
  border-left:1px solid rgba(255,255,255,.12);
}

.account-nav .account-link{
  padding:8px 11px;
  border-radius:9px;
  font-size:.82rem;
  font-weight:750;
  white-space:nowrap;
}

.account-nav .login-link{
  color:#c9d8e7;
  background:rgba(255,255,255,.045);
}

.account-nav .register-link{
  color:#07111e;
  background:linear-gradient(135deg,#49a8ff,#6ee7c7);
}

.account-nav .profile-link{
  color:#8ed4ff;
  border:1px solid rgba(73,168,255,.28);
  background:rgba(73,168,255,.07);
}

.visitor-account-actions{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin-top:24px;
}

.visitor-account-actions a{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:38px;
  padding:0 14px;
  border:1px solid rgba(255,255,255,.11);
  border-radius:10px;
  background:rgba(255,255,255,.04);
  color:#c7d4e2;
  font-size:.8rem;
  font-weight:750;
}

.visitor-account-actions a:nth-child(2){
  border-color:rgba(110,231,199,.2);
  color:#91efd7;
  background:rgba(110,231,199,.07);
}

.visitor-account-actions a:hover,
.account-nav .account-link:hover{
  transform:translateY(-1px);
  filter:brightness(1.08);
}

@media(max-width:1100px){
  .account-nav{
    display:grid;
    grid-template-columns:1fr;
    width:100%;
    margin:8px 0 0;
    padding:10px 0 0;
    border-left:0;
    border-top:1px solid rgba(255,255,255,.1);
  }

  .account-nav .account-link{
    display:block;
    width:100%;
    text-align:center;
  }
}

@media(max-width:650px){
  .visitor-account-actions{
    display:grid;
    grid-template-columns:1fr;
  }

  .visitor-account-actions a{
    width:100%;
  }
}


/* Login, registo e conta dentro da página principal */
.account-modal{
  position:fixed;
  inset:0;
  z-index:3000;
  display:none;
  align-items:center;
  justify-content:center;
  padding:24px;
}

.account-modal.open{
  display:flex;
}

.account-modal-backdrop{
  position:absolute;
  inset:0;
  background:rgba(2,9,18,.82);
  backdrop-filter:blur(9px);
  -webkit-backdrop-filter:blur(9px);
}

.account-modal-dialog{
  position:relative;
  z-index:1;
  width:min(100%,920px);
  height:min(88vh,820px);
  display:grid;
  grid-template-rows:auto 1fr;
  overflow:hidden;
  border:1px solid rgba(255,255,255,.14);
  border-radius:24px;
  background:#0c1828;
  box-shadow:0 35px 100px rgba(0,0,0,.48);
}

.account-modal-header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  min-height:78px;
  padding:16px 20px;
  border-bottom:1px solid rgba(255,255,255,.1);
  background:#0a1625;
}

.account-modal-header small{
  color:#6ee7c7;
  font-size:.65rem;
  font-weight:850;
  letter-spacing:.13em;
}

.account-modal-header h2{
  margin:4px 0 0;
  color:#fff;
  font-size:1.22rem;
}

.account-modal-controls{
  display:flex;
  align-items:center;
  gap:9px;
}

.account-modal-controls a,
.account-modal-controls button{
  width:42px;
  height:42px;
  display:grid;
  place-items:center;
  border:1px solid rgba(255,255,255,.12);
  border-radius:12px;
  background:rgba(255,255,255,.055);
  color:#fff;
  font-size:1.35rem;
  cursor:pointer!important;
}

.account-modal-controls button{
  padding:0;
}

.account-modal iframe{
  width:100%;
  height:100%;
  border:0;
  background:#08111f;
}

.account-modal-loading{
  position:absolute;
  inset:78px 0 0;
  z-index:2;
  display:grid;
  place-items:center;
  background:#0c1828;
  color:#aab7c8;
  font-weight:700;
}

.account-modal-loading.hidden{
  display:none;
}

body.account-modal-open{
  overflow:hidden;
}

@media(max-width:650px){
  .account-modal{
    padding:0;
  }

  .account-modal-dialog{
    width:100%;
    height:100%;
    border:0;
    border-radius:0;
  }

  .account-modal-header{
    min-height:70px;
    padding:13px 14px;
  }

  .account-modal-loading{
    inset:70px 0 0;
  }
}


/* Correção do modal de conta */
.account-modal{
  overflow:auto;
}

.account-modal-dialog{
  width:min(100%,560px);
  height:auto;
  max-height:calc(100vh - 48px);
  grid-template-rows:auto minmax(0,1fr);
}

.account-modal-dialog.account-wide{
  width:min(100%,980px);
}

.account-modal iframe{
  min-height:520px;
  max-height:calc(100vh - 128px);
}

.account-modal-dialog.account-wide iframe{
  min-height:650px;
}

.account-modal-loading{
  inset:78px 0 0;
}

@media(max-width:650px){
  .account-modal-dialog,
  .account-modal-dialog.account-wide{
    max-height:none;
  }

  .account-modal iframe,
  .account-modal-dialog.account-wide iframe{
    min-height:calc(100vh - 70px);
    max-height:none;
  }
}


/* Remove a barra superior do modal de login, registo e conta */
.account-modal-header{
  display:none !important;
}

.account-modal-dialog{
  grid-template-rows:1fr !important;
}

.account-modal-loading{
  inset:0 !important;
}

.account-modal iframe{
  min-height:560px;
  max-height:calc(100vh - 48px);
}

.account-modal-dialog.account-wide iframe{
  min-height:700px;
}

@media(max-width:650px){
  .account-modal iframe,
  .account-modal-dialog.account-wide iframe{
    min-height:100vh;
    max-height:none;
  }
}


/* Remove a barra lateral do formulário dentro do modal */
.account-modal{
  overflow:hidden !important;
}

.account-modal-dialog{
  overflow:hidden !important;
}

.account-modal iframe{
  overflow:hidden !important;
}

@media(min-width:651px){
  .account-modal-dialog{
    height:auto !important;
    max-height:none !important;
  }

  .account-modal iframe{
    min-height:640px !important;
    max-height:none !important;
  }
}
