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

(Install package: clbiwiki-mainpage-project-buttons-vertical-20260711 / css/MainPage.css)
(Install package: clbiwiki-mainpage-projects-bottom-fullwidth-20260711 / css/MainPage.css)
229번째 줄: 229번째 줄:
.main-portal .console-body {
.main-portal .console-body {
     padding:3px;
     padding:3px;
    display:grid;
    grid-template-columns:minmax(0,1fr);
    gap:var(--gap);
     background:var(--well);
     background:var(--well);
     border:0;
     border:0;
266번째 줄: 269번째 줄:
}
}


.main-portal .portal-side-stack {
    min-width:0;
    display:flex;
    flex-direction:column;
    gap:var(--gap);
}


.main-portal .archive-screen,
.main-portal .archive-screen,
278번째 줄: 275번째 줄:
     flex-direction:column;
     flex-direction:column;
     padding-top:0;
     padding-top:0;
}
.main-portal .archive-screen {
    flex:1 1 auto;
}
}


.main-portal .project-screen {
.main-portal .project-screen {
     flex:0 0 auto;
     width:100%;
}
}


567번째 줄: 560번째 줄:


/* -----------------------------------------
/* -----------------------------------------
PROJECT ACCESS
PROJECTS
전체 본문 프레임의 최하단 전체 폭을 사용한다.
----------------------------------------- */
----------------------------------------- */


.main-portal .project-screen .screen-title {
.main-portal .project-screen .screen-title {
     flex:0 0 34px;
     flex:0 0 34px;
    justify-content:center;
    text-align:center;
}
.main-portal .project-screen .screen-title > span {
    flex:0 1 auto;
    color:var(--text-strong);
    font-size:12px;
    text-align:center;
}
}


608번째 줄: 611번째 줄:
     padding:0 12px;
     padding:0 12px;
     display:flex;
     display:flex;
    flex-direction:column;
     align-items:center;
     align-items:flex-start;
     justify-content:center;
     justify-content:center;
     overflow:hidden;
     overflow:hidden;
     color:var(--text) !important;
     color:var(--text) !important;
    text-decoration:none !important;
}
.main-portal .project-access-button span {
    display:block;
    max-width:100%;
    overflow:hidden;
    color:var(--text);
     font-size:15px;
     font-size:15px;
     font-weight:700;
     font-weight:700;
     line-height:20px;
     line-height:62px;
    text-align:center;
    text-decoration:none !important;
     text-overflow:ellipsis;
     text-overflow:ellipsis;
     white-space:nowrap;
     white-space:nowrap;
}
}


.main-portal .project-access-button small {
.main-portal .project-access-button:hover > a,
    display:block;
.main-portal .project-access-button:focus-within > a {
    max-width:100%;
     color:var(--text-strong) !important;
    margin-top:3px;
    overflow:hidden;
    color:var(--meta);
    font-size:10px;
    font-weight:700;
    line-height:12px;
    text-overflow:ellipsis;
    white-space:nowrap;
}
 
.main-portal .project-access-button:hover > a span,
.main-portal .project-access-button:focus-within > a span {
     color:var(--text-strong);
}
 
.main-portal .project-access-button:hover > a small,
.main-portal .project-access-button:focus-within > a small {
    color:var(--text);
}
}



2026년 7월 11일 (토) 08:35 판

/* =========================================
COASTLINE: BLACK ICE - MainPage
대문 전용 v3 스타일
========================================= */

/*
책임 범위
-----------------------------------------
- 대문 본문 .main-portal 내부만 담당한다.
- 사이트 공통 셸은 Layout.css가 담당한다.
- 카테고리 네비의 SVG 구조는 CategoryNav.js가 생성한다.
- 대문에서 제거된 보조 모듈의 레거시 스타일은 이 파일에 두지 않는다.
*/

.main-portal {
    --panel:#1d1d1d;
    --well:#080808;
    --item:#101010;
    --edge:#050505;
    --highlight:#555555;
    --shadow:#101010;
    --text:#e2e2e2;
    --text-strong:#ffffff;
    --meta:#8a8a8a;
    --muted:#626262;
    --gap:2px;
    --block-gap:8px;
    --frame:8px;
    width:100%;
    margin:0;
    padding:0;
    color:var(--text);
    background:transparent;
    font-size:12px;
    line-height:18px;
    box-sizing:border-box;
}

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

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

.main-portal a:hover,
.main-portal a:focus {
    color:var(--text-strong) !important;
    text-decoration:none !important;
}

/* -----------------------------------------
공통 돌출 프레임
----------------------------------------- */

.main-portal .lab-logo,
.main-portal .console,
.portal-category-nav {
    background:var(--panel, #1d1d1d);
    border:1px solid var(--edge, #050505);
    border-radius:0;
    box-shadow:
        inset 0 1px 0 var(--highlight, #555555),
        inset -1px 0 0 var(--highlight, #555555),
        inset 1px 0 0 var(--shadow, #101010),
        inset 0 -1px 0 var(--shadow, #101010);
}

.main-portal .lab-logo,
.main-portal [data-component="category-nav"],
.main-portal .console {
    margin:0 0 var(--block-gap);
}

/* -----------------------------------------
로고 프레임
----------------------------------------- */

.main-portal .lab-logo {
    padding:var(--frame);
    overflow:hidden;
}

.main-portal .portal-logo-well {
    min-height:86px;
    padding:10px 8px;
    display:flex;
    align-items:center;
    justify-content:center;
    overflow:hidden;
    background:var(--well);
    border:0;
    box-shadow:
        inset 0 1px 0 var(--shadow),
        inset -1px 0 0 var(--shadow),
        inset 1px 0 0 var(--highlight),
        inset 0 -1px 0 var(--highlight);
    line-height:0;
}

.main-portal .portal-logo-well a,
.main-portal .portal-logo-well .mw-file-description {
    display:inline-block;
    line-height:0;
}

.main-portal .portal-logo-well img,
.main-portal .portal-logo-well .mw-file-element {
    display:block;
    width:1000px;
    max-width:144%;
    height:auto;
    filter:grayscale(1) contrast(1.04) brightness(1.02);
}

/* -----------------------------------------
카테고리 네비
----------------------------------------- */

.main-portal [data-component="category-nav"] {
    display:block;
    width:100%;
}

.portal-category-nav {
    position:relative;
    width:100%;
    height:24px;
    margin:0;
    padding:0;
    overflow:hidden;
}

.portal-category-svg {
    display:block;
    width:100%;
    height:100%;
}

.portal-cat-shape {
    fill:transparent;
    stroke:none;
    pointer-events:all;
}

.portal-cat-anchor:hover .portal-cat-shape {
    fill:rgba(255,255,255,0.035);
}

.portal-cat-anchor:active .portal-cat-shape {
    fill:rgba(0,0,0,0.18);
}

.portal-cat-label {
    fill:#e2e2e2;
    font-family:inherit;
    font-size:12px;
    font-weight:700;
    text-anchor:middle;
    dominant-baseline:middle;
    pointer-events:none;
    paint-order:stroke;
    stroke:#050505;
    stroke-width:2px;
    stroke-linejoin:round;
}

.portal-cat-anchor:hover .portal-cat-label {
    fill:#ffffff;
}

.portal-cat-divider {
    stroke:#050505;
    stroke-width:1;
    shape-rendering:crispEdges;
    vector-effect:non-scaling-stroke;
    pointer-events:none;
}

/* -----------------------------------------
메인 콘솔
----------------------------------------- */

.main-portal .console {
    width:100%;
    padding:0 var(--frame) var(--frame);
    overflow:hidden;
}

.main-portal .titlebar,
.main-portal .screen-title {
    height:34px;
    min-height:34px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:8px;
    padding:0;
    overflow:hidden;
    background:transparent;
    border:0;
    box-shadow:none;
    color:var(--text-strong);
    font-size:12px;
    font-weight:700;
    line-height:34px;
    white-space:nowrap;
}

.main-portal .titlebar > span,
.main-portal .screen-title > span {
    min-width:0;
    overflow:hidden;
    text-overflow:ellipsis;
}

.main-portal .titlebar > span:last-child,
.main-portal .screen-title > span:last-child {
    flex:0 0 auto;
    color:var(--meta);
    font-size:11px;
}

.main-portal .console-body {
    padding:3px;
    display:grid;
    grid-template-columns:minmax(0,1fr);
    gap:var(--gap);
    background:var(--well);
    border:0;
    box-shadow:
        inset 0 1px 0 var(--shadow),
        inset -1px 0 0 var(--shadow),
        inset 1px 0 0 var(--highlight),
        inset 0 -1px 0 var(--highlight);
}

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

.main-portal .main-screen,
.main-portal .archive-screen,
.main-portal .project-screen {
    min-width:0;
    padding:var(--frame);
    overflow:hidden;
    background:var(--panel);
    border:1px solid var(--edge);
    box-shadow:
        inset 0 1px 0 var(--highlight),
        inset -1px 0 0 var(--highlight),
        inset 1px 0 0 var(--shadow),
        inset 0 -1px 0 var(--shadow);
}

.main-portal .main-screen {
    display:grid;
    grid-template-rows:auto auto;
    gap:var(--gap);
}


.main-portal .archive-screen,
.main-portal .project-screen {
    display:flex;
    flex-direction:column;
    padding-top:0;
}

.main-portal .project-screen {
    width:100%;
}

/* -----------------------------------------
이미지 피드
----------------------------------------- */

.main-portal .image-feed {
    position:relative;
    width:100%;
    height:260px;
    min-height:260px;
    overflow:hidden;
    isolation:isolate;
    background:#030303;
    border:0;
    box-shadow:
        inset 0 1px 0 var(--shadow),
        inset -1px 0 0 var(--shadow),
        inset 1px 0 0 var(--highlight),
        inset 0 -1px 0 var(--highlight);
}

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

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

.main-portal .feed-layer-1 { animation-name:image-feed-drift-left; animation-delay:0s; }
.main-portal .feed-layer-2 { animation-name:image-feed-drift-right; animation-delay:6s; }
.main-portal .feed-layer-3 { animation-name:image-feed-drift-left; animation-delay:12s; }
.main-portal .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); }
}

.main-portal .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), transparent 22%, transparent 74%, rgba(0,0,0,0.30)),
        linear-gradient(to right, rgba(0,0,0,0.22), transparent 10%, transparent 90%, rgba(0,0,0,0.22));
}

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

.main-portal .feed-caption {
    position:absolute;
    left:0;
    right:0;
    bottom:0;
    z-index:8;
    height:24px;
    padding:0 8px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:8px;
    overflow:hidden;
    background:rgba(16,16,16,0.94);
    border-top:1px solid var(--edge);
    color:var(--text);
    font-size:11px;
    font-weight:700;
    line-height:23px;
}

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

.main-portal .feed-caption span:last-child {
    flex:0 0 auto;
    color:var(--meta);
}

/* -----------------------------------------
선언문
----------------------------------------- */

.main-portal .statement-plate {
    padding:12px 16px;
    background:var(--well);
    border:0;
    box-shadow:
        inset 0 1px 0 var(--shadow),
        inset -1px 0 0 var(--shadow),
        inset 1px 0 0 var(--highlight),
        inset 0 -1px 0 var(--highlight);
}

.main-portal .statement-plate h2 {
    margin:0 0 8px !important;
    padding:0 0 7px !important;
    border:0 !important;
    border-bottom:1px solid var(--item) !important;
    color:var(--text-strong) !important;
    font-size:14px !important;
    font-weight:700 !important;
    line-height:20px !important;
    text-align:center !important;
}

.main-portal .statement-plate p {
    max-width:840px;
    margin:0 auto 8px;
    color:var(--text);
    font-size:12px;
    font-weight:400;
    line-height:18px;
    text-align:center;
    word-break:keep-all;
}

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

/* -----------------------------------------
ARCHIVE STATUS
----------------------------------------- */

.main-portal .archive-screen .screen-title {
    flex:0 0 34px;
}

.main-portal .instrument-body {
    flex:1 1 auto;
    min-height:0;
    padding:3px;
    display:grid;
    grid-template-columns:minmax(0,1fr);
    align-content:start;
    gap:var(--gap);
    background:var(--well);
    border:0;
    box-shadow:
        inset 0 1px 0 var(--shadow),
        inset -1px 0 0 var(--shadow),
        inset 1px 0 0 var(--highlight),
        inset 0 -1px 0 var(--highlight);
}

.main-portal .instrument-grid {
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(0,1fr);
    gap:var(--gap);
}

.main-portal .gauge,
.main-portal .instrument-line {
    background:var(--item);
    border:1px solid var(--edge);
    box-shadow:inset 0 1px 0 var(--panel);
}

.main-portal .gauge {
    height:72px;
    padding:8px;
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    overflow:hidden;
    text-align:center;
}

.main-portal .gauge b {
    display:block;
    color:var(--text-strong);
    font-family:Consolas, Monaco, monospace !important;
    font-size:20px;
    font-weight:700;
    line-height:24px;
}

.main-portal .gauge span {
    display:block;
    margin-top:4px;
    color:var(--meta);
    font-size:10px;
    line-height:12px;
    white-space:nowrap;
}

.main-portal .instrument-lines {
    display:grid;
    grid-template-columns:minmax(0,1fr);
    gap:var(--gap);
}

.main-portal .instrument-line {
    height:24px;
    min-height:24px;
    padding:0 8px;
    display:grid;
    grid-template-columns:76px minmax(0,1fr);
    align-items:center;
    gap:8px;
    overflow:hidden;
    font-size:11px;
    line-height:22px;
}

.main-portal .instrument-label {
    color:var(--meta);
    white-space:nowrap;
}

.main-portal .instrument-value {
    min-width:0;
    overflow:hidden;
    color:var(--text);
    text-align:right;
    text-overflow:ellipsis;
    white-space:nowrap;
}

.main-portal .gauge:hover,
.main-portal .instrument-line:hover {
    color:var(--text-strong);
}

.main-portal .instrument-line:hover .instrument-value {
    color:var(--text-strong);
}



/* -----------------------------------------
PROJECTS
전체 본문 프레임의 최하단 전체 폭을 사용한다.
----------------------------------------- */

.main-portal .project-screen .screen-title {
    flex:0 0 34px;
    justify-content:center;
    text-align:center;
}

.main-portal .project-screen .screen-title > span {
    flex:0 1 auto;
    color:var(--text-strong);
    font-size:12px;
    text-align:center;
}

.main-portal .project-access-body {
    padding:3px;
    background:var(--well);
    border:0;
    box-shadow:
        inset 0 1px 0 var(--shadow),
        inset -1px 0 0 var(--shadow),
        inset 1px 0 0 var(--highlight),
        inset 0 -1px 0 var(--highlight);
}

.main-portal .project-access-list {
    display:grid;
    grid-template-columns:minmax(0,1fr);
    gap:var(--gap);
}

.main-portal .project-access-button {
    min-width:0;
    height:64px;
    background:var(--panel);
    border:1px solid var(--edge);
    box-shadow:
        inset 0 1px 0 var(--highlight),
        inset -1px 0 0 var(--highlight),
        inset 1px 0 0 var(--shadow),
        inset 0 -1px 0 var(--shadow);
}

.main-portal .project-access-button > a {
    width:100%;
    height:100%;
    padding:0 12px;
    display:flex;
    align-items:center;
    justify-content:center;
    overflow:hidden;
    color:var(--text) !important;
    font-size:15px;
    font-weight:700;
    line-height:62px;
    text-align:center;
    text-decoration:none !important;
    text-overflow:ellipsis;
    white-space:nowrap;
}

.main-portal .project-access-button:hover > a,
.main-portal .project-access-button:focus-within > a {
    color:var(--text-strong) !important;
}

/* -----------------------------------------
반응형
----------------------------------------- */

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

    .main-portal .archive-screen {
        min-height:190px;
    }
}

@media screen and (max-width:820px) {

    .main-portal .image-feed {
        height:220px;
        min-height:220px;
    }

    .portal-cat-label {
        font-size:11px;
    }
}

@media screen and (max-width:620px) {
    .main-portal .lab-logo,
    .main-portal .console {
        --frame:6px;
    }

    .main-portal .statement-plate {
        padding:10px 12px;
    }

    .main-portal .instrument-grid {
        grid-template-columns:minmax(0,1fr);
    }
}

/* 아날로그 UI는 상태 변화를 즉시 보여준다. */
.main-portal a,
.main-portal button,
.main-portal .portal-cat-shape,
.main-portal .portal-cat-label,
.main-portal .gauge,
.main-portal .instrument-line,
.main-portal .project-access-button,
.main-portal .project-access-button a {
    transition:none !important;
}