/* Comfortable controls across the storefront, studio and invitations. */
:root{--control-ink:#264c3d;--control-focus:#a77b30}
:is(button,.button,.v2-button,.v2-outline,.text-link,.portal-nav a:not(.brand),.workspace-menu a,.sage-bottom-nav a){-webkit-tap-highlight-color:transparent;touch-action:manipulation}
:is(button,.button,.v2-button,.v2-outline){min-height:44px;cursor:pointer;transition:transform .16s ease,box-shadow .2s ease,background-color .2s ease,border-color .2s ease,opacity .2s ease;font:inherit}
:is(.button,.v2-button,.v2-outline){display:inline-flex;align-items:center;justify-content:center;gap:9px;border-radius:12px;padding:13px 22px;line-height:1.35;font-size:13px;font-weight:600;letter-spacing:.15px;text-align:center;text-decoration:none;box-sizing:border-box;box-shadow:0 3px 8px #183c2910}
:is(.portal-wrap,.workspace-v2) .button{border:1px solid #264c3d;background:#264c3d;color:#fff}
:is(.portal-wrap,.workspace-v2) .button.outline{background:#fff;border-color:#b9c9bf;color:#264c3d;box-shadow:none}
:is(.portal-wrap,.workspace-v2) :is(.button.danger,.text-link.danger){background:#fff1ee;color:#a13329;border:1px solid #ecc2ba}
:is(.portal-wrap,.portal-nav) .text-link{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:10px 14px;border:1px solid #d8e1d9;border-radius:10px;background:#fff;color:#264c3d;text-decoration:none;line-height:1.35;font-size:12px;font-weight:600;box-sizing:border-box}
.order-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch}.order-actions :is(.button,.text-link){margin:0;min-height:44px;flex:0 1 auto}
.portal-actions,.delete-actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.portal-actions .button{margin:0}
:is(.data-fields,#new-order)>.button{justify-self:start;min-width:180px}
.password-toggle{min-width:64px;border-radius:8px!important;box-shadow:none!important;font-size:12px!important}
:is(.v2-filters button,.v2-filter,.portal-nav a,.workspace-menu a){transition:background-color .2s ease,color .2s ease,box-shadow .2s ease,transform .16s ease}
:is(button,a,input,textarea,select,summary):focus-visible{outline:3px solid var(--control-focus)!important;outline-offset:4px!important}
:is(button,.button,.v2-button,.v2-outline):active:not(:disabled):not([aria-disabled=true]){transform:translateY(1px) scale(.975);box-shadow:none}
:is(button,.button,.v2-button,.v2-outline):disabled,[aria-disabled=true]{cursor:not-allowed!important;box-shadow:none!important;transform:none!important;opacity:.5}
button[aria-busy=true]{cursor:wait!important;opacity:.8}
button[aria-busy=true]::after{content:'';display:inline-block;width:13px;height:13px;flex-shrink:0;margin-left:8px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:control-spin .7s linear infinite}
.invitation:not(.atlas) :is(.button,.gift button){border-radius:999px;min-height:46px;padding:13px 22px}.invitation:not(.atlas) .sage-bottom-nav a{min-height:48px;display:flex;align-items:center;justify-content:center;border-radius:10px}
.gallery-button{overflow:hidden}.gallery-button img{transition:transform .35s ease}.lightbox-close{min-width:48px;min-height:48px;border-radius:50%}
.upload-box{transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease;cursor:pointer}.upload-box:focus-within{outline:3px solid var(--control-focus);outline-offset:4px}
@media(hover:hover) and (pointer:fine){
 :is(.button,.v2-button,.v2-outline):hover:not(:disabled):not([aria-disabled=true]){transform:translateY(-2px);box-shadow:0 7px 18px #193d2924;filter:brightness(1.04)}
 :is(.portal-wrap,.portal-nav) .text-link:hover:not(:disabled){background:#edf3ee;border-color:#9fb6a7;box-shadow:0 3px 10px #193d2910}
 .text-link.danger:hover:not(:disabled){background:#fce1dc!important;border-color:#cf8f84!important}
 .gallery-button:hover img{transform:scale(1.035)}.upload-box:hover{border-color:#7c9d89;background:#f0f5ef}
}
@media(max-width:600px){.portal-actions .button{flex:1 1 150px}.order-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.order-actions :is(.button,.text-link){width:100%;padding:12px 10px}.delete-actions .button{flex:1 1 130px}.portal-nav .text-link{padding:10px 12px}}
@keyframes control-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){:is(button,.button,.v2-button,.v2-outline,.text-link,.gallery-button img){transition:none!important}button[aria-busy=true]::after{animation:none;border-style:dotted}}

/* Portal styles previously used deeper selectors; keep the control geometry consistent. */
body .portal-wrap :is(.button,.text-link),body.workspace-v2 .portal-wrap :is(.button,.text-link){border-radius:12px;min-height:46px;display:inline-flex;align-items:center;justify-content:center;gap:8px;line-height:1.4}
body .portal-wrap .order-actions :is(.button,.text-link){padding:11px 12px;font-size:12px;border:1px solid #cbd8cd;background:#f7faf6;color:#264c3d;box-shadow:none}
body .portal-wrap .order-actions .button:not(.outline):not(.danger){background:#264c3d;color:white;border-color:#264c3d}
body .portal-wrap .order-actions .danger{background:#fff1ee;color:#a13329;border-color:#ecc2ba}
body .portal-wrap .portal-actions .button{padding:13px 22px;font-size:13px}
body .portal-wrap:has(#customer-login) #customer-login>.button,body .portal-wrap:has(#owner-login) #owner-login>.button{border-radius:12px;min-height:50px}
body .v2-card-actions .v2-button{border-radius:12px;min-height:46px;font-size:12px}
body .v2-nav .v2-button{border-radius:12px;min-height:44px}
body .portal-actions .button:last-child{margin-left:0}
/* Semua tombol unggah/aksi di portal harus menampilkan kursor tangan (termasuk teks di dalam label dan input file). */
label.button,label.button *,label:has(input[type=file]),label:has(input[type=file]) *,input[type=file],input[type=radio],input[type=radio]+*,label:has(input[type=radio]),.text-link,.widy-slot button,.widy-slot-info label,[data-remove],[data-move],[data-reset-slot],[data-remove-gallery],[data-save-youtube],#listen-music,select,summary{cursor:pointer}
label.button:has(input:disabled),label.button:has(input:disabled) *,label.button input:disabled,input:disabled,button:disabled,.text-link:disabled,label:has(input[type=radio]:disabled),label:has(input[type=radio]:disabled) *{cursor:not-allowed!important}

/* Mobile: tombol aksi portal tidak boleh membesar jadi kotak tinggi (flex-basis berlaku pada sumbu vertikal saat kolom). */
@media(max-width:600px){.portal-actions{flex-direction:row!important;align-items:stretch!important;gap:8px!important;padding:8px!important;border-radius:14px!important}.portal-actions .button{flex:1 1 calc(50% - 4px)!important;width:auto!important;height:auto!important;min-height:38px!important;padding:8px 12px!important;font-size:13px!important;line-height:1.25!important;border-radius:10px!important}}
.media-note{display:grid;gap:6px;max-width:640px;margin-top:18px!important;padding:14px 18px;border:1px solid #dfe5e1;border-left:4px solid #264c3d;border-radius:12px;background:#f7f9f6;font-size:14px!important;line-height:1.6!important;text-align:left}.media-note .note-title{font-weight:700;color:#1f3a2e;font-size:13px;letter-spacing:.04em;text-transform:uppercase}.media-note .note-item{position:relative;padding-left:16px;color:#4a5a51}.media-note .note-item::before{content:'';position:absolute;left:2px;top:.7em;width:5px;height:5px;border-radius:50%;background:#264c3d}@media(max-width:600px){.media-note{padding:12px 14px;font-size:13.5px!important}}
.widy-pos{display:grid;gap:6px;margin:8px 0}.widy-pos>span{font-size:12px;font-weight:700;color:#33493e}.widy-pos>div{display:flex;flex-wrap:wrap;gap:6px}.widy-pos button{border:1px solid #cfd8d2;background:#fff;color:#33493e;border-radius:999px;padding:5px 12px;font-size:12.5px;cursor:pointer}.widy-pos button[aria-pressed=true]{background:#264c3d;border-color:#264c3d;color:#fff}.widy-pos button:disabled{opacity:.5;cursor:not-allowed}
.widy-pos-manual{display:grid;gap:10px;margin-top:6px;padding:10px 12px;border:1px solid #dfe5e1;border-radius:12px;background:#f7f9f6}.widy-pos-manual label{display:grid!important;grid-template-columns:1fr auto;align-items:center;row-gap:4px;margin:0;font-size:13px;color:#33493e}.widy-pos-manual input[type=range]{grid-column:1/-1;grid-row:2;width:100%!important;min-width:0;accent-color:#264c3d;padding:0!important;min-height:0!important;height:22px!important;border:0!important;background:transparent!important}.widy-pos-manual output{grid-column:2;grid-row:1;font-weight:700}.widy-pos-manual small{color:#6b7a71;font-size:12px}

.widy-pos-reset{justify-self:start;min-height:34px;padding:6px 14px;border:1px solid #c9d3cc;border-radius:999px;background:#fff;color:#264c3d;font-weight:600;font-size:13px;cursor:pointer}.widy-pos-reset:disabled{opacity:.5;cursor:not-allowed}

.order-wait{background:#d98e04;color:#fff;padding:2px 9px;border-radius:999px;font-size:12px;letter-spacing:.02em;white-space:nowrap}
#admin-pending{margin:16px 0;padding:16px 18px;border:2px solid #d98e04;border-radius:14px;background:#fff7e6;color:#4a3300}
#admin-pending h2{margin:0 0 10px;font-size:18px}#admin-pending ul{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:10px}#admin-pending li{display:grid;gap:2px}#admin-pending small{color:#6b5320;font-size:13px;line-height:1.5}

.order-ready{background:#2f7d4f;color:#fff;padding:2px 9px;border-radius:999px;font-size:12px;letter-spacing:.02em;white-space:nowrap}
.order-note{margin:8px 0;padding:9px 12px;border-radius:10px;background:#e6f3ea;border:1px solid #b9dcc5;color:#1f4d33;font-size:13px;line-height:1.5}
.wish-pending{display:block;margin-top:6px;font-size:12px;font-style:italic;opacity:.85}

.rsvp-box{margin-top:14px;padding:14px;border:1px solid #dfe5dd;border-radius:12px;background:#f7f9f6}.rsvp-box[hidden]{display:none}
.rsvp-box h4{margin:0 0 4px;font-size:15px}.rsvp-sum{margin:0 0 10px;font-size:13px;color:#4b6256}
.rsvp-item{display:flex;gap:12px;justify-content:space-between;align-items:flex-start;padding:12px 0;border-top:1px solid #e3e8e0}.rsvp-item p{margin:6px 0 0;font-size:14px;line-height:1.55;word-break:break-word}.rsvp-item small{display:block;color:#6b7a71;font-size:12px;margin-top:2px}
.rsvp-actions{display:flex;gap:8px;flex-wrap:wrap;flex-shrink:0}.rsvp-delete{color:#a33a30;border-color:#e6b7b2}
.rsvp-badge{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:700}.rsvp-badge.on{background:#dff0e5;color:#1f4d33}.rsvp-badge.off{background:#fdeacc;color:#7a4b00}
@media(max-width:600px){.rsvp-item{flex-direction:column}.rsvp-actions{width:100%}.rsvp-actions .og-btn{flex:1}}

/* RSVP compact */
.rsvp-box{margin-top:10px;padding:8px 12px;border-radius:10px;max-height:190px;overflow-y:auto}
.rsvp-box h4{margin:0 0 2px;font-size:13px}.rsvp-sum{margin:0 0 4px;font-size:12px}
.rsvp-item{padding:6px 0;gap:8px;align-items:center}.rsvp-item p{margin:2px 0 0;font-size:13px;line-height:1.4}.rsvp-item small{font-size:11px;margin-top:0}
.rsvp-actions{gap:6px}.rsvp-actions .og-btn{padding:4px 10px;min-height:0;font-size:12px}
.rsvp-badge{padding:0 7px;font-size:10px}

.buyer-line{display:flex;flex-wrap:wrap;align-items:center;gap:14px 18px;margin:10px 0 12px;font-size:17px}
.buyer-email{display:inline-block;font-size:17px;font-weight:700;color:#1d3a2f;letter-spacing:.01em;user-select:all;word-break:break-all;background:#e3eee7;border:1px solid #b9d2c3;border-radius:999px;padding:4px 14px}
.buyer-tags{display:contents}
.bt{font-style:normal;font-size:17px;font-weight:700;padding:4px 14px;border-radius:999px;border:1px solid transparent}
.bt.ok{background:#d9eedf;color:#1d5a37;border-color:#a9d3b6}
.bt.wait{background:#fbefcf;color:#7a5a08;border-color:#ecd48a}
.bt.bad{background:#fadcd9;color:#8a2218;border-color:#eba9a2}
#app .buyer-line{display:flex!important;flex-wrap:wrap;align-items:center}
#app .buyer-line>*{margin:0 18px 12px 0!important}
#app .buyer-line .bt{margin:0 18px 12px 0!important}

.rsvp-btn{position:relative}.rsvp-btn[data-n]::after{content:attr(data-n);position:absolute;top:-7px;right:-7px;min-width:18px;height:18px;padding:0 5px;box-sizing:border-box;border-radius:999px;background:#d92d20;color:#fff;font:700 11px/18px system-ui,sans-serif;text-align:center;box-shadow:0 0 0 2px #fff;animation:rsvpPulse 1.8s ease-in-out infinite}@keyframes rsvpPulse{50%{transform:scale(1.14)}}body.admin-dark .rsvp-btn[data-n]::after{box-shadow:0 0 0 2px #1b1b1f}@media(prefers-reduced-motion:reduce){.rsvp-btn[data-n]::after{animation:none}}
.rsvp-total{align-self:center;margin-left:2px;font-size:12px;font-weight:600;color:#4b6256;white-space:nowrap}body.admin-dark .rsvp-total{color:#b9c7bf}

/* Ketentuan warna tombol (PRD): tindakan menerima/menyetujui = hijau, menolak/membatalkan = merah. */
.button.approve,.og-btn.approve{background:#1f7a4a!important;border-color:#1f7a4a!important;color:#fff!important;font-weight:700}
.button.approve:hover,.og-btn.approve:hover{background:#176239!important;border-color:#176239!important}
.button.reject,.og-btn.reject,.text-link.reject{background:#c0392b!important;border-color:#c0392b!important;color:#fff!important;font-weight:700;text-decoration:none}
.button.reject:hover,.og-btn.reject:hover,.text-link.reject:hover{background:#a52f22!important;border-color:#a52f22!important}
.text-link.reject{padding:8px 14px;border-radius:999px}
