.terms-modal{width:min(1000px,calc(100vw - 32px));height:85vh;height:85dvh;max-width:none;max-height:calc(100dvh - 32px);margin:auto;padding:0;overflow:hidden;border:1px solid #806b58;border-radius:14px;background:#352e28;color:#e8dccd;box-shadow:0 20px 70px #0008}
.terms-modal[open]{display:flex;flex-direction:column}
.terms-modal::backdrop{background:#000b}
.terms-modal-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 20px;border-bottom:1px solid #675648;flex-shrink:0}
.terms-modal-header h2{font-family:inherit;font-weight:600;font-size:20px;line-height:1.3;margin:0;color:#e8dccd}
.terms-modal-close{border:1px solid #90765f;border-radius:7px;background:#504336;color:#e8dccd;font:inherit;padding:9px 16px;cursor:pointer}
.terms-modal-close:hover{background:#675648}
.terms-modal-close:focus-visible{outline:3px solid #d4b18a;outline-offset:2px}
.terms-modal iframe{display:block;border:0;width:100%;flex:1;min-height:0;background:#241f1b}
body.terms-modal-open{overflow:hidden}
.main-footer .footer-legal-links a[data-terms-modal]{color:inherit;text-decoration:underline;text-underline-offset:3px}
@media(max-width:575px){.terms-modal{width:calc(100vw - 16px);height:calc(100dvh - 32px)}.terms-modal-header{padding:12px;gap:10px}.terms-modal-header h2{font-size:18px}}

.terms-modal:not(#ready-project-modal)[open]{animation:shared-modal-in .28s ease-out both}
.terms-modal:not(#ready-project-modal)[open]::backdrop{animation:shared-backdrop-in .28s ease-out both}
.terms-modal:not(#ready-project-modal).modal-closing[open]{animation:shared-modal-out .22s ease-in both;pointer-events:none}
.terms-modal:not(#ready-project-modal).modal-closing[open]::backdrop{animation:shared-backdrop-out .22s ease-in both}
@keyframes shared-modal-in{from{opacity:0;translate:0 16px;scale:.98}to{opacity:1;translate:0 0;scale:1}}
@keyframes shared-modal-out{from{opacity:1;translate:0 0;scale:1}to{opacity:0;translate:0 10px;scale:.98}}
@keyframes shared-backdrop-in{from{opacity:0}to{opacity:1}}
@keyframes shared-backdrop-out{from{opacity:1}to{opacity:0}}
@media(prefers-reduced-motion:reduce){.terms-modal:not(#ready-project-modal)[open],.terms-modal:not(#ready-project-modal)[open]::backdrop{animation:none!important}}

/* Lock page overflow without turning the document into a fixed/composited layer. */
html.modal-scroll-locked{overflow:hidden!important;overscroll-behavior:none}
html.modal-scroll-locked body{overflow:hidden!important;overscroll-behavior:none}
dialog{overscroll-behavior:contain}
/* Only the dialog boundary contains scroll; nested content can scroll its parent. */
:where(button,a,input[type=button],input[type=submit],label){touch-action:manipulation}

/* Full-width panels slide from and back below the viewport. */
:is(#site-stats-modal,#gateway-monitor,#gateway-events-modal,#nfc-editor-modal,#ready-project-modal,#ai-project-modal,#brama-modal)[open]{animation:panel-slide-in .36s cubic-bezier(.22,.61,.36,1) both!important}
:is(#site-stats-modal,#gateway-monitor,#gateway-events-modal,#nfc-editor-modal,#ready-project-modal,#ai-project-modal,#brama-modal).modal-closing[open]{animation:panel-slide-out .22s ease-in both!important;pointer-events:none}
@keyframes panel-slide-in{from{transform:translateY(100vh)}to{transform:translateY(0)}}
@keyframes panel-slide-out{from{transform:translateY(0)}to{transform:translateY(100vh)}}
@media(prefers-reduced-motion:reduce){:is(#site-stats-modal,#gateway-monitor,#gateway-events-modal,#nfc-editor-modal,#ready-project-modal,#ai-project-modal,#brama-modal)[open],:is(#site-stats-modal,#gateway-monitor,#gateway-events-modal,#nfc-editor-modal,#ready-project-modal,#ai-project-modal,#brama-modal).modal-closing[open]{animation:none!important}}

/* Release animated transforms after entry so resized dialogs keep native hit testing. */
dialog[open]:not(.modal-closing){animation-fill-mode:backwards!important}
