vp: innerWidth + 'x' + innerHeight, /* the sheet's controls: any one of them off the viewport is the landscape bug */ npOut: [].filter.call(document.querySelectorAll('.sheet.up .np-frame, .sheet.up .np-meta, .sheet.up .np-scrub, .sheet.up .np-transport, .sheet.up .np-foot'), function (x) { var b = x.getBoundingClientRect(); return b.height > 0 && !inside(b); }).length, /* stacked = the portrait column; beside = the cover left of the controls; face = a face has the column and the thumbnail is gone */ npCols: (function () { var a = box('.sheet.up .np-frame'), b = box('.sheet.up .np-transport'); if (!a || !b) return ''; if (!a.height) return 'face'; return a.bottom <= b.top + 1 ? 'stacked' : 'beside'; })(), faceH: Math.round((box('.sheet.up .np-face') || { height: 0 }).height), /* WHICH face: the queue's own, up whether or not anything is after this one */ qFace: !!document.querySelector('.sheet.up .q-face'), /* a half sheet: how tall it is allowed to be, that it is all on screen, and that its body still reaches its last row */ halfH: Math.round((box('.halfsheet.up') || { height: 0 }).height), halfIn: inside(box('.halfsheet.up')), hsScroll: (function () { var x = document.querySelector('.halfsheet.up .hs-body'); return x ? getComputedStyle(x).overflowY : ''; })(), hsTail: (function () { var x = document.querySelector('.halfsheet.up .hs-body'); return x ? x.scrollHeight - x.clientHeight : -1; })(), heroH: Math.round((box('.screen .hero') || { height: 0 }).height), /* what a page offers first: Play on an artist hero, Play on a record head */ actsIn: inside(box('.screen .hero-acts') || box('.screen .rec-acts')), recCols: (function () { var c = box('.screen .rec-cover'), m = box('.screen .rec-meta'); return c && m ? (c.bottom <= m.top + 1 ? 'stacked' : 'beside') : ''; })(), /* the glass bar above plus the floating bars below, as a share of the screen */ chromePct: (function () { var g = box('.gbar'), low = box('.mini') || box('.nav'); return Math.round((((g ? g.height : 0) + (low ? innerHeight - low.top : 0)) / innerHeight) * 100); })(), miniLeft: Math.round((box('.mini') || { left: -1 }).left), screenPadL: (function () { var x = document.querySelector('.screen'); return x ? Math.round(parseFloat(getComputedStyle(x).paddingLeft)) : -1; })(),