/* Confirmed 2026-10-08: primary menu content is 60 CSS px; add safe area once. */
 :root{--q-primary-menu-height:60px;--q-dock-safe-bottom:env(safe-area-inset-bottom,0px);--q-dock-icon:var(--q-icon,24px);--q-dock-label:12px;--q-dock-label-line:1.3333333333;--q-dock-gap:2px;--q-dock-item:var(--q-hit,44px);--q-dock-height:calc(var(--q-primary-menu-height) + var(--q-dock-safe-bottom))}
body>.nav,.app>.tools,.q-primary-menu{box-sizing:border-box;height:var(--q-dock-height);min-height:var(--q-dock-height);flex-shrink:0;padding:8px 12px calc(8px + var(--q-dock-safe-bottom));border-top-width:0;box-shadow:inset 0 1px var(--line,#dadce0);align-items:center}
body>.nav>button:not(.publish),.app>.tools>button,.q-primary-menu>button{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;height:var(--q-dock-item);min-height:var(--q-dock-item);min-width:44px;padding:0;gap:var(--q-dock-gap);line-height:var(--q-dock-label-line)}
body>.nav>button:not(.publish)>svg,.app>.tools>button>svg{width:var(--q-dock-icon);height:var(--q-dock-icon)}
body>.nav>button:not(.publish)>span,.app>.tools>button>span{font-size:var(--q-dock-label);line-height:var(--q-dock-label-line)}
/* Invisible hit target extends <1px above/below the visual item. */
body>.nav>button:not(.publish)::before,.app>.tools>button::before{content:"";position:absolute;left:0;right:0;top:50%;height:44px;transform:translateY(-50%)}

body>.nav>.publish{position:relative}
body>.nav>.publish::before{content:"";position:absolute;left:0;right:0;top:50%;height:44px;transform:translateY(-50%)}
/* Internal legacy toolbar: outer shell owns the safe area. */
.photo-editor47 .photo-tools{height:var(--q-primary-menu-height);min-height:var(--q-primary-menu-height);flex-basis:var(--q-primary-menu-height)}
.q-primary-menu>button>svg{width:var(--q-dock-icon);height:var(--q-dock-icon)}
.q-primary-menu>button>span{font-size:var(--q-dock-label);line-height:var(--q-dock-label-line)}
