/* Janji · darussyifa.production
   Visual refresh layered over the original application styles. */
:root {
  --green: #173f3a;
  --green-deep: #0e2b2c;
  --paper: #fbfaf7;
  --ink: #173b39;
  --muted: #71817b;
  --line: #dfe8e1;
  --gold: #c49b61;
  --mint: #eaf3ed;
  --shadow-soft: 0 18px 55px rgba(16, 56, 52, .10);
}

body {
  background:
    radial-gradient(circle at 8% 0%, rgba(196, 155, 97, .10), transparent 27rem),
    radial-gradient(circle at 94% 18%, rgba(188, 220, 207, .30), transparent 31rem),
    var(--paper);
}

.logo.brand-mark {
  display: inline-flex;
  align-items: flex-start;
  flex-direction: column;
  gap: 2px;
  min-width: 152px;
  line-height: .88;
}

.logo.brand-mark .brand-subline {
  color: var(--gold);
  font-family: DM Sans, sans-serif;
  font-size: 9px;
  font-weight: 650;
  letter-spacing: 1.8px;
  line-height: 1.2;
  text-transform: lowercase;
}

.nav {
  position: sticky;
  top: 0;
  z-index: 90;
  height: 82px;
  border-bottom-color: rgba(208, 224, 214, .8);
  background: rgba(251, 250, 247, .88);
  box-shadow: 0 8px 28px rgba(24, 62, 55, .04);
  backdrop-filter: blur(18px);
}

.nav nav a,
.nav-login,
.footer a:not(.logo) {
  transition: color .2s ease, transform .2s ease;
}

.nav nav a:hover,
.nav-login:hover,
.footer a:not(.logo):hover {
  color: var(--gold);
  transform: translateY(-1px);
}

.btn {
  border-radius: 999px;
  box-shadow: 0 8px 22px rgba(23, 63, 58, .12);
}

.btn:hover {
  box-shadow: 0 12px 26px rgba(23, 63, 58, .18);
}

.hero {
  position: relative;
  max-width: 1540px;
  min-height: 680px;
  padding-top: 76px;
  padding-bottom: 78px;
}

.hero::before {
  position: absolute;
  top: 45px;
  right: 4%;
  width: 180px;
  height: 180px;
  border: 1px solid rgba(196, 155, 97, .35);
  border-radius: 50%;
  content: "";
  pointer-events: none;
}

.hero::after {
  position: absolute;
  right: 8.6%;
  top: 124px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 0 9px rgba(196, 155, 97, .15), 0 0 0 18px rgba(196, 155, 97, .07);
  content: "";
  pointer-events: none;
}

.hero-copy {
  position: relative;
  z-index: 1;
}

.hero h1 {
  color: var(--green-deep);
  letter-spacing: -2.5px;
}

.hero h1 em,
h2 em {
  color: #7e9d8d;
}

.eyebrow {
  color: var(--gold);
  letter-spacing: 2.8px;
}

.eyebrow span {
  background: var(--gold);
  box-shadow: 0 0 0 5px rgba(196, 155, 97, .15);
}

.hero-art::before {
  background: linear-gradient(145deg, #dbece2, #eef4ea 60%, #f5e9d8);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.7), 0 20px 70px rgba(55, 103, 86, .11);
}

.hero-card,
.paper-back {
  border-radius: 12px;
}

.hero-card {
  box-shadow: 0 25px 50px rgba(28, 62, 55, .18);
}

.art-label {
  border-radius: 999px;
  box-shadow: var(--shadow-soft);
}

.benefit-strip {
  background: linear-gradient(90deg, #edf6ef, #f7f2e8, #edf6ef);
  color: #56736a;
}

.collection {
  padding-top: 94px;
  padding-bottom: 94px;
}

.theme-card {
  transition: transform .25s ease;
}

.theme-card:hover {
  transform: translateY(-6px);
}

.theme-visual {
  border: 1px solid rgba(255,255,255,.75);
  border-radius: 18px;
  box-shadow: 0 15px 35px rgba(33, 73, 61, .09);
}

.theme-info h3 {
  color: var(--green-deep);
}

.theme-actions .btn {
  box-shadow: none;
}

.how {
  position: relative;
  overflow: hidden;
  background: linear-gradient(135deg, #e8f2eb, #f6f0e6);
}

.how::after {
  position: absolute;
  right: -80px;
  bottom: -150px;
  width: 330px;
  height: 330px;
  border: 1px solid rgba(196, 155, 97, .35);
  border-radius: 50%;
  content: "";
}

.steps > div {
  position: relative;
  z-index: 1;
  padding: 4px 18px 4px 0;
}

.steps > div > span {
  color: var(--gold);
}

.footer {
  border-top: 1px solid var(--line);
  background: rgba(255,255,255,.55);
}

.brand-footer-credit,
.janji-credit {
  display: block;
  color: var(--gold);
  font-size: 10px;
  font-weight: 650;
  letter-spacing: 1.6px;
  text-transform: lowercase;
}

.auth-page {
  background:
    radial-gradient(circle at 85% 8%, rgba(196, 155, 97, .16), transparent 23rem),
    linear-gradient(135deg, #e7f2e9, #f7f1e6);
}

.auth-page .profile-card,
.profile-card,
.price-panel,
.editor-panel,
.account-panel {
  border: 1px solid rgba(205, 222, 211, .9);
  border-radius: 22px;
  box-shadow: var(--shadow-soft);
}

.auth-page .profile-card {
  padding: 42px;
}

.dash-head {
  position: sticky;
  top: 0;
  z-index: 80;
  background: rgba(255,255,255,.88);
  box-shadow: 0 8px 28px rgba(24, 62, 55, .04);
  backdrop-filter: blur(18px);
}

.dash-head .logo.brand-mark {
  min-width: 132px;
  font-size: 39px;
}

.inv-list > article,
.stats > div,
.empty {
  border-color: rgba(205, 222, 211, .9);
  border-radius: 18px;
  box-shadow: 0 12px 30px rgba(33, 73, 61, .06);
}

.status {
  background: #e4f1e7;
  color: #39715c;
  border-radius: 999px;
}

.editor-tabs button.active {
  border-radius: 999px;
  background: #dfefe3;
  color: var(--green);
}

.editor-panel {
  padding: 34px;
}

.form-section {
  border-bottom-color: #e5eee7;
}

.field > span {
  color: #55736a;
}

input,
select,
textarea {
  border-color: #d7e4da;
  border-radius: 12px;
  background: #fcfefc;
}

input:focus,
select:focus,
textarea:focus {
  outline-color: #9fc1ad;
}

.invitation {
  position: relative;
  background-color: var(--tb);
}

.invitation::before {
  position: fixed;
  inset: 0;
  background-image: radial-gradient(rgba(255,255,255,.28) .65px, transparent .65px);
  background-size: 13px 13px;
  content: "";
  opacity: .15;
  pointer-events: none;
}

.inv-mobile {
  position: relative;
  z-index: 1;
  box-shadow: -18px 0 55px rgba(10, 34, 32, .17);
}

.invitation .inv-btn {
  border-radius: 999px;
  box-shadow: 0 10px 22px rgba(0,0,0,.10);
  transition: transform .2s ease, box-shadow .2s ease;
}

.invitation .inv-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 14px 28px rgba(0,0,0,.16);
}

.inv-section {
  position: relative;
}

.inv-section h2 {
  letter-spacing: -.7px;
}

.person {
  padding: 24px 15px 28px;
  border-top: 1px solid rgba(255,255,255,.2);
}

.person:first-of-type {
  border-top: 0;
}

.person > img {
  box-shadow: 0 15px 30px rgba(0,0,0,.14);
}

.countdown {
  position: relative;
  overflow: hidden;
}

.countdown::before,
.countdown::after {
  position: absolute;
  width: 120px;
  height: 120px;
  border: 1px solid currentColor;
  border-radius: 50%;
  content: "";
  opacity: .18;
}

.countdown::before { top: -62px; left: -62px; }
.countdown::after { right: -62px; bottom: -62px; }

.event-card {
  position: relative;
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.28);
  border-radius: 22px;
  background: linear-gradient(145deg, rgba(255,255,255,.16), rgba(255,255,255,.045));
  box-shadow: 0 16px 35px rgba(0,0,0,.09);
  backdrop-filter: blur(8px);
}

.event-card > svg {
  padding: 10px;
  width: 45px;
  height: 45px;
  border: 1px solid currentColor;
  border-radius: 50%;
}

.map-card {
  display: grid;
  grid-template-columns: 74px minmax(0, 1fr);
  gap: 13px;
  align-items: center;
  margin-top: 19px;
  padding: 11px;
  border: 1px solid rgba(255,255,255,.24);
  border-radius: 16px;
  background: rgba(255,255,255,.12);
  text-align: left;
}

.map-art {
  position: relative;
  display: grid;
  place-items: center;
  grid-row: span 2;
  min-height: 73px;
  overflow: hidden;
  border-radius: 11px;
  background:
    linear-gradient(28deg, transparent 0 40%, rgba(255,255,255,.64) 41% 45%, transparent 46% 100%),
    linear-gradient(143deg, transparent 0 51%, rgba(196,155,97,.45) 52% 57%, transparent 58% 100%),
    linear-gradient(135deg, #b9d6c2, #e9e4c9 55%, #b2cfd0);
}

.map-art::after {
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255,255,255,.75) 1px, transparent 1px);
  background-size: 11px 11px;
  content: "";
  opacity: .35;
}

.map-pin {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  border: 5px solid rgba(255,255,255,.84);
  border-radius: 50% 50% 50% 0;
  background: #b3625d;
  box-shadow: 0 5px 12px rgba(49,53,36,.25);
  transform: rotate(-45deg);
}

.map-pin::after {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #fff;
  content: "";
}

.map-meta strong,
.map-meta small {
  display: block;
}

.map-meta strong {
  font-size: 12px;
  letter-spacing: .2px;
}

.map-meta small {
  margin-top: 2px;
  font-size: 10px;
  line-height: 1.45;
  opacity: .82;
}

.map-card-link {
  display: inline-block;
  grid-column: 2;
  margin-top: 4px;
  color: inherit;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .8px;
  text-decoration: underline;
  text-underline-offset: 3px;
}

.map-action {
  font-weight: 650;
}

.gallery button {
  border-radius: 16px;
  box-shadow: 0 12px 25px rgba(0,0,0,.12);
}

.bank {
  border-radius: 18px;
  background: rgba(255,255,255,.10);
}

.invitation footer.inv-section {
  border-top: 1px solid rgba(255,255,255,.25);
  background: linear-gradient(180deg, transparent, rgba(0,0,0,.08));
}

.invitation footer .janji-credit {
  margin-top: 23px;
  color: inherit;
  opacity: .78;
}

@media (max-width: 760px) {
  .logo.brand-mark {
    min-width: 130px;
    font-size: 39px;
  }

  .logo.brand-mark .brand-subline {
    font-size: 7px;
    letter-spacing: 1.35px;
  }

  .hero {
    min-height: 0;
    padding-top: 55px;
  }

  .hero::before,
  .hero::after {
    display: none;
  }

  .auth-page .profile-card,
  .editor-panel {
    padding: 24px;
  }

  .map-card {
    grid-template-columns: 62px minmax(0, 1fr);
  }

  .map-art {
    min-height: 65px;
  }
}

/* Blue-white interface direction requested for the next Janji edition. */
:root {
  --green: #12527d;
  --green-deep: #082f52;
  --paper: #f8fcff;
  --ink: #143c5d;
  --muted: #6d8596;
  --line: #d7e8f2;
  --gold: #5f9bc2;
  --mint: #e7f4fb;
  --shadow-soft: 0 18px 55px rgba(16, 72, 108, .11);
}

body {
  background:
    radial-gradient(circle at 8% 0%, rgba(95, 155, 194, .16), transparent 27rem),
    radial-gradient(circle at 94% 18%, rgba(195, 229, 244, .40), transparent 31rem),
    var(--paper);
}

.hero::before {
  border-color: rgba(95, 155, 194, .40);
}

.hero::after {
  background: var(--gold);
  box-shadow: 0 0 0 9px rgba(95, 155, 194, .16), 0 0 0 18px rgba(95, 155, 194, .08);
}

.hero h1 em,
h2 em {
  color: #4f8bb2;
}

.hero-art::before {
  background: linear-gradient(145deg, #d8eef8, #eef8fc 60%, #e7f0fa);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.85), 0 20px 70px rgba(45, 111, 153, .13);
}

.benefit-strip {
  background: linear-gradient(90deg, #eaf6fc, #f8fcff, #eaf6fc);
  color: #4e7590;
}

.how {
  background: linear-gradient(135deg, #e3f3fb, #f3f9fd);
}

.auth-page {
  background:
    radial-gradient(circle at 85% 8%, rgba(95, 155, 194, .20), transparent 23rem),
    linear-gradient(135deg, #e2f3fb, #f8fcff);
}

.status {
  background: #e1f1fa;
  color: #27648a;
}

.editor-tabs button.active {
  background: #dff0f9;
  color: #12527d;
}

.form-section {
  border-bottom-color: #dcecf5;
}

.field > span {
  color: #52738b;
}

input,
select,
textarea {
  border-color: #cfe2ee;
  background: #fcfeff;
}

input:focus,
select:focus,
textarea:focus {
  outline-color: #8bbbd7;
}

.map-art {
  background:
    linear-gradient(28deg, transparent 0 40%, rgba(255,255,255,.76) 41% 45%, transparent 46% 100%),
    linear-gradient(143deg, transparent 0 51%, rgba(95,155,194,.52) 52% 57%, transparent 58% 100%),
    linear-gradient(135deg, #a9d5ea, #e6f3f8 55%, #b5d5e4);
}

.map-pin {
  background: #247da9;
}

.parallax-layer {
  will-change: transform;
}

.hero-art.parallax-layer {
  transform: translate3d(0, var(--parallax-y, 0px), 0);
}

.hero-card.parallax-layer {
  transform: translate3d(0, var(--parallax-y, 0px), 0) rotate(6deg);
}

.hero-card.parallax-layer:hover {
  transform: translate3d(0, var(--parallax-y, 0px), 0) rotate(1deg) scale(1.02);
}

.paper-back.parallax-layer {
  transform: translate3d(0, var(--parallax-y, 0px), 0) rotate(-11deg);
}

.art-label.parallax-layer {
  transform: translate3d(0, var(--parallax-y, 0px), 0);
}

.inv-aside > img.parallax-layer {
  transform: scale(1.08) translate3d(0, var(--parallax-y, 0px), 0);
}

.opened-cover .cover-photo img.parallax-layer {
  transform: scale(1.07) translate3d(0, var(--parallax-y, 0px), 0);
}

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

/* Interactive Google Maps mini-card. The iframe remains draggable; the button opens Maps. */
.map-card {
  display: block;
  padding: 10px;
}

.map-frame {
  position: relative;
  height: 190px;
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.28);
  border-radius: 14px;
  background: #dcecf4;
}

.map-frame iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

.map-open-link {
  position: absolute;
  right: 10px;
  bottom: 10px;
  z-index: 2;
  margin: 0;
  padding: 7px 11px;
  border: 1px solid rgba(255,255,255,.75);
  border-radius: 999px;
  background: rgba(13, 48, 68, .82);
  color: #fff;
  text-decoration: none;
  backdrop-filter: blur(8px);
}

.map-meta {
  padding: 10px 3px 2px;
}

/* Every public wish returned by the API remains visible as a readable card. */
.invitation #ucapan .wish {
  margin: 14px 0 0;
  padding: 17px 18px;
  border: 1px solid rgba(255,255,255,.25);
  border-radius: 16px;
  background: rgba(255,255,255,.10);
  box-shadow: 0 8px 20px rgba(0,0,0,.06);
  text-align: left;
}

.invitation #ucapan .wish b {
  display: inline-block;
  font-size: 14px;
}

.invitation #ucapan .wish small {
  opacity: .78;
}

.invitation #ucapan .wish p {
  margin: 7px 0 0;
  font-size: 13px;
  line-height: 1.7;
}

/* Dramatic envelope-opening transition shown before React reveals the invitation. */
.envelope-transition {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: grid;
  place-items: center;
  overflow: hidden;
  background: radial-gradient(circle at 50% 42%, rgba(255,255,255,.97), rgba(226,241,248,.98) 52%, rgba(8,47,82,.98));
  opacity: 1;
  pointer-events: none;
  animation: envelope-fade-in .25s ease-out both;
}

.envelope-transition.is-leaving {
  animation: envelope-fade-out .9s cubic-bezier(.22,.75,.18,1) forwards;
}

.envelope-scene {
  position: relative;
  width: min(78vw, 360px);
  padding-bottom: 40px;
  perspective: 1100px;
  animation: envelope-scene-in 1.05s cubic-bezier(.2,.8,.2,1) both;
}

.envelope-visual {
  position: relative;
  aspect-ratio: 1.42 / 1;
  transform-style: preserve-3d;
  filter: drop-shadow(0 28px 30px rgba(4, 33, 56, .28));
  animation: envelope-float 1.9s ease-in-out both;
}

.envelope-back,
.envelope-flap,
.envelope-letter {
  position: absolute;
  inset: 0;
  border-radius: 10px;
}

.envelope-back {
  overflow: hidden;
  background: linear-gradient(145deg, #fafdff, #c9e1ec);
  border: 1px solid rgba(255,255,255,.95);
}

.envelope-back::before,
.envelope-back::after {
  position: absolute;
  bottom: 0;
  width: 72%;
  height: 80%;
  background: linear-gradient(145deg, transparent 49%, rgba(92,151,183,.25) 50% 52%, transparent 53%);
  content: "";
}

.envelope-back::before { left: -11%; transform: rotate(7deg); }
.envelope-back::after { right: -11%; transform: rotate(-7deg); }

.envelope-letter {
  z-index: 1;
  inset: 9% 9% 3%;
  display: grid;
  place-items: center;
  color: #154667;
  background: #fff;
  border: 1px solid #d1e6f0;
  font-family: Libre Caslon Display, Georgia, serif;
  font-size: clamp(18px, 5vw, 26px);
  transform: translateY(28%) translateZ(4px);
  animation: letter-rise 1.15s .18s cubic-bezier(.18,.85,.24,1) both;
}

.envelope-flap {
  z-index: 3;
  clip-path: polygon(0 0, 100% 0, 50% 58%);
  background: linear-gradient(150deg, #eff9fc, #9bc6d9);
  border-top: 1px solid rgba(255,255,255,.95);
  transform-origin: 50% 0;
  backface-visibility: hidden;
  animation: flap-open .95s .22s cubic-bezier(.18,.82,.22,1) forwards;
}

.envelope-seal {
  position: absolute;
  z-index: 4;
  top: 47%;
  left: 50%;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border: 4px solid rgba(255,255,255,.78);
  border-radius: 50%;
  color: #fff;
  background: #247da9;
  box-shadow: 0 8px 15px rgba(6,55,83,.25);
  transform: translate(-50%, -50%);
  animation: seal-break .35s .18s ease-out forwards;
}

.envelope-shadow {
  position: absolute;
  right: 6%;
  bottom: 21px;
  left: 6%;
  height: 22px;
  border-radius: 50%;
  background: rgba(5, 45, 70, .24);
  filter: blur(9px);
  animation: shadow-pulse 1.1s ease-out both;
}

.envelope-caption {
  margin: 18px 0 0;
  color: #164766;
  font-size: 11px;
  letter-spacing: 2.4px;
  text-align: center;
  text-transform: uppercase;
  animation: caption-in .7s .55s ease-out both;
}

@keyframes envelope-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes envelope-fade-out { from { opacity: 1; } to { opacity: 0; visibility: hidden; } }
@keyframes envelope-scene-in { from { opacity: 0; transform: translateY(55px) scale(.82) rotateX(12deg); } to { opacity: 1; transform: none; } }
@keyframes envelope-float { 0%,100% { transform: translateY(0) rotateZ(0); } 50% { transform: translateY(-10px) rotateZ(-1deg); } }
@keyframes letter-rise { from { transform: translateY(38%) translateZ(4px); } to { transform: translateY(-21%) translateZ(4px); } }
@keyframes flap-open { from { transform: rotateX(0); } to { transform: rotateX(176deg); } }
@keyframes seal-break { from { opacity: 1; transform: translate(-50%, -50%) scale(1); } to { opacity: 0; transform: translate(-50%, -50%) scale(1.7) rotate(18deg); } }
@keyframes shadow-pulse { from { opacity: 0; transform: scale(.7); } to { opacity: .8; transform: scale(1); } }
@keyframes caption-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

@media (max-width: 760px) {
  .map-frame { height: 170px; }
  .envelope-scene { width: min(84vw, 340px); }
}

@media (prefers-reduced-motion: reduce) {
  .envelope-transition,
  .envelope-transition.is-leaving,
  .envelope-scene,
  .envelope-visual,
  .envelope-letter,
  .envelope-flap,
  .envelope-seal,
  .envelope-shadow,
  .envelope-caption {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
}
