|
|
| 1번째 줄: |
1번째 줄: |
| /* ========================================= | | /* ========================================= |
| COASTLINE: BLACK ICE - MainPage | | COASTLINE: BLACK ICE - MainPage |
| 대문 전용 v3 스타일 | | 로고 + 카테고리 네비 전용 최소 대문 |
| ========================================= */ | | ========================================= */ |
|
| |
|
| 10번째 줄: |
10번째 줄: |
| - 사이트 공통 셸은 Layout.css가 담당한다. | | - 사이트 공통 셸은 Layout.css가 담당한다. |
| - 카테고리 네비의 SVG 구조는 CategoryNav.js가 생성한다. | | - 카테고리 네비의 SVG 구조는 CategoryNav.js가 생성한다. |
| - 대문에서 제거된 보조 모듈의 레거시 스타일은 이 파일에 두지 않는다. | | - 콘솔, 그래프, STATUS, INFORMATION, PROJECTS는 대문에서 제거한다. |
| */ | | */ |
|
| |
|
| 16번째 줄: |
16번째 줄: |
| --panel:#1d1d1d; | | --panel:#1d1d1d; |
| --well:#080808; | | --well:#080808; |
| --item:#101010;
| |
| --edge:#050505; | | --edge:#050505; |
| --highlight:#555555; | | --highlight:#555555; |
| 22번째 줄: |
21번째 줄: |
| --text:#e2e2e2; | | --text:#e2e2e2; |
| --text-strong:#ffffff; | | --text-strong:#ffffff; |
| --meta:#8a8a8a;
| |
| --muted:#626262;
| |
| --gap:2px;
| |
| --block-gap:8px; | | --block-gap:8px; |
| --frame:8px; | | --frame:8px; |
| 40번째 줄: |
36번째 줄: |
| } | | } |
|
| |
|
| /* 대문 본문 우물을 세로 플렉스 컨테이너로 연결한다.
| |
| 내용이 짧을 때는 포털이 남는 높이를 채우고, 길 때는 기존 본문 스크롤을 사용한다. */
| |
| body.action-view.clbi-main-page .liberty-content-main .mw-parser-output { | | body.action-view.clbi-main-page .liberty-content-main .mw-parser-output { |
| display:flex !important; | | display:flex !important; |
| 68번째 줄: |
62번째 줄: |
| color:var(--text-strong) !important; | | color:var(--text-strong) !important; |
| text-decoration:none !important; | | text-decoration:none !important; |
| | } |
| | |
| | /* 과거 대문 구조가 캐시에 남아 있어도 화면에는 나타나지 않게 한다. */ |
| | .main-portal > .console, |
| | .main-portal > .portal-bottom-row, |
| | .main-portal > [data-archive-graph] { |
| | display:none !important; |
| } | | } |
|
| |
|
| 75번째 줄: |
76번째 줄: |
|
| |
|
| .main-portal .lab-logo, | | .main-portal .lab-logo, |
| .main-portal .console,
| |
| .portal-category-nav { | | .portal-category-nav { |
| background:var(--panel, #1d1d1d); | | background:var(--panel, #1d1d1d); |
| 87번째 줄: |
87번째 줄: |
| } | | } |
|
| |
|
| .main-portal .lab-logo, | | .main-portal .lab-logo { |
| .main-portal [data-component="category-nav"],
| |
| .main-portal .console {
| |
| flex:0 0 auto; | | flex:0 0 auto; |
| margin:0 0 var(--block-gap); | | margin:0 0 var(--block-gap); |
| | } |
| | |
| | .main-portal [data-component="category-nav"] { |
| | flex:0 0 auto; |
| | display:block; |
| | width:100%; |
| | margin:0; |
| } | | } |
|
| |
|
| 138번째 줄: |
143번째 줄: |
| 카테고리 네비 | | 카테고리 네비 |
| ----------------------------------------- */ | | ----------------------------------------- */ |
|
| |
| .main-portal [data-component="category-nav"] {
| |
| display:block;
| |
| width:100%;
| |
| }
| |
|
| |
|
| .portal-category-nav { | | .portal-category-nav { |
| 199번째 줄: |
199번째 줄: |
| } | | } |
|
| |
|
| /* -----------------------------------------
| | .main-portal a, |
| 메인 콘솔
| | .main-portal .portal-cat-shape, |
| ----------------------------------------- */
| | .main-portal .portal-cat-label { |
| | | transition:none !important; |
| .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) { | | @media screen and (max-width:820px) { |
|
| |
| .main-portal .image-feed {
| |
| height:220px;
| |
| min-height:220px;
| |
| }
| |
|
| |
| .portal-cat-label { | | .portal-cat-label { |
| font-size:11px; | | font-size:11px; |
| 590번째 줄: |
212번째 줄: |
|
| |
|
| @media screen and (max-width:620px) { | | @media screen and (max-width:620px) { |
| .main-portal .lab-logo, | | .main-portal { |
| .main-portal .console {
| |
| --frame:6px; | | --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 (현재 문서 언어의 1:1 관계 그래프)
| |
| - 가운데: 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:272px 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);
| |
| }
| |
|
| |
| /* STATUS
| |
| - 현재 문서 언어의 관계 그래프 하나만 1:1 정사각형으로 표시한다.
| |
| - 별도 언어별 통계 칸은 만들지 않는다. */
| |
| .main-portal .portal-status-body {
| |
| display:grid;
| |
| grid-template-rows:176px 36px;
| |
| grid-template-columns:176px;
| |
| align-content:center;
| |
| justify-content:center;
| |
| gap:2px;
| |
| }
| |
|
| |
| /* 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:272px 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 STATUS 내장형
| |
| - 중앙 콘솔은 기존 IMAGE FEED / 선언문을 유지한다.
| |
| - 관계 그래프는 STATUS 프레임 안에서 1:1 정사각형으로 표시한다.
| |
| - 현재 문서 언어에 해당하는 노드만 표시한다.
| |
| - 사용자 드래그와 패닝은 허용하지 않는다.
| |
| ========================================= */
| |
|
| |
| .main-portal .portal-status-graph-body {
| |
| min-width:0;
| |
| min-height:0;
| |
| }
| |
|
| |
| .main-portal .archive-graph {
| |
| position:relative;
| |
| width:176px;
| |
| max-width:100%;
| |
| aspect-ratio:1 / 1;
| |
| height:auto;
| |
| min-width:0;
| |
| min-height:0;
| |
| align-self:center;
| |
| 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:auto;
| |
| }
| |
|
| |
| .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:18px 18px;
| |
| 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:default;
| |
| outline:0;
| |
| }
| |
|
| |
| .main-portal .archive-graph-loading {
| |
| position:absolute;
| |
| left:50%;
| |
| top:50%;
| |
| z-index:4;
| |
| width:calc(100% - 32px);
| |
| max-width:240px;
| |
| min-width:0;
| |
| 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:11px;
| |
| font-weight:700;
| |
| line-height:15px;
| |
| text-align:center;
| |
| pointer-events:none;
| |
| }
| |
|
| |
| .main-portal .archive-graph-loading small {
| |
| display:block;
| |
| max-width:100%;
| |
| overflow:hidden;
| |
| color:var(--meta);
| |
| font-size:9px;
| |
| font-weight:400;
| |
| line-height:13px;
| |
| 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 6px;
| |
| display:flex;
| |
| align-items:center;
| |
| justify-content:space-between;
| |
| gap:6px;
| |
| overflow:hidden;
| |
| background:rgba(16,16,16,0.95);
| |
| border-top:1px solid var(--edge);
| |
| color:var(--text);
| |
| font-size:10px;
| |
| 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;
| |
| }
| |
|
| |
| /* 그래프 아래의 현재 언어 문서 수.
| |
| 그래프 캔버스와 분리된 표준 #1d1d1d 돌출 패널이다. */
| |
| .main-portal .portal-status-document-count {
| |
| width:176px;
| |
| height:36px;
| |
| min-width:0;
| |
| padding:0 8px;
| |
| display:flex;
| |
| align-items:center;
| |
| justify-content:space-between;
| |
| gap: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);
| |
| line-height:34px;
| |
| }
| |
|
| |
| .main-portal .portal-status-document-label {
| |
| min-width:0;
| |
| overflow:hidden;
| |
| color:var(--text);
| |
| font-size:10px;
| |
| font-weight:700;
| |
| text-overflow:ellipsis;
| |
| white-space:nowrap;
| |
| }
| |
|
| |
| .main-portal .portal-status-document-value {
| |
| flex:0 0 auto;
| |
| color:var(--text-strong);
| |
| font-size:14px;
| |
| font-weight:700;
| |
| white-space:nowrap;
| |
| }
| |
|
| |
| /* INFORMATION / PROJECTS는 링크 카드가 아니라 그래프 조작부로 동작한다. */
| |
| .main-portal .graph-control {
| |
| width:100%;
| |
| min-width:0;
| |
| height:100%;
| |
| margin:0;
| |
| padding:0 8px;
| |
| display:flex;
| |
| align-items:center;
| |
| justify-content:center;
| |
| overflow:hidden;
| |
| appearance:none;
| |
| -webkit-appearance:none;
| |
| background:var(--panel);
| |
| border:1px solid var(--edge);
| |
| border-radius:0;
| |
| 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:inherit;
| |
| font-size:13px;
| |
| font-weight:700;
| |
| line-height:normal;
| |
| text-align:center;
| |
| text-overflow:ellipsis;
| |
| white-space:nowrap;
| |
| cursor:pointer;
| |
| outline:0;
| |
| user-select:none;
| |
| }
| |
|
| |
| .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,
| |
| .main-portal .graph-control:focus-visible {
| |
| background:var(--panel);
| |
| color:var(--text-strong);
| |
| outline:0;
| |
| 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);
| |
| }
| |
|
| |
| /* 선택 상태는 #080808 우물 전체로 꺼뜨리지 않고,
| |
| 국가 패널 버튼과 같은 #101010 표준 눌림 면을 사용한다. */
| |
| .main-portal .graph-control.is-active,
| |
| .main-portal .graph-control[aria-pressed="true"],
| |
| .main-portal .graph-control:active {
| |
| background:var(--item);
| |
| color:var(--text-strong);
| |
| border-color:var(--edge);
| |
| 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:1280px) {
| |
| .main-portal .portal-bottom-row {
| |
| grid-template-columns:272px minmax(0,1fr) 360px;
| |
| }
| |
|
| |
| }
| |
|
| |
| @media screen and (max-width:1100px) {
| |
| .main-portal .portal-bottom-row {
| |
| grid-template-columns:272px minmax(0,1fr);
| |
| }
| |
|
| |
| .main-portal .portal-project-frame {
| |
| grid-column:1 / -1;
| |
| }
| |
| }
| |
|
| |
| @media screen and (max-width:760px) {
| |
| .main-portal .portal-bottom-row {
| |
| grid-template-columns:minmax(0,1fr);
| |
| }
| |
|
| |
| .main-portal .portal-bottom-frame {
| |
| height:238px;
| |
| }
| |
|
| |
| .main-portal .portal-project-frame {
| |
| grid-column:auto;
| |
| } | | } |
| } | | } |