Files

336 lines
8.7 KiB
CSS

/*
* Catalogue skin for the parts labelling pages.
*
* Deliberately denser and cooler-toned than the rest of LIM: this is a
* reference catalogue you scan hundreds of rows in, not a library of sets
* you browse by cover art. Small type, tight rows, thin rules, counts
* everywhere - the conventions old-school parts catalogues settled on
* because they work for this job.
*
* Scoped to .bl - nothing here leaks into the red LEGO-themed pages.
* These are our own colours and layout, not a copy of anyone's site.
*
* Created by: Jess Rogerson (yelling commands at Claude.AI)
*/
.bl {
--bl-navy: #0b3c5d;
--bl-navy-dark: #072a41;
--bl-blue: #1e6ba8;
--bl-blue-light: #e8f1f8;
--bl-amber: #f0a500;
--bl-line: #c3cdd6;
--bl-line-soft: #e2e8ed;
--bl-bg: #f4f6f8;
--bl-row-alt: #fafbfc;
--bl-text: #1f2d3a;
--bl-muted: #6b7b8a;
font-size: 13px;
color: var(--bl-text);
}
.bl a { color: var(--bl-blue); text-decoration: none; }
.bl a:hover { text-decoration: underline; }
/* ---------------------------------------------------------- title bar */
.bl-bar {
background: linear-gradient(180deg, var(--bl-navy) 0%, var(--bl-navy-dark) 100%);
color: #fff;
padding: 8px 12px;
border-radius: 3px 3px 0 0;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.bl-bar h1,
.bl-bar h2 {
font-size: 15px;
font-weight: 700;
margin: 0;
letter-spacing: .2px;
color: #fff;
}
.bl-bar .bl-sub { color: #b9d2e4; font-size: 12px; }
/* --------------------------------------------------------- navigation */
.bl-tabs {
display: flex;
gap: 1px;
background: var(--bl-navy-dark);
padding: 0 6px;
flex-wrap: wrap;
}
.bl-tabs a {
color: #cfe1ee;
padding: 6px 12px;
font-size: 12px;
font-weight: 600;
border-radius: 3px 3px 0 0;
white-space: nowrap;
}
.bl-tabs a:hover { background: #10486c; color: #fff; text-decoration: none; }
.bl-tabs a.active { background: var(--bl-bg); color: var(--bl-navy); }
.bl-crumb {
background: var(--bl-blue-light);
border: 1px solid var(--bl-line);
border-top: 0;
padding: 5px 10px;
font-size: 12px;
color: var(--bl-muted);
}
.bl-crumb a { font-weight: 600; }
.bl-crumb .sep { color: #9fb3c3; margin: 0 5px; }
/* ------------------------------------------------------------- panels */
.bl-panel {
background: #fff;
border: 1px solid var(--bl-line);
border-radius: 3px;
margin-bottom: 12px;
}
.bl-panel > .bl-panel-head {
background: var(--bl-blue-light);
border-bottom: 1px solid var(--bl-line);
padding: 6px 10px;
font-weight: 700;
font-size: 12px;
text-transform: uppercase;
letter-spacing: .4px;
color: var(--bl-navy);
display: flex;
justify-content: space-between;
align-items: center;
gap: 8px;
}
.bl-panel > .bl-panel-body { padding: 10px; }
.bl-panel > .bl-panel-body.tight { padding: 0; }
/* -------------------------------------------------------------- table */
.bl-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.bl-table thead th {
background: #dde5ec;
border-bottom: 1px solid var(--bl-line);
padding: 5px 8px;
text-align: left;
font-weight: 700;
font-size: 11px;
text-transform: uppercase;
letter-spacing: .3px;
color: var(--bl-navy);
white-space: nowrap;
}
.bl-table tbody td {
padding: 4px 8px;
border-bottom: 1px solid var(--bl-line-soft);
vertical-align: middle;
}
.bl-table tbody tr:nth-child(even) { background: var(--bl-row-alt); }
.bl-table tbody tr:hover { background: #fff7e0; }
.bl-table .num {
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
font-size: 11px;
color: var(--bl-navy);
}
.bl-table .thumb {
width: 40px; height: 32px;
object-fit: contain;
background: #fff;
border: 1px solid var(--bl-line-soft);
}
.bl-name { font-weight: 600; }
.bl-dim { color: var(--bl-muted); font-weight: 400; }
/* --------------------------------------------------------------- tree */
.bl-tree { font-size: 12px; }
.bl-tree a {
display: flex;
justify-content: space-between;
gap: 6px;
padding: 3px 10px;
color: var(--bl-text);
border-bottom: 1px solid var(--bl-line-soft);
}
.bl-tree a:hover { background: var(--bl-blue-light); text-decoration: none; }
.bl-tree a.active {
background: var(--bl-navy);
color: #fff;
font-weight: 600;
}
.bl-tree a.active .bl-count { color: #cfe1ee; }
.bl-tree .child { padding-left: 24px; font-size: 11.5px; }
.bl-tree .bl-count { color: var(--bl-muted); font-variant-numeric: tabular-nums; }
.bl-swatch {
display: inline-block;
width: 9px; height: 9px;
border-radius: 2px;
margin-right: 5px;
vertical-align: baseline;
}
/* ------------------------------------------------------------ buttons */
.bl-btn {
display: inline-block;
background: linear-gradient(180deg, #fff 0%, #e9eef2 100%);
border: 1px solid var(--bl-line);
border-radius: 3px;
padding: 4px 10px;
font-size: 12px;
font-weight: 600;
color: var(--bl-navy);
cursor: pointer;
white-space: nowrap;
}
.bl-btn:hover { background: #fff; border-color: var(--bl-blue); text-decoration: none; }
.bl-btn:disabled { opacity: .55; cursor: not-allowed; }
.bl-btn-primary {
background: linear-gradient(180deg, #2b82c4 0%, var(--bl-blue) 100%);
border-color: #15567f;
color: #fff;
}
.bl-btn-primary:hover { background: #2b82c4; color: #fff; }
.bl-btn-go {
background: linear-gradient(180deg, #ffc23d 0%, var(--bl-amber) 100%);
border-color: #c98700;
color: #3d2a00;
}
.bl-btn-go:hover { background: #ffc23d; color: #3d2a00; }
.bl-btn-sm { padding: 2px 7px; font-size: 11px; }
/* ------------------------------------------------------------- fields */
.bl input[type="text"],
.bl input[type="search"],
.bl input[type="number"],
.bl input[type="url"],
.bl select,
.bl textarea {
border: 1px solid var(--bl-line);
border-radius: 3px;
padding: 3px 6px;
font-size: 12px;
background: #fff;
color: var(--bl-text);
}
.bl input:focus, .bl select:focus, .bl textarea:focus {
outline: 0;
border-color: var(--bl-blue);
box-shadow: 0 0 0 2px rgba(30, 107, 168, .15);
}
.bl label.fld { display: block; font-size: 11px; font-weight: 700;
color: var(--bl-muted); text-transform: uppercase;
letter-spacing: .3px; margin-bottom: 2px; }
.bl .bl-filters { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; }
/* -------------------------------------------------------------- stats */
.bl-stats { display: flex; flex-wrap: wrap; gap: 0; }
.bl-stat {
flex: 1 1 110px;
padding: 8px 10px;
border-right: 1px solid var(--bl-line-soft);
}
.bl-stat:last-child { border-right: 0; }
.bl-stat .v { font-size: 18px; font-weight: 700; color: var(--bl-navy);
font-variant-numeric: tabular-nums; line-height: 1.1; }
.bl-stat .k { font-size: 10.5px; text-transform: uppercase; letter-spacing: .4px;
color: var(--bl-muted); font-weight: 600; }
/* ----------------------------------------------------------- progress */
.bl-progress {
height: 16px;
background: #dde5ec;
border: 1px solid var(--bl-line);
border-radius: 3px;
overflow: hidden;
}
.bl-progress > span {
display: block;
height: 100%;
background: linear-gradient(180deg, #43a3e0 0%, var(--bl-blue) 100%);
width: 0;
transition: width .4s ease;
}
/* -------------------------------------------------------------- misc */
.bl-tag {
display: inline-block;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .3px;
padding: 1px 5px;
border-radius: 2px;
background: #dde5ec;
color: var(--bl-navy);
}
.bl-tag.ok { background: #d6f0da; color: #1d6b2c; }
.bl-tag.warn { background: #fdeccc; color: #8a5a00; }
.bl-tag.err { background: #f8d7da; color: #8a1c24; }
.bl-pager { display: flex; gap: 4px; align-items: center;
justify-content: center; padding: 8px; font-size: 12px; }
.bl-pager .bl-btn.on { background: var(--bl-navy); color: #fff;
border-color: var(--bl-navy-dark); }
.bl-empty { padding: 28px 12px; text-align: center; color: var(--bl-muted); }
.bl-tape-preview {
background: repeating-linear-gradient(45deg, #eef2f5, #eef2f5 8px,
#e4eaef 8px, #e4eaef 16px);
border: 1px solid var(--bl-line);
border-radius: 3px;
padding: 10px;
overflow-x: auto;
}
.bl-tape-preview img {
display: block;
background: #fff;
box-shadow: 0 1px 4px rgba(0,0,0,.25);
}
@media (max-width: 767px) {
.bl { font-size: 12px; }
.bl-tabs a { padding: 6px 9px; }
.bl-stat { flex-basis: 50%; }
}