미디어위키:Test.css: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
 
(같은 사용자의 중간 판 31개는 보이지 않습니다)
2번째 줄: 2번째 줄:
COASTLINE: BLACK ICE
COASTLINE: BLACK ICE
MediaWiki:Test.css
MediaWiki:Test.css
Sandbox-only style test
Sandbox main-page integration test
Dimension pass: spacing / height / alignment
Existing full portal body + SVG category nav from CategoryNav.js
========================================= */
========================================= */


/*
/*
Scope:
Scope:
- This file is globally imported.
- This file is globally imported while the test page is still active.
- Every visual rule is scoped to .stylelab.
- Every visual rule is scoped to .stylelab, except the bridge for nested .main-portal.
- No body, top-nav, sidebar, page shell, or global layout selectors.
- No body, top-nav, sidebar, page shell, or global layout selectors.
Current role:
- Test.css still owns the full test page layout: notice rail, logo, console, image feed, guestbook, tracker, status, footer.
- MainPage.css + CategoryNav.js own the SVG category navigation.
- This file only provides a bridge so the new JS/SVG category nav can sit inside the old test body without double padding or background.
Cleanup plan:
- After the full main page is migrated, these .stylelab rules should be renamed or moved into MainPage.css as .main-portal components.
- Then Test.css can be removed from Common.css import.
*/
*/


55번째 줄: 64번째 줄:
--space-tight:4px;
--space-tight:4px;
--pad-panel:8px;
--pad-panel:8px;
--pad-screen-x:18px;
--pad-screen-y:16px;


--title-h:24px;
--title-h:24px;
--data-title-h:22px;
--screen-title-h:22px;
--nav-h:30px;
--nav-h:30px;
--ticker-h:22px;
--ticker-h:22px;
88번째 줄: 95번째 줄:
.stylelab a:hover {
.stylelab a:hover {
color:#ffffff !important;
color:#ffffff !important;
text-decoration:underline !important;
text-decoration:none !important;
}
}


98번째 줄: 105번째 줄:


.stylelab .frame,
.stylelab .frame,
.stylelab .notice-rail,
.stylelab .lab-logo,
.stylelab .lab-logo,
.stylelab .directory,
.stylelab .console,
.stylelab .console,
.stylelab .panel,
.stylelab .panel,
156번째 줄: 163번째 줄:


/* -----------------------------------------
/* -----------------------------------------
2. Logo
2. Notice rail
Important notices above logo.
Maintenance alert uses construction stripe on the whole row.
Normal notice remains neutral.
----------------------------------------- */
 
.stylelab .notice-rail {
width:100%;
margin:0 0 var(--space-block);
background:#101010;
border:1px solid;
border-color:
#606060
var(--edge-side)
var(--edge-bottom)
var(--edge-side);
box-shadow:none;
}
 
.stylelab .notice-line {
position:relative;
display:grid;
grid-template-columns:72px 96px minmax(0,1fr) 48px;
align-items:center;
gap:7px;
min-height:30px;
padding:0 8px;
border-bottom:1px solid #050505;
background:#141414;
font-size:12px;
line-height:1.25;
color:#dcdcdc;
overflow:hidden;
}
 
.stylelab .notice-line:last-child {
border-bottom:none;
}
 
.stylelab .notice-line > * {
position:relative;
z-index:2;
}
 
.stylelab .notice-line:hover {
background:#1c1c1c;
color:#ffffff;
}
 
.stylelab .notice-line.is-alert {
background:
repeating-linear-gradient(
45deg,
var(--wip-yellow) 0 9px,
var(--wip-yellow) 9px 10px,
var(--wip-black) 10px 19px,
var(--wip-black) 19px 20px
);
}
 
.stylelab .notice-line.is-alert::before {
content:"";
position:absolute;
inset:0;
z-index:1;
pointer-events:none;
background:rgba(0,0,0,0.42);
}
 
.stylelab .notice-line.is-alert:hover::before {
background:rgba(0,0,0,0.34);
}
 
.stylelab .notice-line.is-notice {
background:#141414;
}
 
.stylelab .notice-line.is-notice:hover {
background:#1c1c1c;
}
 
.stylelab .notice-badge {
display:inline-flex;
align-items:center;
justify-content:center;
height:20px;
padding:0 7px;
border:1px solid #444444;
background:#0b0b0b;
color:#d8d8d8;
font-size:10px;
font-weight:700;
line-height:1;
text-shadow:1px 1px 0 #000;
}
 
.stylelab .notice-line.is-alert .notice-badge,
.stylelab .notice-line.is-notice .notice-badge {
border-color:#505050;
background:#101010;
color:#eeeeee;
}
 
.stylelab .notice-date {
color:#9d9d9d;
white-space:nowrap;
font-size:10px;
font-family:Consolas, Monaco, monospace !important;
}
 
.stylelab .notice-text {
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
color:#e0e0e0;
font-size:12px;
font-weight:700;
}
 
.stylelab .notice-line.is-alert .notice-badge,
.stylelab .notice-line.is-alert .notice-date,
.stylelab .notice-line.is-alert .notice-text,
.stylelab .notice-line.is-alert .notice-action {
text-shadow:
-1px 0 0 #000,
1px 0 0 #000,
0 -1px 0 #000,
0 1px 0 #000,
-1px -1px 0 #000,
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000;
}
 
.stylelab .notice-line:hover .notice-text {
color:#ffffff;
}
 
.stylelab .notice-action {
justify-self:end;
display:inline-flex;
align-items:center;
justify-content:center;
height:20px;
min-width:38px;
padding:0 5px;
border:1px solid #3a3a3a;
background:#0b0b0b;
color:#c8c8c8;
font-size:10px;
font-weight:700;
white-space:nowrap;
line-height:1;
}
 
.stylelab .notice-line:hover .notice-action {
border-color:#606060;
background:#181818;
color:#ffffff;
}
 
/* -----------------------------------------
3. Top logo
Site signboard. Placed before category navigation and content.
----------------------------------------- */
----------------------------------------- */


166번째 줄: 337번째 줄:
text-align:center;
text-align:center;
line-height:0;
line-height:0;
background:#0b0b0b;
}
}


176번째 줄: 348번째 줄:
.stylelab .lab-logo img,
.stylelab .lab-logo img,
.stylelab .lab-logo .mw-file-element {
.stylelab .lab-logo .mw-file-element {
width:720px;
width:760px;
max-width:88%;
max-width:90%;
height:auto;
height:auto;
filter:
filter:
186번째 줄: 358번째 줄:


/* -----------------------------------------
/* -----------------------------------------
3. Directory strip
4. Category navigation bridge
Test component only. Not a global navigation replacement.
----------------------------------------- */
----------------------------------------- */


.stylelab .directory {
/*
width:100%;
The actual category navigation is now generated by CategoryNav.js
height:var(--nav-h);
and styled by MainPage.css as SVG.
margin:0 0 var(--space-block) !important;
border-collapse:collapse !important;
table-layout:fixed !important;
}


.stylelab .directory tbody,
Why this bridge exists:
.stylelab .directory tr {
- The old full test body is still wrapped in .stylelab.
width:100%;
- MainPage.css expects a .main-portal wrapper.
height:var(--nav-h);
- If .main-portal keeps its own padding/background inside .stylelab, the category nav gets a double frame and the ratio feels different from the original body.
}


.stylelab .directory td {
So, inside .stylelab, .main-portal is treated as a transparent mount wrapper only.
height:var(--nav-h);
The SVG nav itself remains owned by MainPage.css.
margin:0 !important;
*/
padding:0 !important;
border:none !important;
border-right:1px solid var(--edge-bottom) !important;
background:var(--surface-frame-soft) !important;
vertical-align:middle !important;
text-align:center !important;
}


.stylelab .directory td:last-child {
.stylelab .main-portal {
border-right:none !important;
width:100%;
margin:0;
padding:0;
background:transparent;
font-size:11px;
line-height:1.5;
}
}


.stylelab .directory a {
.stylelab .main-portal [data-component="category-nav"] {
display:flex !important;
width:100%;
align-items:center !important;
margin:0 0 var(--space-block);
justify-content:center !important;
padding:0;
width:100% !important;
height:var(--nav-h) !important;
min-height:var(--nav-h) !important;
padding:0 6px !important;
color:var(--text-main) !important;
font-size:10px !important;
font-weight:700 !important;
line-height:1.2 !important;
text-align:center !important;
text-shadow:1px 1px 0 #000 !important;
}
 
.stylelab .directory td:hover,
.stylelab .directory td:hover a {
background:var(--surface-title-hover) !important;
color:#ffffff !important;
text-decoration:none !important;
}
}


/* -----------------------------------------
/* -----------------------------------------
4. Main console
5. Main console
Type: SCREEN DEVICE
Type: SCREEN DEVICE
frame > titlebar > body > screen panels
frame > titlebar > body > screen panels
284번째 줄: 431번째 줄:
position:absolute;
position:absolute;
inset:0;
inset:0;
z-index:1;
z-index:6;
pointer-events:none;
pointer-events:none;
background:
background:
305번째 줄: 452번째 줄:
position:absolute;
position:absolute;
inset:-40px 0;
inset:-40px 0;
z-index:2;
z-index:7;
pointer-events:none;
pointer-events:none;
opacity:0.13;
opacity:0.13;
326번째 줄: 473번째 줄:


.stylelab .main-screen {
.stylelab .main-screen {
min-height:264px;
min-height:392px;
padding:18px var(--pad-screen-x) var(--pad-screen-y);
padding:var(--pad-panel);
display:flex;
flex-direction:column;
justify-content:flex-start;
}
 
.stylelab .side-screen {
padding:var(--pad-panel);
display:flex;
display:flex;
flex-direction:column;
flex-direction:column;
justify-content:center;
}
}


.stylelab .main-screen h2 {
/* -----------------------------------------
margin:0 0 12px !important;
6. Image feed crossfade + alternating drift
Current image fades down, next layer becomes visible.
Image drift alternates: left-down / right-down.
----------------------------------------- */
 
.stylelab .image-feed {
position:relative;
width:100%;
height:240px;
min-height:240px;
overflow:hidden;
border:1px solid var(--edge-soft);
background:#030303;
isolation:isolate;
}
 
.stylelab .feed-layer {
position:absolute;
inset:-12px;
z-index:1;
opacity:0;
background-size:cover;
background-position:center center;
background-repeat:no-repeat;
filter:
brightness(0.78)
contrast(1.12)
saturate(0.78)
grayscale(0.16);
transform:translate(0,0) scale(1.06);
transform-origin:center center;
will-change:opacity, transform;
animation-duration:24s;
animation-timing-function:linear;
animation-iteration-count:infinite;
}
 
.stylelab .feed-bg-001 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-001.png');
}
 
.stylelab .feed-bg-002 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-002.png');
}
 
.stylelab .feed-bg-003 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-003.png');
}
 
.stylelab .feed-bg-004 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-004.png');
}
 
.stylelab .feed-layer-1 {
animation-name:image-feed-drift-left;
animation-delay:0s;
}
 
.stylelab .feed-layer-2 {
animation-name:image-feed-drift-right;
animation-delay:6s;
}
 
.stylelab .feed-layer-3 {
animation-name:image-feed-drift-left;
animation-delay:12s;
}
 
.stylelab .feed-layer-4 {
animation-name:image-feed-drift-right;
animation-delay:18s;
}
 
@keyframes image-feed-drift-left {
0% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
4.166% {
opacity:1;
transform:translate(0,0) scale(1.06);
}
25% {
opacity:1;
transform:translate(-22px,14px) scale(1.075);
}
29.166% {
opacity:0;
transform:translate(-26px,16px) scale(1.078);
}
100% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
}
 
@keyframes image-feed-drift-right {
0% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
4.166% {
opacity:1;
transform:translate(0,0) scale(1.06);
}
25% {
opacity:1;
transform:translate(22px,14px) scale(1.075);
}
29.166% {
opacity:0;
transform:translate(26px,16px) scale(1.078);
}
100% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
}
 
.stylelab .image-feed::before {
content:"";
position:absolute;
inset:0;
z-index:5;
pointer-events:none;
background:
linear-gradient(
to bottom,
rgba(0,0,0,0.18) 0%,
transparent 22%,
transparent 74%,
rgba(0,0,0,0.30) 100%
),
linear-gradient(
to right,
rgba(0,0,0,0.22) 0%,
transparent 10%,
transparent 90%,
rgba(0,0,0,0.22) 100%
);
}
 
.stylelab .image-feed::after {
content:"";
position:absolute;
inset:-40px 0;
z-index:6;
pointer-events:none;
opacity:0.20;
background:
repeating-linear-gradient(
to bottom,
rgba(255,255,255,0.090) 0px,
rgba(255,255,255,0.090) 1px,
transparent 2px,
transparent 5px
);
mix-blend-mode:screen;
}
 
.stylelab .feed-caption {
position:absolute;
left:0;
right:0;
bottom:0;
z-index:8;
height:22px;
padding:0 7px;
display:flex;
align-items:center;
justify-content:space-between;
gap:8px;
border-top:1px solid rgba(255,255,255,0.09);
background:rgba(5,5,5,0.86);
color:#cfcfcf;
font-size:10px;
line-height:22px;
text-shadow:1px 1px 0 #000;
}
 
.stylelab .feed-caption span:first-child {
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
 
.stylelab .feed-caption span:last-child {
flex:0 0 auto;
color:var(--text-dim);
}
 
/* -----------------------------------------
7. Statement plate below image feed
----------------------------------------- */
 
.stylelab .statement-plate {
margin:var(--space-inner) 0 0;
padding:13px 18px 12px;
border:1px solid var(--edge-soft);
background:#080808;
}
 
.stylelab .statement-plate h2 {
margin:0 0 10px !important;
padding:0 0 8px !important;
padding:0 0 8px !important;
border-bottom:1px solid var(--edge-soft) !important;
border-bottom:1px solid var(--edge-soft) !important;
color:#f4f4f4 !important;
color:#f4f4f4 !important;
font-size:22px !important;
font-size:20px !important;
line-height:1.25 !important;
line-height:1.25 !important;
text-align:center !important;
text-align:center !important;
346번째 줄: 703번째 줄:
}
}


.stylelab .main-screen p {
.stylelab .statement-plate p {
max-width:800px;
max-width:820px;
margin:0 auto 10px;
margin:0 auto 9px;
color:#d8d8d8;
color:#d8d8d8;
font-size:12px;
font-size:12px;
line-height:1.72;
line-height:1.68;
text-align:center;
text-align:center;
text-shadow:1px 1px 0 #000;
text-shadow:1px 1px 0 #000;
}
}


.stylelab .main-screen p:last-child {
.stylelab .statement-plate p:last-child {
margin-bottom:0;
margin-bottom:0;
}
.stylelab .side-screen {
padding:var(--pad-panel);
display:flex;
flex-direction:column;
}
}


/* -----------------------------------------
/* -----------------------------------------
5. Screen subcomponents
8. Screen guestbook
Only used inside SCREEN DEVICE.
Top-right body content module.
Dummy only. Final interactive function later.
----------------------------------------- */
----------------------------------------- */


.stylelab .data-title {
.stylelab .screen-title {
height:var(--data-title-h);
height:var(--screen-title-h);
min-height:var(--data-title-h);
min-height:var(--screen-title-h);
margin:0 0 var(--space-inner);
margin:0 0 var(--space-inner);
padding:0 7px;
padding:0 7px;
display:flex;
display:flex;
align-items:center;
align-items:center;
justify-content:space-between;
gap:6px;
border:1px solid var(--edge-soft);
border:1px solid var(--edge-soft);
background:#151515;
background:#151515;
387번째 줄: 741번째 줄:
}
}


.stylelab .data-table {
.stylelab .screen-title span:last-child {
width:100%;
color:var(--text-dim);
margin:0;
font-size:9px;
border-collapse:collapse;
}
table-layout:fixed;
 
.stylelab .guestbook-device {
flex:1 1 auto;
min-height:0;
display:flex;
flex-direction:column;
gap:var(--space-inner);
}
 
.stylelab .guestbook-messages {
flex:1 1 auto;
min-height:0;
border-top:1px solid var(--edge-soft);
border-bottom:1px solid var(--edge-soft);
overflow:hidden;
}
 
.stylelab .guestbook-message {
padding:6px 2px;
border-bottom:1px solid var(--edge-soft);
}
 
.stylelab .guestbook-message:last-child {
border-bottom:none;
}
 
.stylelab .guestbook-message:hover {
background:#111111;
}
 
.stylelab .guestbook-message-head {
display:flex;
align-items:center;
justify-content:space-between;
gap:6px;
margin-bottom:3px;
font-size:9px;
line-height:1.2;
}
 
.stylelab .guestbook-name {
color:#eeeeee;
font-weight:700;
white-space:nowrap;
}
 
.stylelab .guestbook-time {
color:var(--text-dim);
white-space:nowrap;
}
 
.stylelab .guestbook-text {
color:var(--text-soft);
font-size:10px;
line-height:1.45;
word-break:keep-all;
}
 
.stylelab .guestbook-form {
display:grid;
grid-template-columns:minmax(0,1fr) 48px;
gap:var(--space-tight);
}
 
.stylelab .guestbook-input {
height:24px;
padding:0 7px;
display:flex;
align-items:center;
border:1px solid var(--edge-soft);
background:#070707;
color:var(--text-faint);
font-size:10px;
font-size:10px;
line-height:1;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
.stylelab .guestbook-input:hover {
background:#0c0c0c;
color:#8f8f8f;
}
}


.stylelab .data-table td {
.stylelab .guestbook-submit {
height:24px;
height:24px;
padding:0 6px;
display:flex;
align-items:center;
justify-content:center;
border:1px solid var(--edge-soft);
border:1px solid var(--edge-soft);
background:#111;
background:#161616;
color:var(--text-soft);
color:var(--text-soft);
vertical-align:middle;
font-size:9px;
line-height:1.25;
font-weight:700;
line-height:1;
text-shadow:1px 1px 0 #000;
}
}


.stylelab .data-table td:first-child {
.stylelab .guestbook-submit:hover {
width:72px;
background:#222222;
color:var(--text-dim);
color:#ffffff;
background:#0b0b0b;
}
}


/* -----------------------------------------
/* -----------------------------------------
6. Ticker
9. Ticker
Type: RECORD STRIP
Type: RECORD STRIP
Not a screen device.
Not a screen device.
432번째 줄: 869번째 줄:


/* -----------------------------------------
/* -----------------------------------------
7. Module grid
10. Module grid
----------------------------------------- */
----------------------------------------- */


.stylelab .module-grid {
.stylelab .module-grid {
display:grid;
display:grid;
grid-template-columns:minmax(0,1fr) minmax(0,1fr) 250px 250px;
grid-template-columns:minmax(0,1fr) minmax(0,1fr) 280px;
gap:var(--space-inner);
gap:var(--space-inner);
align-items:stretch;
align-items:stretch;
459번째 줄: 896번째 줄:


/* -----------------------------------------
/* -----------------------------------------
8. Record modules
11. Record modules
No scanlines. No screen treatment.
No scanlines. No screen treatment.
----------------------------------------- */
----------------------------------------- */
485번째 줄: 922번째 줄:
.stylelab .record-list li:first-child {
.stylelab .record-list li:first-child {
border-top:1px solid var(--edge-soft);
border-top:1px solid var(--edge-soft);
}
.stylelab .record-list li:hover {
background:#151515;
color:#ffffff;
}
}


499번째 줄: 941번째 줄:
font-size:9px;
font-size:9px;
line-height:1;
line-height:1;
}
.stylelab .record-list li:hover .meta {
color:#c0c0c0;
}
}


/* -----------------------------------------
/* -----------------------------------------
9. Status tags
12. Status tags
Small functional color only.
Small functional color only.
No structural color use.
No structural color use.
524번째 줄: 970번째 줄:
.stylelab .status-tag.is-progress {
.stylelab .status-tag.is-progress {
border-color:#6d5b2c;
border-color:#6d5b2c;
color:#d3bb72;
background:#19170f;
background:#19170f;
}
}
530번째 줄: 975번째 줄:
.stylelab .status-tag.is-review {
.stylelab .status-tag.is-review {
border-color:#36515d;
border-color:#36515d;
color:#8bb6c6;
background:#10171a;
background:#10171a;
}
}
536번째 줄: 980번째 줄:
.stylelab .status-tag.is-wait {
.stylelab .status-tag.is-wait {
border-color:#484848;
border-color:#484848;
color:#a4a4a4;
background:#151515;
background:#151515;
}
}
542번째 줄: 985번째 줄:
.stylelab .status-tag.is-done {
.stylelab .status-tag.is-done {
border-color:#3d5c38;
border-color:#3d5c38;
color:#9fbe96;
background:#111811;
background:#111811;
}
}
548번째 줄: 990번째 줄:
.stylelab .status-tag.is-alert {
.stylelab .status-tag.is-alert {
border-color:#6a3933;
border-color:#6a3933;
color:#d48679;
background:#1b1110;
background:#1b1110;
}
}


/* -----------------------------------------
/* -----------------------------------------
10. Team work module
13. Team work module
Use WIP construction motif only where the making team is foregrounded.
Use WIP construction motif only where the making team is foregrounded.
Only motif: left vertical construction rail.
Only motif: left vertical construction rail.
587번째 줄: 1,028번째 줄:


/* -----------------------------------------
/* -----------------------------------------
11. Status instrument
14. Status instrument
Type: STATUS INSTRUMENT
Type: STATUS INSTRUMENT
No scanlines. Gauge cells may have recessed finish.
No scanlines. Gauge cells may have recessed finish.
613번째 줄: 1,054번째 줄:
inset 0 1px 0 rgba(255,255,255,0.025),
inset 0 1px 0 rgba(255,255,255,0.025),
inset 0 -1px 0 rgba(0,0,0,0.55);
inset 0 -1px 0 rgba(0,0,0,0.55);
}
.stylelab .gauge:hover {
background:#0d0d0d;
}
}


652번째 줄: 1,097번째 줄:
.stylelab .instrument-line:last-child {
.stylelab .instrument-line:last-child {
border-bottom:none;
border-bottom:none;
}
.stylelab .instrument-line:hover {
background:#151515;
}
}


664번째 줄: 1,113번째 줄:
overflow:hidden;
overflow:hidden;
text-overflow:ellipsis;
text-overflow:ellipsis;
}
.stylelab .instrument-line:hover .instrument-value {
color:#ffffff;
}
}


/* -----------------------------------------
/* -----------------------------------------
12. Guestbook
15. Footer split
Type: RECORD MODULE
Left: style rule check
Separate from ARCHIVE STATUS.
Right: policy / license / credits / socials
----------------------------------------- */
----------------------------------------- */


.stylelab .guest-lines {
.stylelab .footer-grid {
border-top:1px solid var(--edge-soft);
display:grid;
border-bottom:1px solid var(--edge-soft);
grid-template-columns:minmax(0,1fr) 300px;
gap:var(--space-inner);
margin-top:var(--space-inner);
align-items:stretch;
}
}


.stylelab .guest-line {
.stylelab .footer-grid .panel {
min-height:22px;
height:100%;
padding:4px 2px;
display:flex;
align-items:center;
border-bottom:1px solid var(--edge-soft);
font-size:10px;
line-height:1.35;
color:var(--text-soft);
}
}
.stylelab .guest-line:last-child {
border-bottom:none;
}
.stylelab .guest-name {
color:#eeeeee;
font-weight:700;
margin-right:4px;
}
/* -----------------------------------------
13. Manual samples
Type: RECORD MODULE
----------------------------------------- */


.stylelab .manual-panel {
.stylelab .manual-panel {
margin-top:var(--space-inner);
margin-top:0;
}
}


719번째 줄: 1,153번째 줄:
.stylelab .sample-row:first-child {
.stylelab .sample-row:first-child {
border-top:1px solid var(--edge-soft);
border-top:1px solid var(--edge-soft);
}
.stylelab .sample-row:hover {
background:#151515;
}
}


731번째 줄: 1,169번째 줄:
font-size:10px;
font-size:10px;
line-height:1.35;
line-height:1.35;
}
.stylelab .sample-row:hover .sample-value {
color:#ffffff;
}
.stylelab .policy-list {
border-top:1px solid var(--edge-soft);
border-bottom:1px solid var(--edge-soft);
}
.stylelab .policy-row {
display:grid;
grid-template-columns:minmax(0,1fr) 18px;
align-items:center;
gap:var(--space-inner);
height:24px;
padding:0 2px;
border-bottom:1px solid var(--edge-soft);
font-size:10px;
line-height:1.2;
}
.stylelab .policy-row:last-child {
border-bottom:none;
}
.stylelab .policy-row:hover {
background:#151515;
}
.stylelab .policy-row a {
display:block;
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
color:var(--text-soft) !important;
}
.stylelab .policy-row:hover a {
color:#ffffff !important;
text-decoration:none !important;
}
.stylelab .policy-mark {
color:var(--text-dim);
font-size:14px;
line-height:1;
white-space:nowrap;
text-align:right;
}
.stylelab .policy-row:hover .policy-mark {
color:#ffffff;
}
.stylelab .social-strip {
display:grid;
grid-template-columns:repeat(4,1fr);
gap:var(--space-tight);
margin-top:var(--space-inner);
}
.stylelab .social-icon {
display:block;
height:26px;
min-width:0;
}
.stylelab .social-icon a {
display:flex !important;
align-items:center !important;
justify-content:center !important;
width:100% !important;
height:26px !important;
border:1px solid var(--edge-soft) !important;
background:#111111 !important;
color:var(--text-soft) !important;
font-size:10px !important;
font-weight:700 !important;
line-height:1 !important;
text-decoration:none !important;
text-shadow:1px 1px 0 #000 !important;
box-sizing:border-box !important;
}
.stylelab .social-icon a:hover {
background:#1c1c1c !important;
color:#ffffff !important;
border-color:#3a3a3a !important;
text-decoration:none !important;
}
}


/* -----------------------------------------
/* -----------------------------------------
14. Responsive
16. Responsive
----------------------------------------- */
----------------------------------------- */


740번째 줄: 1,270번째 줄:
.stylelab .module-grid {
.stylelab .module-grid {
grid-template-columns:minmax(0,1fr) minmax(0,1fr);
grid-template-columns:minmax(0,1fr) minmax(0,1fr);
}
.stylelab .footer-grid {
grid-template-columns:minmax(0,1fr);
}
}
}
}
752번째 줄: 1,286번째 줄:
}
}


.stylelab .directory {
.stylelab .notice-line {
height:auto;
grid-template-columns:62px minmax(0,1fr);
table-layout:auto !important;
min-height:32px;
}
 
.stylelab .directory,
.stylelab .directory tbody,
.stylelab .directory tr,
.stylelab .directory td {
display:block !important;
width:100% !important;
height:auto !important;
}
 
.stylelab .directory td {
border-right:none !important;
border-bottom:1px solid var(--edge-bottom) !important;
}
 
.stylelab .directory td:last-child {
border-bottom:none !important;
}
}


.stylelab .directory a {
.stylelab .notice-date,
height:var(--nav-h) !important;
.stylelab .notice-action {
display:none;
}
}
}
}

2026년 5월 19일 (화) 08:31 기준 최신판

/* =========================================
COASTLINE: BLACK ICE
MediaWiki:Test.css
Sandbox main-page integration test
Existing full portal body + SVG category nav from CategoryNav.js
========================================= */

/*
Scope:
- This file is globally imported while the test page is still active.
- Every visual rule is scoped to .stylelab, except the bridge for nested .main-portal.
- No body, top-nav, sidebar, page shell, or global layout selectors.

Current role:
- Test.css still owns the full test page layout: notice rail, logo, console, image feed, guestbook, tracker, status, footer.
- MainPage.css + CategoryNav.js own the SVG category navigation.
- This file only provides a bridge so the new JS/SVG category nav can sit inside the old test body without double padding or background.

Cleanup plan:
- After the full main page is migrated, these .stylelab rules should be renamed or moved into MainPage.css as .main-portal components.
- Then Test.css can be removed from Common.css import.
*/

/* -----------------------------------------
0. Style tokens
----------------------------------------- */

.stylelab {
--surface-page:#070707;
--surface-frame:#101010;
--surface-frame-soft:#141414;
--surface-title:#1d1d1d;
--surface-title-hover:#252525;
--surface-well:#080808;
--surface-screen:#060606;
--surface-row:#121212;
--surface-row-alt:#151515;
--surface-inset:#070707;

--edge-top:#555555;
--edge-side:#2b2b2b;
--edge-bottom:#050505;
--edge-soft:#202020;
--edge-mid:#333333;
--edge-weak:#181818;

--text-main:#e2e2e2;
--text-soft:#c8c8c8;
--text-dim:#8a8a8a;
--text-faint:#626262;

--signal-blue:#6f8fa8;
--signal-teal:#5a9b92;
--signal-green:#78966c;
--signal-amber:#c4a04a;
--signal-red:#a85c50;
--signal-gray:#9a9a9a;

--wip-yellow:#f2c300;
--wip-black:#050505;

--space-block:8px;
--space-inner:6px;
--space-tight:4px;
--pad-panel:8px;

--title-h:24px;
--screen-title-h:22px;
--nav-h:30px;
--ticker-h:22px;
--row-h:23px;
--gauge-h:48px;

width:100%;
margin:0 auto;
padding:var(--space-block);
color:var(--text-main);
background:var(--surface-page);
font-size:11px;
line-height:1.5;
box-sizing:border-box;
}

.stylelab *,
.stylelab *::before,
.stylelab *::after {
box-sizing:border-box;
}

.stylelab a {
color:var(--text-main) !important;
text-decoration:none !important;
}

.stylelab a:hover {
color:#ffffff !important;
text-decoration:none !important;
}

/* -----------------------------------------
1. Frame system
North-light rule:
top bright / sides neutral / bottom dark
----------------------------------------- */

.stylelab .frame,
.stylelab .notice-rail,
.stylelab .lab-logo,
.stylelab .console,
.stylelab .panel,
.stylelab .instrument-panel,
.stylelab .ticker {
border:1px solid;
border-color:
var(--edge-top)
var(--edge-side)
var(--edge-bottom)
var(--edge-side);
background:var(--surface-frame);
border-radius:0;
box-shadow:none;
outline:none;
overflow:hidden;
}

.stylelab .titlebar {
position:relative;
height:var(--title-h);
min-height:var(--title-h);
padding:0 var(--pad-panel);
display:flex;
align-items:center;
justify-content:space-between;
gap:var(--space-block);
background:var(--surface-title);
border-bottom:1px solid var(--edge-bottom);
color:#f0f0f0;
font-size:10px;
font-weight:700;
line-height:1;
white-space:nowrap;
overflow:hidden;
text-shadow:1px 1px 0 #000;
}

.stylelab .titlebar > span {
display:block;
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
}

.stylelab .titlebar > span:first-child {
flex:1 1 auto;
}

.stylelab .titlebar > span:last-child {
flex:0 0 auto;
color:#a8a8a8;
font-weight:700;
text-align:right;
}

/* -----------------------------------------
2. Notice rail
Important notices above logo.
Maintenance alert uses construction stripe on the whole row.
Normal notice remains neutral.
----------------------------------------- */

.stylelab .notice-rail {
width:100%;
margin:0 0 var(--space-block);
background:#101010;
border:1px solid;
border-color:
#606060
var(--edge-side)
var(--edge-bottom)
var(--edge-side);
box-shadow:none;
}

.stylelab .notice-line {
position:relative;
display:grid;
grid-template-columns:72px 96px minmax(0,1fr) 48px;
align-items:center;
gap:7px;
min-height:30px;
padding:0 8px;
border-bottom:1px solid #050505;
background:#141414;
font-size:12px;
line-height:1.25;
color:#dcdcdc;
overflow:hidden;
}

.stylelab .notice-line:last-child {
border-bottom:none;
}

.stylelab .notice-line > * {
position:relative;
z-index:2;
}

.stylelab .notice-line:hover {
background:#1c1c1c;
color:#ffffff;
}

.stylelab .notice-line.is-alert {
background:
repeating-linear-gradient(
45deg,
var(--wip-yellow) 0 9px,
var(--wip-yellow) 9px 10px,
var(--wip-black) 10px 19px,
var(--wip-black) 19px 20px
);
}

.stylelab .notice-line.is-alert::before {
content:"";
position:absolute;
inset:0;
z-index:1;
pointer-events:none;
background:rgba(0,0,0,0.42);
}

.stylelab .notice-line.is-alert:hover::before {
background:rgba(0,0,0,0.34);
}

.stylelab .notice-line.is-notice {
background:#141414;
}

.stylelab .notice-line.is-notice:hover {
background:#1c1c1c;
}

.stylelab .notice-badge {
display:inline-flex;
align-items:center;
justify-content:center;
height:20px;
padding:0 7px;
border:1px solid #444444;
background:#0b0b0b;
color:#d8d8d8;
font-size:10px;
font-weight:700;
line-height:1;
text-shadow:1px 1px 0 #000;
}

.stylelab .notice-line.is-alert .notice-badge,
.stylelab .notice-line.is-notice .notice-badge {
border-color:#505050;
background:#101010;
color:#eeeeee;
}

.stylelab .notice-date {
color:#9d9d9d;
white-space:nowrap;
font-size:10px;
font-family:Consolas, Monaco, monospace !important;
}

.stylelab .notice-text {
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
color:#e0e0e0;
font-size:12px;
font-weight:700;
}

.stylelab .notice-line.is-alert .notice-badge,
.stylelab .notice-line.is-alert .notice-date,
.stylelab .notice-line.is-alert .notice-text,
.stylelab .notice-line.is-alert .notice-action {
text-shadow:
-1px 0 0 #000,
1px 0 0 #000,
0 -1px 0 #000,
0 1px 0 #000,
-1px -1px 0 #000,
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000;
}

.stylelab .notice-line:hover .notice-text {
color:#ffffff;
}

.stylelab .notice-action {
justify-self:end;
display:inline-flex;
align-items:center;
justify-content:center;
height:20px;
min-width:38px;
padding:0 5px;
border:1px solid #3a3a3a;
background:#0b0b0b;
color:#c8c8c8;
font-size:10px;
font-weight:700;
white-space:nowrap;
line-height:1;
}

.stylelab .notice-line:hover .notice-action {
border-color:#606060;
background:#181818;
color:#ffffff;
}

/* -----------------------------------------
3. Top logo
Site signboard. Placed before category navigation and content.
----------------------------------------- */

.stylelab .lab-logo {
width:100%;
height:auto;
margin:0 0 var(--space-block);
padding:10px 0 8px;
text-align:center;
line-height:0;
background:#0b0b0b;
}

.stylelab .lab-logo a,
.stylelab .lab-logo .mw-file-description {
display:inline-block;
line-height:0;
}

.stylelab .lab-logo img,
.stylelab .lab-logo .mw-file-element {
width:760px;
max-width:90%;
height:auto;
filter:
grayscale(1)
contrast(1.04)
brightness(1.02);
}

/* -----------------------------------------
4. Category navigation bridge
----------------------------------------- */

/*
The actual category navigation is now generated by CategoryNav.js
and styled by MainPage.css as SVG.

Why this bridge exists:
- The old full test body is still wrapped in .stylelab.
- MainPage.css expects a .main-portal wrapper.
- If .main-portal keeps its own padding/background inside .stylelab, the category nav gets a double frame and the ratio feels different from the original body.

So, inside .stylelab, .main-portal is treated as a transparent mount wrapper only.
The SVG nav itself remains owned by MainPage.css.
*/

.stylelab .main-portal {
width:100%;
margin:0;
padding:0;
background:transparent;
font-size:11px;
line-height:1.5;
}

.stylelab .main-portal [data-component="category-nav"] {
width:100%;
margin:0 0 var(--space-block);
padding:0;
}

/* -----------------------------------------
5. Main console
Type: SCREEN DEVICE
frame > titlebar > body > screen panels
----------------------------------------- */

.stylelab .console {
width:100%;
margin:0 0 var(--space-block);
padding:0;
}

.stylelab .console-body {
padding:var(--space-inner);
background:var(--surface-frame);
}

.stylelab .console-grid {
display:grid;
grid-template-columns:minmax(0,1fr) 260px;
gap:var(--space-inner);
align-items:stretch;
}

.stylelab .main-screen,
.stylelab .side-screen {
position:relative;
min-width:0;
height:100%;
overflow:hidden;
border:1px solid var(--edge-soft);
background:var(--surface-screen);
box-shadow:
inset 0 0 0 1px rgba(255,255,255,0.018),
inset 0 0 18px rgba(0,0,0,0.70);
}

.stylelab .main-screen::before,
.stylelab .side-screen::before {
content:"";
position:absolute;
inset:0;
z-index:6;
pointer-events:none;
background:
radial-gradient(
ellipse at 50% 42%,
rgba(255,255,255,0.030) 0%,
transparent 42%
),
linear-gradient(
to bottom,
rgba(255,255,255,0.030) 0%,
transparent 24%,
rgba(0,0,0,0.16) 100%
);
}

.stylelab .main-screen::after,
.stylelab .side-screen::after {
content:"";
position:absolute;
inset:-40px 0;
z-index:7;
pointer-events:none;
opacity:0.13;
background:
repeating-linear-gradient(
to bottom,
rgba(255,255,255,0.080) 0px,
rgba(255,255,255,0.080) 1px,
transparent 2px,
transparent 5px
);
mix-blend-mode:screen;
}

.stylelab .main-screen > *,
.stylelab .side-screen > * {
position:relative;
z-index:3;
}

.stylelab .main-screen {
min-height:392px;
padding:var(--pad-panel);
display:flex;
flex-direction:column;
justify-content:flex-start;
}

.stylelab .side-screen {
padding:var(--pad-panel);
display:flex;
flex-direction:column;
}

/* -----------------------------------------
6. Image feed crossfade + alternating drift
Current image fades down, next layer becomes visible.
Image drift alternates: left-down / right-down.
----------------------------------------- */

.stylelab .image-feed {
position:relative;
width:100%;
height:240px;
min-height:240px;
overflow:hidden;
border:1px solid var(--edge-soft);
background:#030303;
isolation:isolate;
}

.stylelab .feed-layer {
position:absolute;
inset:-12px;
z-index:1;
opacity:0;
background-size:cover;
background-position:center center;
background-repeat:no-repeat;
filter:
brightness(0.78)
contrast(1.12)
saturate(0.78)
grayscale(0.16);
transform:translate(0,0) scale(1.06);
transform-origin:center center;
will-change:opacity, transform;
animation-duration:24s;
animation-timing-function:linear;
animation-iteration-count:infinite;
}

.stylelab .feed-bg-001 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-001.png');
}

.stylelab .feed-bg-002 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-002.png');
}

.stylelab .feed-bg-003 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-003.png');
}

.stylelab .feed-bg-004 {
background-image:url('/index.php?title=특수:Redirect/file/Bg-Feed-004.png');
}

.stylelab .feed-layer-1 {
animation-name:image-feed-drift-left;
animation-delay:0s;
}

.stylelab .feed-layer-2 {
animation-name:image-feed-drift-right;
animation-delay:6s;
}

.stylelab .feed-layer-3 {
animation-name:image-feed-drift-left;
animation-delay:12s;
}

.stylelab .feed-layer-4 {
animation-name:image-feed-drift-right;
animation-delay:18s;
}

@keyframes image-feed-drift-left {
0% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
4.166% {
opacity:1;
transform:translate(0,0) scale(1.06);
}
25% {
opacity:1;
transform:translate(-22px,14px) scale(1.075);
}
29.166% {
opacity:0;
transform:translate(-26px,16px) scale(1.078);
}
100% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
}

@keyframes image-feed-drift-right {
0% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
4.166% {
opacity:1;
transform:translate(0,0) scale(1.06);
}
25% {
opacity:1;
transform:translate(22px,14px) scale(1.075);
}
29.166% {
opacity:0;
transform:translate(26px,16px) scale(1.078);
}
100% {
opacity:0;
transform:translate(0,0) scale(1.06);
}
}

.stylelab .image-feed::before {
content:"";
position:absolute;
inset:0;
z-index:5;
pointer-events:none;
background:
linear-gradient(
to bottom,
rgba(0,0,0,0.18) 0%,
transparent 22%,
transparent 74%,
rgba(0,0,0,0.30) 100%
),
linear-gradient(
to right,
rgba(0,0,0,0.22) 0%,
transparent 10%,
transparent 90%,
rgba(0,0,0,0.22) 100%
);
}

.stylelab .image-feed::after {
content:"";
position:absolute;
inset:-40px 0;
z-index:6;
pointer-events:none;
opacity:0.20;
background:
repeating-linear-gradient(
to bottom,
rgba(255,255,255,0.090) 0px,
rgba(255,255,255,0.090) 1px,
transparent 2px,
transparent 5px
);
mix-blend-mode:screen;
}

.stylelab .feed-caption {
position:absolute;
left:0;
right:0;
bottom:0;
z-index:8;
height:22px;
padding:0 7px;
display:flex;
align-items:center;
justify-content:space-between;
gap:8px;
border-top:1px solid rgba(255,255,255,0.09);
background:rgba(5,5,5,0.86);
color:#cfcfcf;
font-size:10px;
line-height:22px;
text-shadow:1px 1px 0 #000;
}

.stylelab .feed-caption span:first-child {
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}

.stylelab .feed-caption span:last-child {
flex:0 0 auto;
color:var(--text-dim);
}

/* -----------------------------------------
7. Statement plate below image feed
----------------------------------------- */

.stylelab .statement-plate {
margin:var(--space-inner) 0 0;
padding:13px 18px 12px;
border:1px solid var(--edge-soft);
background:#080808;
}

.stylelab .statement-plate h2 {
margin:0 0 10px !important;
padding:0 0 8px !important;
border-bottom:1px solid var(--edge-soft) !important;
color:#f4f4f4 !important;
font-size:20px !important;
line-height:1.25 !important;
text-align:center !important;
text-shadow:
1px 1px 0 #000,
0 0 4px rgba(255,255,255,0.10) !important;
}

.stylelab .statement-plate p {
max-width:820px;
margin:0 auto 9px;
color:#d8d8d8;
font-size:12px;
line-height:1.68;
text-align:center;
text-shadow:1px 1px 0 #000;
}

.stylelab .statement-plate p:last-child {
margin-bottom:0;
}

/* -----------------------------------------
8. Screen guestbook
Top-right body content module.
Dummy only. Final interactive function later.
----------------------------------------- */

.stylelab .screen-title {
height:var(--screen-title-h);
min-height:var(--screen-title-h);
margin:0 0 var(--space-inner);
padding:0 7px;
display:flex;
align-items:center;
justify-content:space-between;
gap:6px;
border:1px solid var(--edge-soft);
background:#151515;
color:#f0f0f0;
font-size:10px;
font-weight:700;
line-height:1;
text-shadow:1px 1px 0 #000;
}

.stylelab .screen-title span:last-child {
color:var(--text-dim);
font-size:9px;
}

.stylelab .guestbook-device {
flex:1 1 auto;
min-height:0;
display:flex;
flex-direction:column;
gap:var(--space-inner);
}

.stylelab .guestbook-messages {
flex:1 1 auto;
min-height:0;
border-top:1px solid var(--edge-soft);
border-bottom:1px solid var(--edge-soft);
overflow:hidden;
}

.stylelab .guestbook-message {
padding:6px 2px;
border-bottom:1px solid var(--edge-soft);
}

.stylelab .guestbook-message:last-child {
border-bottom:none;
}

.stylelab .guestbook-message:hover {
background:#111111;
}

.stylelab .guestbook-message-head {
display:flex;
align-items:center;
justify-content:space-between;
gap:6px;
margin-bottom:3px;
font-size:9px;
line-height:1.2;
}

.stylelab .guestbook-name {
color:#eeeeee;
font-weight:700;
white-space:nowrap;
}

.stylelab .guestbook-time {
color:var(--text-dim);
white-space:nowrap;
}

.stylelab .guestbook-text {
color:var(--text-soft);
font-size:10px;
line-height:1.45;
word-break:keep-all;
}

.stylelab .guestbook-form {
display:grid;
grid-template-columns:minmax(0,1fr) 48px;
gap:var(--space-tight);
}

.stylelab .guestbook-input {
height:24px;
padding:0 7px;
display:flex;
align-items:center;
border:1px solid var(--edge-soft);
background:#070707;
color:var(--text-faint);
font-size:10px;
line-height:1;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}

.stylelab .guestbook-input:hover {
background:#0c0c0c;
color:#8f8f8f;
}

.stylelab .guestbook-submit {
height:24px;
display:flex;
align-items:center;
justify-content:center;
border:1px solid var(--edge-soft);
background:#161616;
color:var(--text-soft);
font-size:9px;
font-weight:700;
line-height:1;
text-shadow:1px 1px 0 #000;
}

.stylelab .guestbook-submit:hover {
background:#222222;
color:#ffffff;
}

/* -----------------------------------------
9. Ticker
Type: RECORD STRIP
Not a screen device.
----------------------------------------- */

.stylelab .ticker {
height:var(--ticker-h);
margin:0 0 var(--space-inner);
padding:0 var(--pad-panel);
color:#bdbdbd;
background:#171717;
font-size:10px;
line-height:var(--ticker-h);
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
text-shadow:1px 1px 0 #000;
}

/* -----------------------------------------
10. Module grid
----------------------------------------- */

.stylelab .module-grid {
display:grid;
grid-template-columns:minmax(0,1fr) minmax(0,1fr) 280px;
gap:var(--space-inner);
align-items:stretch;
}

.stylelab .panel,
.stylelab .instrument-panel {
min-width:0;
height:100%;
display:flex;
flex-direction:column;
}

.stylelab .panel-body,
.stylelab .instrument-body {
flex:1 1 auto;
min-height:0;
padding:var(--pad-panel);
background:var(--surface-well);
}

/* -----------------------------------------
11. Record modules
No scanlines. No screen treatment.
----------------------------------------- */

.stylelab .record-list {
margin:0 !important;
padding:0 !important;
list-style:none !important;
}

.stylelab .record-list li {
display:grid;
grid-template-columns:minmax(0,1fr) auto;
align-items:center;
gap:var(--space-block);
height:var(--row-h);
min-height:var(--row-h);
margin:0;
padding:0 2px;
border-bottom:1px solid var(--edge-soft);
color:var(--text-soft);
line-height:1.25;
}

.stylelab .record-list li:first-child {
border-top:1px solid var(--edge-soft);
}

.stylelab .record-list li:hover {
background:#151515;
color:#ffffff;
}

.stylelab .record-list li span:first-child {
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}

.stylelab .meta {
color:var(--text-dim);
white-space:nowrap;
font-size:9px;
line-height:1;
}

.stylelab .record-list li:hover .meta {
color:#c0c0c0;
}

/* -----------------------------------------
12. Status tags
Small functional color only.
No structural color use.
----------------------------------------- */

.stylelab .status-tag {
display:inline-flex;
align-items:center;
justify-content:center;
min-width:34px;
height:16px;
padding:0 4px;
border:1px solid #303030;
background:#161616;
color:var(--text-soft);
font-size:9px;
text-align:center;
line-height:1;
}

.stylelab .status-tag.is-progress {
border-color:#6d5b2c;
background:#19170f;
}

.stylelab .status-tag.is-review {
border-color:#36515d;
background:#10171a;
}

.stylelab .status-tag.is-wait {
border-color:#484848;
background:#151515;
}

.stylelab .status-tag.is-done {
border-color:#3d5c38;
background:#111811;
}

.stylelab .status-tag.is-alert {
border-color:#6a3933;
background:#1b1110;
}

/* -----------------------------------------
13. Team work module
Use WIP construction motif only where the making team is foregrounded.
Only motif: left vertical construction rail.
----------------------------------------- */

.stylelab .team-panel .panel-body {
position:relative;
padding-left:15px;
}

.stylelab .team-panel .panel-body::before {
content:"";
position:absolute;
left:6px;
top:8px;
bottom:8px;
width:4px;
pointer-events:none;
background:
repeating-linear-gradient(
45deg,
var(--wip-yellow) 0 4px,
var(--wip-yellow) 4px 5px,
var(--wip-black) 5px 9px,
var(--wip-black) 9px 10px
);
opacity:0.95;
}

.stylelab .team-panel .titlebar > span:last-child {
color:#c6c6c6;
}

/* -----------------------------------------
14. Status instrument
Type: STATUS INSTRUMENT
No scanlines. Gauge cells may have recessed finish.
----------------------------------------- */

.stylelab .instrument-grid {
display:grid;
grid-template-columns:minmax(0,1fr) minmax(0,1fr);
gap:var(--space-inner);
margin:0 0 var(--space-inner);
}

.stylelab .gauge {
height:var(--gauge-h);
min-width:0;
padding:6px;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
border:1px solid var(--edge-soft);
background:var(--surface-inset);
text-align:center;
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.025),
inset 0 -1px 0 rgba(0,0,0,0.55);
}

.stylelab .gauge:hover {
background:#0d0d0d;
}

.stylelab .gauge b {
display:block;
color:#f0f0f0;
font-family:Consolas, Monaco, monospace !important;
font-size:18px;
line-height:1;
text-shadow:1px 1px 0 #000;
}

.stylelab .gauge span {
display:block;
margin-top:5px;
color:var(--text-dim);
font-size:9px;
line-height:1;
}

.stylelab .instrument-lines {
border-top:1px solid var(--edge-soft);
border-bottom:1px solid var(--edge-soft);
}

.stylelab .instrument-line {
display:grid;
grid-template-columns:82px minmax(0,1fr);
align-items:center;
gap:6px;
height:22px;
min-height:22px;
padding:0 2px;
border-bottom:1px solid var(--edge-soft);
font-size:10px;
line-height:1.2;
}

.stylelab .instrument-line:last-child {
border-bottom:none;
}

.stylelab .instrument-line:hover {
background:#151515;
}

.stylelab .instrument-label {
color:var(--text-dim);
white-space:nowrap;
}

.stylelab .instrument-value {
color:var(--text-soft);
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
}

.stylelab .instrument-line:hover .instrument-value {
color:#ffffff;
}

/* -----------------------------------------
15. Footer split
Left: style rule check
Right: policy / license / credits / socials
----------------------------------------- */

.stylelab .footer-grid {
display:grid;
grid-template-columns:minmax(0,1fr) 300px;
gap:var(--space-inner);
margin-top:var(--space-inner);
align-items:stretch;
}

.stylelab .footer-grid .panel {
height:100%;
}

.stylelab .manual-panel {
margin-top:0;
}

.stylelab .sample-row {
display:grid;
grid-template-columns:150px minmax(0,1fr);
align-items:center;
gap:var(--space-inner);
min-height:24px;
padding:4px 0;
border-bottom:1px solid var(--edge-soft);
}

.stylelab .sample-row:first-child {
border-top:1px solid var(--edge-soft);
}

.stylelab .sample-row:hover {
background:#151515;
}

.stylelab .sample-label {
color:var(--text-dim);
font-size:10px;
line-height:1.25;
}

.stylelab .sample-value {
color:var(--text-soft);
font-size:10px;
line-height:1.35;
}

.stylelab .sample-row:hover .sample-value {
color:#ffffff;
}

.stylelab .policy-list {
border-top:1px solid var(--edge-soft);
border-bottom:1px solid var(--edge-soft);
}

.stylelab .policy-row {
display:grid;
grid-template-columns:minmax(0,1fr) 18px;
align-items:center;
gap:var(--space-inner);
height:24px;
padding:0 2px;
border-bottom:1px solid var(--edge-soft);
font-size:10px;
line-height:1.2;
}

.stylelab .policy-row:last-child {
border-bottom:none;
}

.stylelab .policy-row:hover {
background:#151515;
}

.stylelab .policy-row a {
display:block;
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
color:var(--text-soft) !important;
}

.stylelab .policy-row:hover a {
color:#ffffff !important;
text-decoration:none !important;
}

.stylelab .policy-mark {
color:var(--text-dim);
font-size:14px;
line-height:1;
white-space:nowrap;
text-align:right;
}

.stylelab .policy-row:hover .policy-mark {
color:#ffffff;
}

.stylelab .social-strip {
display:grid;
grid-template-columns:repeat(4,1fr);
gap:var(--space-tight);
margin-top:var(--space-inner);
}

.stylelab .social-icon {
display:block;
height:26px;
min-width:0;
}

.stylelab .social-icon a {
display:flex !important;
align-items:center !important;
justify-content:center !important;
width:100% !important;
height:26px !important;
border:1px solid var(--edge-soft) !important;
background:#111111 !important;
color:var(--text-soft) !important;
font-size:10px !important;
font-weight:700 !important;
line-height:1 !important;
text-decoration:none !important;
text-shadow:1px 1px 0 #000 !important;
box-sizing:border-box !important;
}

.stylelab .social-icon a:hover {
background:#1c1c1c !important;
color:#ffffff !important;
border-color:#3a3a3a !important;
text-decoration:none !important;
}

/* -----------------------------------------
16. Responsive
----------------------------------------- */

@media screen and (max-width:1380px) {
.stylelab .module-grid {
grid-template-columns:minmax(0,1fr) minmax(0,1fr);
}

.stylelab .footer-grid {
grid-template-columns:minmax(0,1fr);
}
}

@media screen and (max-width:1180px) {
.stylelab .console-grid {
grid-template-columns:minmax(0,1fr);
}

.stylelab .module-grid {
grid-template-columns:minmax(0,1fr);
}

.stylelab .notice-line {
grid-template-columns:62px minmax(0,1fr);
min-height:32px;
}

.stylelab .notice-date,
.stylelab .notice-action {
display:none;
}
}