/* Ovium UI — generated by database/build_css.php. Do not edit by hand. */
/* Precompiled so the page is laid out on first paint, with no runtime CDN. */
*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid}
html{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4}
body{margin:0;line-height:inherit}
hr{height:0;color:inherit;border-top-width:1px}
h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;margin:0}
p,figure,blockquote,dl,dd,pre{margin:0}
a{color:inherit;text-decoration:inherit}
b,strong{font-weight:bolder}
code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:1em}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sub{bottom:-.25em}sup{top:-.5em}
table{text-indent:0;border-color:inherit;border-collapse:collapse}
button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}
button,select{text-transform:none}
button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;background-color:transparent;background-image:none;cursor:pointer}
:-moz-focusring{outline:auto}
progress{vertical-align:baseline}
::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}
[type='search']{-webkit-appearance:textfield;outline-offset:-2px}
::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
summary{display:list-item}
ol,ul,menu{list-style:none;margin:0;padding:0}
textarea{resize:vertical}
input::placeholder,textarea::placeholder{opacity:1;color:#7C8AA8}
img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}
img,video{max-width:100%;height:auto}
[hidden]{display:none}
.-right-1{right:-.25rem}
.-top-1{top:-.25rem}
.-translate-x-full{transform:translateX(-100%)}
.absolute{position:absolute}
.block{display:block}
.col-span-2{grid-column:span 2/span 2}
.cursor-pointer{cursor:pointer}
.fixed{position:fixed}
.flex{display:flex}
.flex-1{flex:1 1 0%}
.flex-col{flex-direction:column}
.flex-none{flex:none}
.flex-wrap{flex-wrap:wrap}
.font-bold{font-weight:700}
.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.font-normal{font-weight:400}
.font-semibold{font-weight:600}
.gap-1{gap:.25rem}
.gap-1\.5{gap:.375rem}
.gap-2{gap:.5rem}
.gap-2\.5{gap:.625rem}
.gap-3{gap:.75rem}
.gap-4{gap:1rem}
.grid{display:grid}
.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}
.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}
.h-1\.5{height:.375rem}
.h-16{height:4rem}
.h-2{height:.5rem}
.h-2\.5{height:.625rem}
.h-3{height:.75rem}
.h-4{height:1rem}
.hidden{display:none}
.hover\:brightness-110:hover{filter:brightness(1.1)}
.inline{display:inline}
.inline-block{display:inline-block}
.inline-flex{display:inline-flex}
.inset-0{top:0;right:0;bottom:0;left:0}
.inset-y-0{top:0;bottom:0}
.items-center{align-items:center}
.items-end{align-items:flex-end}
.items-start{align-items:flex-start}
.justify-between{justify-content:space-between}
.justify-center{justify-content:center}
.justify-end{justify-content:flex-end}
.leading-none{line-height:1}
.leading-tight{line-height:1.25}
.left-0{left:0}
.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.list-none{list-style:none}
.max-w-6xl{max-width:72rem}
.max-w-md{max-width:28rem}
.mb-0\.5{margin-bottom:.125rem}
.mb-1{margin-bottom:.25rem}
.mb-1\.5{margin-bottom:.375rem}
.mb-2{margin-bottom:.5rem}
.mb-3{margin-bottom:.75rem}
.mb-4{margin-bottom:1rem}
.mb-5{margin-bottom:1.25rem}
.mb-6{margin-bottom:1.5rem}
.min-h-screen{min-height:100vh}
.min-w-0{min-width:0}
.ml-1{margin-left:.25rem}
.ml-2{margin-left:.5rem}
.ml-auto{margin-left:auto}
.mr-4{margin-right:1rem}
.mt-0\.5{margin-top:.125rem}
.mt-1{margin-top:.25rem}
.mt-1\.5{margin-top:.375rem}
.mt-10{margin-top:2.5rem}
.mt-2{margin-top:.5rem}
.mt-3{margin-top:.75rem}
.mt-4{margin-top:1rem}
.mt-5{margin-top:1.25rem}
.mt-6{margin-top:1.5rem}
.mx-auto{margin-left:auto;margin-right:auto}
.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}
.my-2{margin-top:.5rem;margin-bottom:.5rem}
.my-3{margin-top:.75rem;margin-bottom:.75rem}
.ov-hidden{display:none}
.overflow-hidden{overflow:hidden}
.p-0{padding:0}
.p-1{padding:.25rem}
.p-1\.5{padding:.375rem}
.p-10{padding:2.5rem}
.p-2{padding:.5rem}
.p-2\.5{padding:.625rem}
.p-3{padding:.75rem}
.p-3\.5{padding:.875rem}
.p-4{padding:1rem}
.p-5{padding:1.25rem}
.p-6{padding:1.5rem}
.p-8{padding:2rem}
.pb-2{padding-bottom:.5rem}
.pb-3{padding-bottom:.75rem}
.pt-1{padding-top:.25rem}
.pt-2{padding-top:.5rem}
.pt-3{padding-top:.75rem}
.px-1{padding-left:.25rem;padding-right:.25rem}
.px-2{padding-left:.5rem;padding-right:.5rem}
.px-2\.5{padding-left:.625rem;padding-right:.625rem}
.px-3{padding-left:.75rem;padding-right:.75rem}
.px-4{padding-left:1rem;padding-right:1rem}
.px-5{padding-left:1.25rem;padding-right:1.25rem}
.px-6{padding-left:1.5rem;padding-right:1.5rem}
.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}
.py-1{padding-top:.25rem;padding-bottom:.25rem}
.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}
.py-10{padding-top:2.5rem;padding-bottom:2.5rem}
.py-2{padding-top:.5rem;padding-bottom:.5rem}
.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}
.py-3{padding-top:.75rem;padding-bottom:.75rem}
.py-4{padding-top:1rem;padding-bottom:1rem}
.py-6{padding-top:1.5rem;padding-bottom:1.5rem}
.py-8{padding-top:2rem;padding-bottom:2rem}
.relative{position:relative}
.right-0{right:0}
.rounded{border-radius:.25rem}
.rounded-2xl{border-radius:1rem}
.rounded-full{border-radius:9999px}
.rounded-lg{border-radius:.5rem}
.rounded-md{border-radius:.375rem}
.rounded-xl{border-radius:.75rem}
.self-center{align-self:center}
.shrink-0{flex-shrink:0}
.space-y-1 > :not([hidden]) ~ :not([hidden]){margin-top:.25rem}
.space-y-1\.5 > :not([hidden]) ~ :not([hidden]){margin-top:.375rem}
.space-y-2 > :not([hidden]) ~ :not([hidden]){margin-top:.5rem}
.space-y-2\.5 > :not([hidden]) ~ :not([hidden]){margin-top:.625rem}
.space-y-3 > :not([hidden]) ~ :not([hidden]){margin-top:.75rem}
.space-y-4 > :not([hidden]) ~ :not([hidden]){margin-top:1rem}
.space-y-5 > :not([hidden]) ~ :not([hidden]){margin-top:1.25rem}
.sticky{position:sticky}
.text-2xl{font-size:1.5rem;line-height:2rem}
.text-center{text-align:center}
.text-left{text-align:left}
.text-right{text-align:right}
.text-sm{font-size:.875rem;line-height:1.25rem}
.text-white{color:#fff}
.text-xs{font-size:.75rem;line-height:1rem}
.top-0{top:0}
.transition{transition:color .15s,background-color .15s,border-color .15s,opacity .15s,transform .15s}
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.w-32{width:8rem}
.w-4{width:1rem}
.w-64{width:16rem}
.w-full{width:100%}
.whitespace-nowrap{white-space:nowrap}
.z-20{z-index:20}
.z-30{z-index:30}
.z-40{z-index:40}
.z-50{z-index:50}

@media (min-width:640px){
.sm\:col-span-2{grid-column:span 2/span 2}
.sm\:col-span-3{grid-column:span 3/span 3}
.sm\:col-span-4{grid-column:span 4/span 4}
.sm\:col-span-5{grid-column:span 5/span 5}
.sm\:flex{display:flex}
.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}
.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}
.sm\:p-6{padding:1.5rem}
.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}
}

@media (min-width:768px){
.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.md\:hidden{display:none}
.md\:static{position:static}
.md\:translate-x-0{transform:translateX(0)}
.md\:z-auto{z-index:auto}
}

@media (min-width:1024px){
.lg\:col-span-1{grid-column:span 1/span 1}
.lg\:col-span-2{grid-column:span 2/span 2}
.lg\:col-span-3{grid-column:span 3/span 3}
.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}
.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}
}

/* PWA & mobile polish */
:root{--safe-top:env(safe-area-inset-top);--safe-bottom:env(safe-area-inset-bottom);--safe-left:env(safe-area-inset-left);--safe-right:env(safe-area-inset-right)}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none}
@media (display-mode:standalone){
  .sidebar{padding-top:var(--safe-top)}
  .ov-topbar,.topbar{padding-top:var(--safe-top)}
  body{padding-left:var(--safe-left);padding-right:var(--safe-right)}
}
@media (max-width:767px){
  .btn,.navlink,select.input,input.input{min-height:42px}
  .card{border-radius:14px}
  input,select,textarea{font-size:16px} /* stop iOS zoom-on-focus */
}
@media (display-mode:standalone) and (max-width:767px){
  main,.ov-main{padding-bottom:calc(16px + var(--safe-bottom))}
}

/* Native-style bottom tab bar (phones only) */
#ov-tabbar{display:none}
@media (max-width:767px){
  #ov-tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:60;
    align-items:stretch;justify-content:space-around;
    padding:6px 4px calc(6px + var(--safe-bottom));
    background:rgba(12,18,34,.96);border-top:1px solid var(--line);
    backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
  #ov-tabbar .ov-tab{
    flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    padding:4px 2px;background:none;border:none;cursor:pointer;text-decoration:none;
    color:var(--muted);font-size:10.5px;font-weight:600;letter-spacing:.2px;min-width:0}
  #ov-tabbar .ov-tab .ov-tab-ic{display:flex;align-items:center;justify-content:center;height:24px;transition:transform .15s ease}
  #ov-tabbar .ov-tab .ov-tab-lb{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #ov-tabbar .ov-tab-on{color:var(--lane)}
  #ov-tabbar .ov-tab-on .ov-tab-ic{transform:translateY(-1px)}
  #ov-tabbar .ov-tab:active .ov-tab-ic{transform:scale(.9)}
  /* Give page content room so the bar never covers the last row / footer. */
  main{padding-bottom:calc(74px + var(--safe-bottom)) !important}
  footer{margin-bottom:calc(66px + var(--safe-bottom))}
  /* The floating AI button + panel sit above the tab bar, not behind it. */
  #ov-ai-fab,.ov-ai-fab{bottom:calc(80px + var(--safe-bottom)) !important}
  #ov-ai-panel,.ov-ai-panel{bottom:calc(140px + var(--safe-bottom)) !important;max-height:calc(100vh - 220px) !important}
}

/* Page transition — content eases in on load, quick fade on tab navigation */
main.ov-page-enter{opacity:0;transform:translateY(8px)}
main.ov-page-enter.ov-page-enter-active{opacity:1;transform:none;transition:opacity .24s ease, transform .24s cubic-bezier(.2,.8,.2,1)}
main.ov-page-leave{opacity:0;transform:translateY(-6px);transition:opacity .16s ease, transform .16s ease}
@media (prefers-reduced-motion:reduce){
  main.ov-page-enter,main.ov-page-enter.ov-page-enter-active,main.ov-page-leave{opacity:1 !important;transform:none !important;transition:none !important}
}

/* Pull-to-refresh indicator (phones) */
#ov-ptr{position:fixed;top:calc(6px + var(--safe-top));left:50%;transform:translateX(-50%) translateY(0);
  z-index:70;width:38px;height:38px;border-radius:50%;opacity:0;pointer-events:none;
  background:rgba(12,18,34,.96);border:1px solid var(--line);
  box-shadow:0 6px 18px rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;
  transition:transform .18s ease, opacity .18s ease}
#ov-ptr .ov-ptr-spin{width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(255,255,255,.25);
  border-top-color:var(--lane);transition:transform .18s ease}
#ov-ptr.ov-ptr-ready .ov-ptr-spin{transform:rotate(180deg)}
#ov-ptr.ov-ptr-spinning .ov-ptr-spin{animation:ovPtrSpin .7s linear infinite}
@keyframes ovPtrSpin{to{transform:rotate(360deg)}}

/* Offline action queue — status banner + toast */
#ov-queue-banner{position:fixed;left:0;right:0;top:0;z-index:75;display:none;align-items:center;justify-content:center;gap:8px;
  padding:calc(6px + var(--safe-top)) 12px 6px;font-size:12.5px;font-weight:600;color:#fff}
#ov-queue-banner.ov-q-off{background:#7c5b17}
#ov-queue-banner.ov-q-sync{background:#1d4ed8}
#ov-queue-banner.ov-q-done{background:#047857}
#ov-queue-banner .ov-q-dot{width:8px;height:8px;border-radius:50%;background:#fbbf24;box-shadow:0 0 0 3px rgba(251,191,36,.25)}
#ov-queue-banner .ov-q-spin{width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:ovPtrSpin .7s linear infinite}
#ov-queue-banner .ov-q-check{font-weight:800}
.ov-toast{position:fixed;left:50%;bottom:calc(88px + var(--safe-bottom));transform:translateX(-50%) translateY(16px);z-index:210;
  max-width:calc(100vw - 32px);background:rgba(17,24,42,.97);color:#EAF0FF;border:1px solid rgba(255,255,255,.12);
  padding:11px 16px;border-radius:12px;font-size:13px;box-shadow:0 10px 30px rgba(0,0,0,.45);opacity:0;transition:opacity .25s ease, transform .25s ease}
.ov-toast.ov-toast-in{opacity:1;transform:translateX(-50%) translateY(0)}
