/* Shared, scoped interactions. Existing page dimensions remain unchanged. */
:root{--ui-ease:cubic-bezier(.22,1,.36,1);--ui-gradient:linear-gradient(135deg,#667eea 0%,#764ba2 100%)}
.site-ui-modal{position:fixed;inset:0;width:300px;max-width:calc(100vw - 40px);height:fit-content;max-height:calc(100dvh - 40px);margin:auto;padding:0;overflow:auto;border:0;border-radius:10px;background:#fff;color:#333;font:14px/1.5 'Helvetica Neue',Arial,'Microsoft YaHei',sans-serif;box-shadow:0 18px 60px #0003;z-index:2147483647;transform-origin:50% 55%}
.site-ui-modal,.site-ui-modal *{box-sizing:border-box}
.site-ui-modal[open]{animation:ui-modal-enter .32s var(--ui-ease) both}
.site-ui-modal::backdrop{background:rgba(0,0,0,.48);animation:ui-fade-in .22s ease both}
.site-ui-modal.is-closing{animation:ui-modal-exit .16s ease both;pointer-events:none}
.site-ui-modal.is-closing::backdrop{animation:ui-fade-out .16s ease both}
.site-ui-heading{display:block;margin:0;padding:15px 20px;border:0;background:var(--ui-gradient);color:#fff;text-align:center;font:600 16px/24px 'Helvetica Neue',Arial,sans-serif}
.site-ui-body{margin:0;padding:22px 18px;color:#333;text-align:center;line-height:1.65;font-size:14px;overflow-wrap:anywhere;white-space:pre-wrap}
.site-ui-footer{padding:12px 15px 14px;display:flex;align-items:center;justify-content:center;gap:12px;border-top:1px solid #eee}
.site-ui-modal .site-ui-button{display:inline-flex;align-items:center;justify-content:center;appearance:none;width:auto;min-width:88px;height:36px;margin:0;padding:0 24px;border:0;border-radius:20px;background:var(--ui-gradient);color:#fff;opacity:1;font:14px/1.4 'Helvetica Neue',Arial,sans-serif;text-align:center;cursor:pointer;box-shadow:0 4px 15px #667eea50;transition:transform .18s var(--ui-ease),box-shadow .18s ease,filter .18s ease}
.site-ui-modal .site-ui-button:hover{transform:translateY(-2px);filter:brightness(1.06);box-shadow:0 6px 18px #667eea60}
.site-ui-modal .site-ui-button:active{transform:translateY(0) scale(.97)}
.site-ui-modal .site-ui-cancel{background:#f4f4f8;color:#777;box-shadow:none}
.site-ui-modal .site-ui-button:focus-visible{outline:3px solid #9ca6f6;outline-offset:3px}
.site-ui-input{display:block;width:calc(100% - 36px);height:38px;margin:0 18px 20px;padding:0 10px;border:1px solid #dcdce7;border-radius:5px;outline:none;font:14px Arial,sans-serif}
.site-ui-input:focus{border-color:#7b72ce;box-shadow:0 0 0 3px #7770ce18}
.site-ui-toast-stack{position:fixed;top:28px;left:0;right:0;z-index:2147483646;display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none}
.site-ui-toast{display:flex;align-items:center;gap:10px;max-width:calc(100vw - 40px);min-height:44px;padding:12px 20px;border:1px solid #e9e9f1;border-radius:9px;background:rgba(255,255,255,.97);color:#424255;box-shadow:0 8px 35px #28254d24;pointer-events:auto;text-align:left;font:14px/20px 'Helvetica Neue',Arial,sans-serif;animation:ui-toast-enter .3s var(--ui-ease) both}
.site-ui-toast i{display:grid;place-items:center;flex:0 0 20px;width:20px;height:20px;border-radius:50%;background:#eeecfb;color:#7669bd;font-style:normal;font-size:13px}
.site-ui-toast.is-closing{animation:ui-toast-exit .18s ease both}
.site-login .password,.site-login .dowebok{animation:ui-rise .5s var(--ui-ease) both}
.site-login input:not([type=submit]){transition:border-color .2s ease,box-shadow .2s ease}
.site-login .password input:not([type=submit]):focus{outline:none;border-color:#667eea;box-shadow:0 0 0 3px #667eea1c}
.site-login input[type=submit],.site-login .form-item button{transition:transform .2s var(--ui-ease),box-shadow .2s ease,background .2s ease,color .2s ease;cursor:pointer}
.site-login input[type=submit]:hover,.site-login .form-item button:hover{transform:translateY(-2px);box-shadow:0 6px 18px #445cb52b}
.site-login input[type=submit]:active,.site-login .form-item button:active{transform:translateY(0) scale(.985)}
.site-login [disabled]{cursor:wait!important;opacity:.65}
.site-login .is-shaking{animation:ui-shake .32s ease}
.site-front>div:first-child,.site-front>header{animation:ui-rise .5s var(--ui-ease) both}
.site-front #folder .floder-slide{animation:ui-rise .45s var(--ui-ease) both;transition:background-color .2s ease,box-shadow .2s ease}
.site-front #folder .floder-slide:nth-child(2){animation-delay:60ms}
.site-front #folder .floder-slide:nth-child(3){animation-delay:120ms}
.site-front #folder .floder-slide:nth-child(n+4){animation-delay:180ms}
.site-front #folder .folder-ico img{transition:transform .25s var(--ui-ease),filter .25s ease}
.site-front #folder a:hover .folder-ico img{transform:scale(1.035);filter:brightness(1.03)}
.site-front #folder a:active .folder-ico img{transform:scale(.97)}
.site-front #folder .folder-name{transition:color .18s ease}
.site-front #post>.title,.site-front #post>.content{animation:ui-rise .45s var(--ui-ease) both}
.site-front #post>.content{animation-delay:70ms}
.site-admin .panel{animation:ui-rise .3s var(--ui-ease) both}
.site-admin .panel:nth-child(2){animation-delay:40ms}
.site-admin .btn{transition:transform .16s var(--ui-ease),box-shadow .2s ease,opacity .2s ease,background .2s ease}
.site-admin .btn:not(:disabled):hover{transform:translateY(-1px);box-shadow:0 3px 8px #0000000d}
.site-admin .btn:not(:disabled):active{transform:translateY(0) scale(.97)}
.site-admin .sidebar{transition:width .24s var(--ui-ease)}
.site-admin main{transition:margin-left .24s var(--ui-ease)}
.site-admin .topbar{transition:left .24s var(--ui-ease)}
.site-admin .nav-items{display:block;max-height:0;overflow:hidden;opacity:0;transition:max-height .25s var(--ui-ease),opacity .18s ease}
.site-admin .nav-group.open>.nav-items{max-height:200px;opacity:1}
.site-admin.collapsed .nav-items{max-height:0}
.site-admin .nav-heading,.site-admin .nav-home,.site-admin .nav-item,.site-admin .topbar button{transition:background-color .18s ease,color .18s ease}
.site-admin .caret{transition:transform .22s var(--ui-ease)}
.site-admin .status-switch{transition:background .2s ease,border-color .2s ease}
.site-admin .status-switch .knob{transition:background .2s ease}
.site-admin .data-table tr{transition:background-color .15s ease}
.site-admin .dropdown:not([hidden]){animation:ui-rise .2s var(--ui-ease) both}
.site-admin #image-preview[open]{animation:ui-modal-enter .3s var(--ui-ease) both}
.site-admin #image-preview::backdrop{animation:ui-fade-in .2s ease both}
.site-admin .input:focus,.site-admin .textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px #0096880c}
.site-admin .stat strong{animation:ui-rise .4s var(--ui-ease) both}
.site-admin .chart-body polyline{stroke-dasharray:1200;stroke-dashoffset:1200;animation:ui-chart 1s var(--ui-ease) forwards}
@keyframes ui-rise{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@keyframes ui-fade-in{from{opacity:0}to{opacity:1}}
@keyframes ui-fade-out{from{opacity:1}to{opacity:0}}
@keyframes ui-modal-enter{from{opacity:0;transform:translateY(16px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes ui-modal-exit{to{opacity:0;transform:translateY(6px) scale(.975)}}
@keyframes ui-toast-enter{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}
@keyframes ui-toast-exit{to{opacity:0;transform:translateY(-8px)}}
@keyframes ui-shake{20%,60%{transform:translateX(-5px)}40%,80%{transform:translateX(5px)}}
@keyframes ui-chart{to{stroke-dashoffset:0}}
@media(prefers-reduced-motion:reduce){
.site-login .password,.site-login .dowebok,.site-login .is-shaking,.site-front>div,.site-front>header,.site-front #folder .floder-slide,.site-front #post>.title,.site-front #post>.content,.site-admin .panel,.site-admin .stat strong,.site-admin .dropdown,.site-ui-modal[open],.site-ui-modal.is-closing,.site-ui-modal::backdrop,.site-ui-toast,.site-ui-toast.is-closing,.site-admin #image-preview[open],.site-admin #image-preview::backdrop{animation:none!important}
.site-admin .chart-body polyline{animation:none;stroke-dashoffset:0}
.site-login input,.site-login button,.site-front img,.site-front .floder-slide,.site-front .folder-name,.site-admin .btn,.site-admin .sidebar,.site-admin main,.site-admin .topbar,.site-admin .nav-items,.site-admin .nav-heading,.site-admin .nav-item,.site-admin .nav-home,.site-admin .caret,.site-admin .status-switch,.site-ui-button{transition:none!important}
}
