참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.
- 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
- 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
- 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
- 오페라: Ctrl-F5를 입력.
/* =========================================
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%;
min-height:100%;
margin:0;
padding:0;
display:flex;
flex-direction:column;
color:var(--text);
background:transparent;
font-size:12px;
line-height:18px;
box-sizing:border-box;
}
/* 대문 본문 우물을 세로 플렉스 컨테이너로 연결한다.
내용이 짧을 때는 포털이 남는 높이를 채우고, 길 때는 기존 본문 스크롤을 사용한다. */
body.action-view.clbi-main-page .liberty-content-main .mw-parser-output {
display:flex !important;
flex-direction:column !important;
}
body.action-view.clbi-main-page .liberty-content-main .mw-parser-output > .main-portal {
flex:1 0 auto;
min-height:0;
}
.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 {
flex:0 0 auto;
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;
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);
gap:var(--gap);
align-items:stretch;
}
.main-portal .main-screen,
.main-portal .archive-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 {
display:flex;
flex-direction:column;
padding-top:0;
}
/* -----------------------------------------
이미지 피드
----------------------------------------- */
.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);
}
/* -----------------------------------------
반응형
----------------------------------------- */
@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 {
transition:none !important;
}
/* =========================================
대문 하단 3분할 도크
- 왼쪽: STATUS (DOCUMENTS / CONNECTIONS 4:3)
- 가운데: INFORMATION (남는 폭 전체 사용)
- 오른쪽: PROJECTS
- 세 프레임 모두 왼쪽 33px 시각 면의 세로 제목을 사용한다.
- 독립 프레임 사이는 2px, 우물 내부와 버튼 사이는 시각 2px 기준이다.
- 하단 행은 남는 높이를 위쪽 여백으로 흡수하여 본문 우물 최하단에 고정된다.
========================================= */
.main-portal .portal-bottom-row {
width:100%;
min-width:0;
margin:0;
margin-top:auto;
padding:0;
flex:0 0 auto;
display:grid;
grid-template-columns:388px minmax(0,1fr) 415px;
column-gap:2px;
row-gap:2px;
align-items:stretch;
}
.main-portal .portal-bottom-frame {
min-width:0;
height:238px;
padding:var(--frame) var(--frame) var(--frame) 0;
display:grid;
grid-template-columns:34px minmax(0,1fr);
gap:0;
align-items:stretch;
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 .portal-side-title {
grid-column:1;
grid-row:1;
width:34px;
min-width:34px;
max-width:34px;
position:relative;
display:block;
padding:0;
background:transparent;
color:var(--text-strong);
font-size:12px;
font-weight:700;
line-height:12px;
text-align:center;
}
.main-portal .portal-side-title-stack {
position:absolute;
left:50%;
top:50%;
width:12px;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
gap:4px;
transform:translate(-50%,-50%) translateX(1px);
}
.main-portal .portal-side-title-stack > span {
width:12px;
height:12px;
display:flex;
align-items:center;
justify-content:center;
line-height:12px;
text-align:center;
}
.main-portal .portal-dock-body {
grid-column:2;
grid-row:1;
min-width:0;
min-height:0;
height:100%;
padding:3px;
background:var(--well);
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);
}
/* ARCHIVE STATUS
- DOCUMENTS / CONNECTIONS: Nations era-panel의 8px #1d1d1d 프레임과 전면 우물 규격
- 아래 결합 프레임은 선택 문서 제목과 이동 링크를 표시한다.
- 공통 프레임 안쪽은 8px padding, 값 우물은 남는 높이를 사용한다. */
.main-portal .portal-status-body {
display:grid;
grid-template-rows:minmax(0,1fr) 70px;
gap:var(--gap);
}
.main-portal .portal-status-body .instrument-grid,
.main-portal .portal-status-body .instrument-lines {
min-height:0;
}
.main-portal .portal-status-body .instrument-grid {
gap:var(--gap);
}
.main-portal .portal-status-body .gauge {
height:auto;
min-height:0;
padding:8px;
display:flex;
flex-direction:column;
align-items:stretch;
justify-content:stretch;
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 .portal-status-body .gauge-well {
flex:1 1 0;
width:100%;
min-width:0;
min-height:0;
height:100%;
padding:0 6px;
display:flex;
flex-direction:column;
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);
text-align:center;
}
.main-portal .portal-status-body .gauge-well b,
.main-portal .portal-status-body .gauge-well span {
flex:0 0 auto;
}
.main-portal .portal-status-body .instrument-lines {
padding:8px;
display:grid;
grid-template-rows:24px 24px;
gap:4px;
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 .portal-status-body .instrument-line {
height:24px;
min-height:24px;
padding:0;
display:grid;
grid-template-columns:76px minmax(0,1fr);
align-items:stretch;
gap:var(--gap);
overflow:hidden;
background:transparent;
border:0;
box-shadow:none;
font-size:11px;
line-height:normal;
}
.main-portal .portal-status-body .instrument-label {
min-width:0;
padding:0 4px;
display:flex;
align-items:center;
justify-content:center;
overflow:hidden;
background:transparent;
border:0;
box-shadow:none;
color:#ffffff;
font-weight:700;
line-height:1;
text-align:center;
text-overflow:ellipsis;
white-space:nowrap;
}
.main-portal .portal-status-body .instrument-value-well {
min-width:0;
min-height:0;
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);
}
.main-portal .portal-status-body .instrument-value {
min-width:0;
max-width:100%;
overflow:hidden;
color:var(--text);
line-height:1;
text-align:center;
text-overflow:ellipsis;
white-space:nowrap;
}
/* INFORMATION / PROJECTS 공통 버튼 */
.main-portal .portal-button-list {
display:grid;
grid-template-columns:minmax(0,1fr);
gap:var(--gap);
}
.main-portal .portal-information-body {
grid-template-columns:repeat(5,minmax(0,1fr));
grid-template-rows:minmax(0,1fr);
}
.main-portal .portal-information-body .portal-dock-button > a {
padding:8px 0;
writing-mode:vertical-rl;
text-orientation:upright;
letter-spacing:1px;
white-space:normal;
}
.main-portal .portal-project-body {
grid-template-rows:repeat(2,minmax(0,1fr));
}
.main-portal .portal-dock-button,
.main-portal .portal-dock-button > a {
width:100%;
min-width:0;
height:100%;
}
.main-portal .portal-dock-button > a {
display:flex;
align-items:center;
justify-content:center;
padding:0 8px;
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);
color:var(--text) !important;
font-size:13px;
font-weight:700;
line-height:normal;
text-align:center;
text-overflow:ellipsis;
white-space:nowrap;
}
.main-portal .portal-project-body .portal-dock-button > a {
font-size:14px;
}
.main-portal .portal-dock-button > a:hover,
.main-portal .portal-dock-button > a:focus {
color:var(--text-strong) !important;
}
.main-portal .portal-dock-button > a:active {
color:var(--text) !important;
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);
}
@media screen and (max-width:1100px) {
.main-portal .portal-bottom-row {
grid-template-columns:388px minmax(0,1fr);
}
.main-portal .portal-project-frame {
grid-column:1 / -1;
}
}
@media screen and (max-width:620px) {
.main-portal .portal-bottom-row {
grid-template-columns:minmax(0,1fr);
}
.main-portal .portal-project-frame {
grid-column:auto;
}
}
/* =========================================
ArchiveGraph 대문 시제품
- 기존 IMAGE FEED / 선언문 대신 전체 문서 관계 Canvas를 사용한다.
- 그래프 렌더링은 ArchiveGraph.js, 물리 계산은 그 스크립트의 Worker가 담당한다.
========================================= */
.main-portal .console {
flex:1 1 360px;
min-height:340px;
display:flex;
flex-direction:column;
}
.main-portal .console > .titlebar {
flex:0 0 34px;
}
.main-portal .console > .console-body {
flex:1 1 auto;
min-height:0;
}
.main-portal .console-grid,
.main-portal .graph-screen {
width:100%;
height:100%;
min-height:0;
}
.main-portal .graph-screen {
display:block;
padding:var(--frame);
}
.main-portal .archive-graph {
position:relative;
width:100%;
height:100%;
min-height:280px;
overflow:hidden;
isolation:isolate;
background:
radial-gradient(circle at center, rgba(255,255,255,0.025) 0, transparent 62%),
#030303;
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);
user-select:none;
touch-action:none;
}
.main-portal .archive-graph::before {
content:"";
position:absolute;
inset:0;
z-index:1;
pointer-events:none;
opacity:0.18;
background-image:radial-gradient(circle, rgba(226,226,226,0.22) 0 1px, transparent 1px);
background-size:24px 24px;
mask-image:radial-gradient(circle at center, #000 0, transparent 78%);
}
.main-portal .archive-graph-canvas {
position:absolute;
inset:0;
z-index:2;
display:block;
width:100%;
height:100%;
cursor:grab;
outline:0;
}
.main-portal .archive-graph-canvas:active {
cursor:grabbing;
}
.main-portal .archive-graph-loading {
position:absolute;
left:50%;
top:50%;
z-index:4;
min-width:240px;
padding:8px;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
gap:2px;
transform:translate(-50%,-50%);
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);
color:var(--text-strong);
font-size:12px;
font-weight:700;
line-height:16px;
text-align:center;
pointer-events:none;
}
.main-portal .archive-graph-loading small {
display:block;
max-width:320px;
overflow:hidden;
color:var(--meta);
font-size:10px;
font-weight:400;
line-height:14px;
text-overflow:ellipsis;
white-space:nowrap;
}
.main-portal .archive-graph-loading.is-hidden {
display:none;
}
.main-portal .archive-graph-loading.is-error {
color:#ffffff;
}
.main-portal .archive-graph-caption {
position:absolute;
left:0;
right:0;
bottom:0;
z-index:3;
height:24px;
padding:0 8px;
display:flex;
align-items:center;
justify-content:space-between;
gap:8px;
overflow:hidden;
background:rgba(16,16,16,0.95);
border-top:1px solid var(--edge);
color:var(--text);
font-size:11px;
font-weight:700;
line-height:23px;
pointer-events:none;
}
.main-portal .archive-graph-caption-title {
min-width:0;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.main-portal .archive-graph-caption-count {
flex:0 0 auto;
color:var(--meta);
white-space:nowrap;
}
/* STATUS의 아래 프레임은 선택 문서 한 줄만 사용한다. */
.main-portal .portal-status-body .graph-selection-shell {
grid-template-rows:minmax(0,1fr);
gap:0;
}
.main-portal .portal-status-body .graph-selection-line {
height:100%;
min-height:0;
}
.main-portal .graph-selected-link {
width:100%;
padding:0 6px;
display:block;
color:var(--text) !important;
line-height:24px;
text-align:center;
text-overflow:ellipsis;
white-space:nowrap;
}
.main-portal .graph-selected-link:hover,
.main-portal .graph-selected-link:focus {
color:var(--text-strong) !important;
}
/* INFORMATION / PROJECTS는 링크 카드가 아니라 그래프 조작부로 동작한다. */
.main-portal .graph-control {
display:flex;
align-items:center;
justify-content:center;
padding:0 8px;
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);
color:var(--text);
font-size:13px;
font-weight:700;
line-height:normal;
text-align:center;
text-overflow:ellipsis;
white-space:nowrap;
cursor:pointer;
outline:0;
}
.main-portal .portal-information-body .graph-control {
padding:8px 0;
writing-mode:vertical-rl;
text-orientation:upright;
letter-spacing:1px;
white-space:normal;
}
.main-portal .portal-project-body .graph-control {
font-size:14px;
}
.main-portal .graph-control:hover,
.main-portal .graph-control:focus {
color:var(--text-strong);
}
.main-portal .graph-control.is-active {
background:var(--well);
color:var(--text-strong);
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 .graph-control:active {
color:var(--text);
}
@media screen and (max-width:820px) {
.main-portal .console {
min-height:300px;
}
.main-portal .archive-graph {
min-height:240px;
}
}