/* Java Vanilla & Co. shared interaction UI: custom dialogs, toasts, loaders, skeletons */
:root{
  --jv-ui-bg:#fffaf3;
  --jv-ui-panel:#fffdf8;
  --jv-ui-text:#211914;
  --jv-ui-muted:#78695f;
  --jv-ui-line:#d8c9bc;
  --jv-ui-accent:#6f4a34;
  --jv-ui-accent-strong:#4e3123;
  --jv-ui-success:#47603d;
  --jv-ui-danger:#8a3f35;
  --jv-ui-shadow:0 22px 70px rgba(30,20,14,.22);
}
[data-theme="dark"]{
  --jv-ui-bg:#17110e;
  --jv-ui-panel:#211814;
  --jv-ui-text:#f3e9dc;
  --jv-ui-muted:#b8a99e;
  --jv-ui-line:#49372d;
  --jv-ui-accent:#c7a07e;
  --jv-ui-accent-strong:#e1c1a5;
  --jv-ui-success:#9fbd91;
  --jv-ui-danger:#d69b91;
  --jv-ui-shadow:0 22px 70px rgba(0,0,0,.46);
}

/* Full-page skeleton used during first paint, navigation, and form submission. */
.jv-page-loader{
  position:fixed;inset:0;z-index:99990;display:grid;place-items:center;
  padding:88px 24px 24px;background:var(--jv-ui-bg);opacity:0;visibility:hidden;
  transition:opacity .16s ease,visibility .16s ease;pointer-events:none;
}
html.is-page-loading .jv-page-loader,.jv-page-loader.is-active{opacity:1;visibility:visible;pointer-events:auto}
.jv-page-loader-inner{width:min(1040px,100%);display:grid;gap:20px}
.jv-loader-meta{display:flex;align-items:center;gap:10px;color:var(--jv-ui-muted);font:600 .76rem/1.4 Arial,sans-serif;letter-spacing:.04em;text-transform:uppercase}
.jv-loader-spinner{width:18px;height:18px;border:2px solid var(--jv-ui-line);border-top-color:var(--jv-ui-accent);border-radius:50%;animation:jv-spin .72s linear infinite;flex:none}
.jv-skeleton-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:18px}
.jv-skeleton-panel{min-height:300px;border:1px solid var(--jv-ui-line);padding:28px;background:var(--jv-ui-panel);display:grid;align-content:start;gap:16px}
.jv-skeleton-line,.jv-skeleton-box{position:relative;overflow:hidden;background:rgba(125,96,75,.12)}
.jv-skeleton-line::after,.jv-skeleton-box::after,img.jv-image-loading::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);animation:jv-shimmer 1.2s infinite}
.jv-skeleton-line{height:12px}.jv-skeleton-line.lg{height:42px;width:76%}.jv-skeleton-line.md{width:88%}.jv-skeleton-line.sm{width:54%}
.jv-skeleton-box{min-height:300px}
.jv-image-loading{background:linear-gradient(110deg,rgba(126,98,78,.09) 25%,rgba(126,98,78,.17) 45%,rgba(126,98,78,.09) 65%);background-size:220% 100%;animation:jv-image-shimmer 1.15s linear infinite;color:transparent}
@keyframes jv-spin{to{transform:rotate(360deg)}}
@keyframes jv-shimmer{100%{transform:translateX(100%)}}
@keyframes jv-image-shimmer{to{background-position:-220% 0}}


/* Admin dashboard loader is scoped to the main content only.
   Sidebar and topbar stay visible and interactive while content is loading. */
.admin-content{position:relative}
.admin-content>.jv-page-loader{
  position:absolute;inset:0;z-index:24;place-items:start center;
  padding:42px 38px 80px;background:var(--bg,var(--jv-ui-bg));
}
.admin-content>.jv-page-loader .jv-page-loader-inner{width:100%;max-width:none}
.admin-content>.jv-page-loader+.admin-content-body{min-height:220px}

/* Reusable styled modal; replaces browser alert()/confirm() UI. */
.jv-dialog-backdrop{position:fixed;inset:0;z-index:100020;background:rgba(25,18,14,.56);backdrop-filter:blur(3px);display:grid;place-items:center;padding:20px;opacity:0;transition:opacity .16s ease}
.jv-dialog-backdrop.is-open{opacity:1}
.jv-dialog{width:min(520px,100%);max-height:min(78vh,720px);overflow:auto;background:var(--jv-ui-panel);color:var(--jv-ui-text);border:1px solid var(--jv-ui-line);box-shadow:var(--jv-ui-shadow)}
.jv-dialog-head{display:grid;grid-template-columns:42px 1fr 32px;gap:13px;align-items:start;padding:20px 20px 15px;border-bottom:1px solid var(--jv-ui-line)}
.jv-dialog-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:50%;background:rgba(111,74,52,.10);color:var(--jv-ui-accent);font:700 1rem Arial,sans-serif}
.jv-dialog.is-danger .jv-dialog-icon{color:var(--jv-ui-danger);background:rgba(138,63,53,.10)}
.jv-dialog-title{margin:1px 0 4px;font:600 1.02rem/1.35 Arial,sans-serif}.jv-dialog-subtitle{margin:0;color:var(--jv-ui-muted);font:400 .82rem/1.5 Arial,sans-serif}
.jv-dialog-close{border:0;background:transparent;color:var(--jv-ui-muted);font-size:1.3rem;line-height:1;cursor:pointer;width:32px;height:32px}
.jv-dialog-body{padding:18px 20px;color:var(--jv-ui-muted);font:400 .86rem/1.6 Arial,sans-serif}
.jv-dialog-body p{margin:0}.jv-dialog-list{margin:12px 0 0;padding-left:19px}.jv-dialog-list li+li{margin-top:5px}
.jv-dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding:15px 20px 20px;border-top:1px solid var(--jv-ui-line)}
.jv-dialog-btn{min-height:40px;padding:0 14px;border:1px solid var(--jv-ui-line);background:transparent;color:var(--jv-ui-text);cursor:pointer;font:600 .78rem Arial,sans-serif}
.jv-dialog-btn.primary{background:var(--jv-ui-accent);border-color:var(--jv-ui-accent);color:#fff}.jv-dialog-btn.danger{background:var(--jv-ui-danger);border-color:var(--jv-ui-danger);color:#fff}

/* Compact styled feedback toast. */
.jv-global-toast-region{position:fixed;z-index:100010;top:84px;right:20px;width:min(380px,calc(100vw - 40px));pointer-events:none;display:grid;gap:9px}
.jv-global-toast{pointer-events:auto;display:grid;grid-template-columns:30px 1fr 24px;gap:10px;align-items:start;padding:12px 13px;background:var(--jv-ui-panel);color:var(--jv-ui-text);border:1px solid var(--jv-ui-line);box-shadow:0 14px 38px rgba(35,23,16,.16);animation:jv-toast-in .18s ease both}
.jv-global-toast.is-success{border-left:3px solid var(--jv-ui-success)}.jv-global-toast.is-error{border-left:3px solid var(--jv-ui-danger)}.jv-global-toast.is-info{border-left:3px solid var(--jv-ui-accent)}
.jv-global-toast-icon{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:rgba(111,74,52,.10);font:700 .75rem Arial,sans-serif;color:var(--jv-ui-accent)}
.jv-global-toast strong{display:block;font:600 .81rem/1.35 Arial,sans-serif;margin:1px 0 3px}.jv-global-toast p{margin:0;color:var(--jv-ui-muted);font:400 .74rem/1.45 Arial,sans-serif}
.jv-global-toast button{border:0;background:none;color:var(--jv-ui-muted);cursor:pointer;width:24px;height:24px}.jv-global-toast.leaving{animation:jv-toast-out .16s ease both}
@keyframes jv-toast-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}@keyframes jv-toast-out{to{opacity:0;transform:translateY(-6px)}}

/* Button/form busy states. */
.jv-submit-busy{position:relative;cursor:wait!important;opacity:.82;pointer-events:none!important}
.jv-submit-busy::before{content:"";width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;display:inline-block;margin-right:8px;vertical-align:-2px;animation:jv-spin .68s linear infinite}
form.jv-form-busy{pointer-events:none}.jv-bilingual-missing{outline:1px solid rgba(138,63,53,.55)!important;outline-offset:1px}
.language-tabs [data-lang-tab].has-missing-language{position:relative;color:var(--jv-ui-danger)!important}.language-tabs [data-lang-tab].has-missing-language::after{content:"";position:absolute;right:7px;top:8px;width:6px;height:6px;border-radius:50%;background:var(--jv-ui-danger)}

@media(max-width:760px){
  .jv-page-loader{padding:76px 14px 14px}.admin-content>.jv-page-loader{padding:28px 16px 60px}.jv-skeleton-grid{grid-template-columns:1fr}.jv-skeleton-panel{min-height:210px}.jv-skeleton-box{min-height:190px}
  .jv-global-toast-region{top:72px;right:12px;width:calc(100vw - 24px)}
  .jv-dialog-backdrop{padding:12px}.jv-dialog-head{grid-template-columns:36px 1fr 28px;padding:16px}.jv-dialog-icon{width:36px;height:36px}.jv-dialog-body{padding:15px 16px}.jv-dialog-actions{padding:13px 16px 16px;flex-wrap:wrap}.jv-dialog-btn{flex:1 1 120px}
}
