feat: add videodb media index with Docker stack
- Add videodb PHP/MySQL media collection manager (Blu-ray, DVD, CD) - Dockerfile: PHP 8.1 + Apache with GD/mysqli/exif extensions - docker-compose.yml: app on port 6761 + MySQL 8.0 with health checks - docker-entrypoint.sh: auto-generates config.inc.php from env vars, waits for MySQL, initializes DB schema idempotently - init-db.php: CLI schema installer using app's own prefix_query() logic - Persistent volumes for DB, cache, and cover images Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
4676
videodb/lib/foundation4/css/foundation.css
vendored
Normal file
4676
videodb/lib/foundation4/css/foundation.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
videodb/lib/foundation4/css/foundation.min.css
vendored
Normal file
1
videodb/lib/foundation4/css/foundation.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
171
videodb/lib/foundation4/css/ltie9.css
Normal file
171
videodb/lib/foundation4/css/ltie9.css
Normal file
@@ -0,0 +1,171 @@
|
||||
/* The Grid ---------------------- */
|
||||
.lt-ie9 .row { width: 940px; max-width: 100%; min-width: 768px; margin: 0 auto; }
|
||||
.lt-ie9 .row .row { width: auto; max-width: none; min-width: 0; margin: 0 -15px; }
|
||||
.lt-ie9 .row.large-collapse .column,
|
||||
.lt-ie9 .row.large-collapse .columns { padding: 0; }
|
||||
.lt-ie9 .row .row { width: auto; max-width: none; min-width: 0; margin: 0 -15px; }
|
||||
.lt-ie9 .row .row.large-collapse { margin: 0; }
|
||||
.lt-ie9 .column, .columns { float: left; min-height: 1px; padding: 0 15px; position: relative; }
|
||||
.lt-ie9 .column.large-centered, .columns.large-centered { float: none; margin: 0 auto; }
|
||||
.lt-ie9 [class*="column"] + [class*="column"]:last-child { float: right; }
|
||||
.lt-ie9 [class*="column"] + [class*="column"].end { float: left; }
|
||||
.lt-ie9 .large-1,
|
||||
.lt-ie9 .row .large-1 { width: 8.33333%; }
|
||||
.lt-ie9 .large-2,
|
||||
.lt-ie9 .row .large-2 { width: 16.66667%; }
|
||||
.lt-ie9 .large-3,
|
||||
.lt-ie9 .row .large-3 { width: 25%; }
|
||||
.lt-ie9 .large-4,
|
||||
.lt-ie9 .row .large-4 { width: 33.33333%; }
|
||||
.lt-ie9 .large-5,
|
||||
.lt-ie9 .row .large-5 { width: 41.66667%; }
|
||||
.lt-ie9 .large-6,
|
||||
.lt-ie9 .row .large-6 { width: 50%; }
|
||||
.lt-ie9 .large-7,
|
||||
.lt-ie9 .row .large-7 { width: 58.33333%; }
|
||||
.lt-ie9 .large-8,
|
||||
.lt-ie9 .row .large-8 { width: 66.66667%; }
|
||||
.lt-ie9 .large-9,
|
||||
.lt-ie9 .row .large-9 { width: 75%; }
|
||||
.lt-ie9 .large-10,
|
||||
.lt-ie9 .row .large-10 { width: 83.33333%; }
|
||||
.lt-ie9 .large-11,
|
||||
.lt-ie9 .row .large-11 { width: 91.66667%; }
|
||||
.lt-ie9 .large-12,
|
||||
.lt-ie9 .row .large-12 { width: 100%; }
|
||||
.lt-ie9 .row .large-offset-1 { margin-left: 8.33333%; }
|
||||
.lt-ie9 .row .large-offset-2 { margin-left: 16.66667%; }
|
||||
.lt-ie9 .row .large-offset-3 { margin-left: 25%; }
|
||||
.lt-ie9 .row .large-offset-4 { margin-left: 33.33333%; }
|
||||
.lt-ie9 .row .large-offset-5 { margin-left: 41.66667%; }
|
||||
.lt-ie9 .row .large-offset-6 { margin-left: 50%; }
|
||||
.lt-ie9 .row .large-offset-7 { margin-left: 58.33333%; }
|
||||
.lt-ie9 .row .large-offset-8 { margin-left: 66.66667%; }
|
||||
.lt-ie9 .row .large-offset-9 { margin-left: 75%; }
|
||||
.lt-ie9 .row .large-offset-10 { margin-left: 83.33333%; }
|
||||
.lt-ie9 .pull-2 { right: 16.66667%; }
|
||||
.lt-ie9 .pull-3 { right: 25%; }
|
||||
.lt-ie9 .pull-4 { right: 33.33333%; }
|
||||
.lt-ie9 .pull-5 { right: 41.66667%; }
|
||||
.lt-ie9 .pull-6 { right: 50%; }
|
||||
.lt-ie9 .pull-7 { right: 58.33333%; }
|
||||
.lt-ie9 .pull-8 { right: 66.66667%; }
|
||||
.lt-ie9 .pull-9 { right: 75%; }
|
||||
.lt-ie9 .pull-10 { right: 83.33333%; }
|
||||
.lt-ie9 .push-2 { left: 16.66667%; }
|
||||
.lt-ie9 .push-3 { left: 25%; }
|
||||
.lt-ie9 .push-4 { left: 33.33333%; }
|
||||
.lt-ie9 .push-5 { left: 41.66667%; }
|
||||
.lt-ie9 .push-6 { left: 50%; }
|
||||
.lt-ie9 .push-7 { left: 58.33333%; }
|
||||
.lt-ie9 .push-8 { left: 66.66667%; }
|
||||
.lt-ie9 .push-9 { left: 75%; }
|
||||
.lt-ie9 .push-10 { left: 83.33333%; }
|
||||
/* Nicolas Gallagher's micro clearfix */
|
||||
.lt-ie9 .row { *zoom: 1; }
|
||||
.lt-ie9 .row:before, .row:after { content: " "; display: table; }
|
||||
.lt-ie9 .row:after { clear: both; }
|
||||
|
||||
/* top-bar according to */
|
||||
.top-bar.lt-ie9 {
|
||||
background: #111111;
|
||||
*zoom: 1;
|
||||
overflow: visible; }
|
||||
.top-bar.lt-ie9:before, .top-bar.lt-ie9:after {
|
||||
content: " ";
|
||||
display: table; }
|
||||
.top-bar.lt-ie9:after {
|
||||
clear: both; }
|
||||
.top-bar.lt-ie9 .toggle-topbar {
|
||||
display: none; }
|
||||
.top-bar.lt-ie9 .title-area {
|
||||
float: left; }
|
||||
.top-bar.lt-ie9 .name h1 a {
|
||||
width: auto; }
|
||||
.top-bar.lt-ie9 input,
|
||||
.top-bar.lt-ie9 .button {
|
||||
line-height: 2em;
|
||||
font-size: 0.875em;
|
||||
height: 2em;
|
||||
padding: 0 10px;
|
||||
position: relative;
|
||||
top: 8px; }
|
||||
.top-bar.lt-ie9.expanded {
|
||||
background: #111111; }
|
||||
.contain-to-grid .top-bar.lt-ie9 {
|
||||
max-width: 62.5em;
|
||||
margin: 0 auto; }
|
||||
.top-bar-section.lt-ie9 {
|
||||
-webkit-transition: none 0 0;
|
||||
-moz-transition: none 0 0;
|
||||
transition: none 0 0;
|
||||
left: 0 !important; }
|
||||
.top-bar-section.lt-ie9 ul {
|
||||
width: auto;
|
||||
height: auto !important;
|
||||
display: inline; }
|
||||
.top-bar-section.lt-ie9 ul li {
|
||||
float: left; }
|
||||
.top-bar-section.lt-ie9 ul li .js-generated {
|
||||
display: none; }
|
||||
.top-bar-section.lt-ie9 li a:not(.button) {
|
||||
padding: 0 15px;
|
||||
line-height: 45px;
|
||||
background: #111111; }
|
||||
.top-bar-section.lt-ie9 li a:not(.button):hover {
|
||||
background: black; }
|
||||
.top-bar-section.lt-ie9 .has-dropdown > a {
|
||||
padding-right: 35px !important; }
|
||||
.top-bar-section.lt-ie9 .has-dropdown > a:after {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border: solid 5px;
|
||||
border-color: rgba(255, 255, 255, 0.5) transparent transparent transparent;
|
||||
margin-top: -2.5px; }
|
||||
.top-bar-section.lt-ie9 .has-dropdown.moved {
|
||||
position: relative; }
|
||||
.top-bar-section.lt-ie9 .has-dropdown.moved > .dropdown {
|
||||
visibility: hidden; }
|
||||
.top-bar-section.lt-ie9 .has-dropdown:hover > .dropdown, .top-bar-section.lt-ie9 .has-dropdown:active > .dropdown {
|
||||
visibility: visible; }
|
||||
.top-bar-section.lt-ie9 .has-dropdown .dropdown li.has-dropdown > a:after {
|
||||
border: none;
|
||||
content: "\00bb";
|
||||
margin-top: -7px;
|
||||
right: 5px; }
|
||||
.top-bar-section.lt-ie9 .dropdown {
|
||||
left: 0;
|
||||
top: auto;
|
||||
background: transparent;
|
||||
min-width: 100%; }
|
||||
.top-bar-section.lt-ie9 .dropdown li a {
|
||||
color: white;
|
||||
line-height: 1;
|
||||
white-space: nowrap;
|
||||
padding: 7px 15px;
|
||||
background: #1e1e1e; }
|
||||
.top-bar-section.lt-ie9 .dropdown li label {
|
||||
white-space: nowrap;
|
||||
background: #1e1e1e; }
|
||||
.top-bar-section.lt-ie9 .dropdown li .dropdown {
|
||||
left: 100%;
|
||||
top: 0; }
|
||||
.top-bar-section.lt-ie9 > ul > .divider {
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
border-right: solid 1px #2b2b2b;
|
||||
border-left: solid 1px black;
|
||||
clear: none;
|
||||
height: 45px;
|
||||
width: 0px; }
|
||||
.top-bar-section.lt-ie9 .has-form {
|
||||
background: #111111;
|
||||
padding: 0 15px;
|
||||
height: 45px; }
|
||||
.top-bar-section.lt-ie9 ul.right li .dropdown {
|
||||
left: auto;
|
||||
right: 0; }
|
||||
.top-bar-section.lt-ie9 ul.right li .dropdown li .dropdown {
|
||||
right: 100%; } }
|
||||
402
videodb/lib/foundation4/css/normalize.css
vendored
Normal file
402
videodb/lib/foundation4/css/normalize.css
vendored
Normal file
@@ -0,0 +1,402 @@
|
||||
/*! normalize.css v2.1.1 | MIT License | git.io/normalize */
|
||||
|
||||
/* ==========================================================================
|
||||
HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct `inline-block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Prevent system color scheme's background color being used in Firefox, IE,
|
||||
* and Opera.
|
||||
* 2. Prevent system color scheme's text color being used in Firefox, IE, and
|
||||
* Opera.
|
||||
* 3. Set default font family to sans-serif.
|
||||
* 4. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
background: #fff; /* 1 */
|
||||
color: #000; /* 2 */
|
||||
font-family: sans-serif; /* 3 */
|
||||
-ms-text-size-adjust: 100%; /* 4 */
|
||||
-webkit-text-size-adjust: 100%; /* 4 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address `outline` inconsistency between Chrome and other browsers.
|
||||
*/
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Figures
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari 5.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9.
|
||||
* 2. Remove excess padding in IE 8/9.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
Reference in New Issue
Block a user