You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2121 lines
41 KiB
CSS

/* 아리 — 일정(Calendar) · 주/월/일 뷰
cal.css 무손실 이식 + .calpage 스코프 (tasks.css 등과 클래스 충돌 방지).
토큰(:root/[data-theme])은 tokens.css 공유 · 상단바는 layout 의 Topbar.
keyframes 는 calendar-unique 이름(cal-*)으로 전역 충돌 방지. */
.calpage {
max-width: 1620px;
margin: 0 auto;
padding: 0 26px 26px;
}
.calpage .ic {
width: 1em;
height: 1em;
flex-shrink: 0;
display: block;
}
.calpage .ic.flip {
transform: rotate(180deg);
}
/* ====================== 본문 ====================== */
.calpage .twork {
display: flex;
gap: 18px;
align-items: flex-start;
padding-top: 12px;
}
/* -------- 사이드바 -------- */
.calpage .subnav {
width: 256px;
flex-shrink: 0;
position: sticky;
top: 86px;
max-height: calc(100vh - 104px);
background: var(--glass);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
border: 1px solid var(--glass-brd);
border-radius: var(--radius);
box-shadow: var(--shadow), var(--glass-hi);
padding: 16px 14px 14px;
display: flex;
flex-direction: column;
}
.calpage .sn-title {
font-family: var(--font-disp);
font-size: 19px;
font-weight: 700;
letter-spacing: -0.02em;
padding: 0 4px 14px;
}
.calpage .sn-new {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
white-space: nowrap;
width: 100%;
padding: 11px;
border-radius: 13px;
font-size: 13.5px;
font-weight: 700;
background: var(--fill);
color: var(--on-fill);
box-shadow: var(--shadow-sm);
margin-bottom: 16px;
transition: transform 0.12s;
}
.calpage .sn-new .ic {
width: 16px;
height: 16px;
}
.calpage .sn-new:hover {
transform: translateY(-1px);
}
/* 미니 달력 */
.calpage .minical {
margin-bottom: 4px;
}
.calpage .mc-head {
display: flex;
align-items: center;
gap: 6px;
padding: 0 4px 10px;
}
.calpage .mc-title {
font-size: 13.5px;
font-weight: 700;
}
.calpage .mc-nav {
margin-left: auto;
display: flex;
gap: 2px;
}
.calpage .mc-nav button {
width: 26px;
height: 26px;
border-radius: 8px;
display: grid;
place-items: center;
color: var(--muted);
transition:
background 0.13s,
color 0.13s;
}
.calpage .mc-nav button .ic {
width: 15px;
height: 15px;
}
.calpage .mc-nav button:hover {
background: var(--glass-2);
color: var(--ink);
}
.calpage .mc-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 1px;
}
.calpage .mc-wd {
font-size: 10px;
font-weight: 700;
color: var(--faint);
text-align: center;
padding-bottom: 5px;
}
.calpage .mc-day {
aspect-ratio: 1;
display: grid;
place-items: center;
border-radius: 8px;
font-size: 12px;
color: var(--ink-2);
font-variant-numeric: tabular-nums;
position: relative;
transition:
background 0.12s,
color 0.12s;
}
.calpage .mc-day.out {
color: var(--faint);
}
.calpage .mc-day:hover {
background: var(--glass-2);
}
.calpage .mc-day.today {
background: var(--coral);
color: #fff;
font-weight: 700;
}
.calpage .mc-day.sel {
box-shadow: inset 0 0 0 1.5px var(--ink);
font-weight: 700;
color: var(--ink);
}
.calpage .mc-day.today.sel {
color: #fff;
box-shadow: inset 0 0 0 1.5px var(--coral);
}
.calpage .mc-day .evdot {
position: absolute;
bottom: 3px;
width: 4px;
height: 4px;
border-radius: 50%;
background: var(--blue);
}
.calpage .mc-day.today .evdot {
background: rgba(255, 255, 255, 0.85);
}
.calpage .sn-label {
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--faint);
padding: 16px 4px 9px;
}
.calpage .cal-list {
display: flex;
flex-direction: column;
gap: 1px;
overflow-y: auto;
scrollbar-width: thin;
}
.calpage .cal-toggle {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
text-align: left;
padding: 8px;
border-radius: 10px;
font-size: 13.5px;
color: var(--ink-2);
white-space: nowrap;
transition: background 0.12s;
}
.calpage .cal-toggle:hover {
background: var(--glass-2);
}
.calpage .cal-toggle .cbx {
width: 17px;
height: 17px;
border-radius: 5px;
flex-shrink: 0;
display: grid;
place-items: center;
color: #fff;
transition: opacity 0.12s;
}
.calpage .cal-toggle .cbx .ic {
width: 12px;
height: 12px;
}
.calpage .cal-toggle.off .cbx {
opacity: 0.25;
}
.calpage .cal-toggle.off {
color: var(--muted);
}
.calpage .cal-toggle > span {
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
}
.calpage .cal-toggle .ct-n {
font-size: 11.5px;
color: var(--faint);
font-variant-numeric: tabular-nums;
flex-shrink: 0;
}
.calpage .sn-foot {
margin-top: auto;
padding-top: 14px;
border-top: 1px solid var(--line);
display: flex;
align-items: center;
gap: 10px;
}
.calpage .sn-foot .av {
width: 32px;
height: 32px;
border-radius: 50%;
background: linear-gradient(135deg, var(--coral), var(--violet));
color: #fff;
display: grid;
place-items: center;
font-weight: 700;
font-size: 13px;
flex-shrink: 0;
}
.calpage .sn-foot .txt {
min-width: 0;
flex: 1;
}
.calpage .sn-foot .txt b {
font-size: 13px;
font-weight: 600;
display: block;
}
.calpage .sn-foot .txt span {
font-size: 11.5px;
color: var(--muted);
}
/* -------- 메인 -------- */
.calpage .cmain {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
}
.calpage .chead {
display: flex;
align-items: center;
gap: 13px;
margin-bottom: 16px;
}
.calpage .ch-title {
font-family: var(--font-disp);
font-size: clamp(23px, 2.5vw, 31px);
font-weight: 700;
letter-spacing: -0.03em;
margin: 0;
white-space: nowrap;
}
.calpage .ch-arrow {
width: 38px;
height: 38px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--ink-2);
background: var(--glass);
border: 1px solid var(--glass-brd);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
box-shadow: var(--shadow-sm);
transition: color 0.13s;
}
.calpage .ch-arrow .ic {
width: 18px;
height: 18px;
}
.calpage .ch-arrow:hover {
color: var(--ink);
}
.calpage .ch-today {
padding: 9px 15px;
border-radius: 999px;
font-size: 13px;
font-weight: 600;
color: var(--ink-2);
background: var(--glass);
border: 1px solid var(--glass-brd);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
box-shadow: var(--shadow-sm);
white-space: nowrap;
transition: color 0.13s;
}
.calpage .ch-today:hover {
color: var(--ink);
}
.calpage .ch-spacer {
flex: 1;
}
.calpage .view-seg {
display: flex;
gap: 2px;
padding: 4px;
background: var(--glass);
border: 1px solid var(--glass-brd);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
border-radius: 13px;
box-shadow: var(--shadow-sm);
}
.calpage .view-seg button {
padding: 8px 16px;
border-radius: 10px;
font-size: 13px;
font-weight: 600;
color: var(--ink-2);
white-space: nowrap;
transition:
background 0.14s,
color 0.14s;
}
.calpage .view-seg button:hover {
color: var(--ink);
}
.calpage .view-seg button.on {
background: var(--fill);
color: var(--on-fill);
}
.calpage .cpanel {
background: var(--glass);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
border: 1px solid var(--glass-brd);
border-radius: var(--radius);
box-shadow: var(--shadow), var(--glass-hi);
overflow: hidden;
}
/* 이벤트 색 토큰: --evc(테두리/점), --evbg(배경), --evtx(글자) */
.calpage .tint-blue {
--evc: var(--blue);
--evbg: color-mix(in oklab, var(--blue) 15%, var(--card));
--evtx: color-mix(in oklab, var(--blue) 72%, var(--ink));
}
.calpage .tint-amber {
--evc: var(--amber);
--evbg: color-mix(in oklab, var(--amber) 17%, var(--card));
--evtx: color-mix(in oklab, var(--amber) 70%, var(--ink));
}
.calpage .tint-violet {
--evc: var(--violet);
--evbg: color-mix(in oklab, var(--violet) 15%, var(--card));
--evtx: color-mix(in oklab, var(--violet) 72%, var(--ink));
}
.calpage .tint-green {
--evc: var(--green);
--evbg: color-mix(in oklab, var(--green) 15%, var(--card));
--evtx: color-mix(in oklab, var(--green) 72%, var(--ink));
}
.calpage .tint-coral {
--evc: var(--coral);
--evbg: color-mix(in oklab, var(--coral) 16%, var(--card));
--evtx: color-mix(in oklab, var(--coral) 72%, var(--ink));
}
/* ====================== 주 뷰 ====================== */
.calpage .wk-head {
display: grid;
grid-template-columns: 56px repeat(7, 1fr);
border-bottom: 1px solid var(--line);
}
.calpage .wk-corner {
border-right: 1px solid var(--line);
}
.calpage .wk-dh {
text-align: center;
padding: 11px 4px;
border-right: 1px solid var(--line);
}
.calpage .wk-dh:last-child {
border-right: none;
}
.calpage .wk-dh .wd {
font-size: 11.5px;
font-weight: 600;
color: var(--muted);
}
.calpage .wk-dh .dn {
font-family: var(--font-disp);
font-size: 19px;
font-weight: 700;
margin-top: 3px;
width: 34px;
height: 34px;
line-height: 34px;
border-radius: 50%;
display: inline-block;
}
.calpage .wk-dh.today .wd {
color: var(--coral);
}
.calpage .wk-dh.today .dn {
background: var(--coral);
color: #fff;
}
.calpage .wk-dh.wknd .wd,
.calpage .wk-dh.wknd .dn {
color: var(--faint);
}
.calpage .wk-dh.today.wknd .dn {
color: #fff;
}
.calpage .wk-body {
display: grid;
grid-template-columns: 56px repeat(7, 1fr);
max-height: calc(100vh - 252px);
overflow-y: auto;
scrollbar-width: thin;
}
.calpage .wk-body::-webkit-scrollbar {
width: 8px;
}
.calpage .wk-body::-webkit-scrollbar-thumb {
background: var(--line-2);
border-radius: 99px;
}
.calpage .wk-times {
border-right: 1px solid var(--line);
overflow: visible;
}
.calpage .wk-thour {
height: 52px;
position: relative;
}
.calpage .wk-thour > span {
position: absolute;
top: -7px;
left: 2px;
right: 7px;
text-align: right;
font-size: 10px;
color: var(--faint);
font-family: var(--font-mono);
white-space: nowrap;
}
.calpage .wk-thour > span span {
position: static;
}
.calpage .wk-col {
border-right: 1px solid var(--line);
position: relative;
cursor: pointer;
}
.calpage .wk-col:hover {
background: color-mix(in oklab, var(--ink) 1.5%, transparent);
}
.calpage .wk-col:last-child {
border-right: none;
}
.calpage .wk-col.wknd {
background: color-mix(in oklab, var(--ink) 2.5%, transparent);
}
.calpage .wk-hr {
height: 52px;
border-bottom: 1px solid var(--line);
}
.calpage .wk-now {
position: absolute;
left: 0;
right: 0;
height: 0;
border-top: 2px solid var(--coral);
z-index: 4;
pointer-events: none;
}
.calpage .wk-now::before {
content: "";
position: absolute;
left: -3px;
top: -4px;
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--coral);
}
.calpage .ev {
position: absolute;
left: 3px;
right: 3px;
border-radius: 9px;
padding: 5px 8px;
font-size: 11.5px;
overflow: hidden;
cursor: pointer;
z-index: 3;
border-left: 3px solid var(--evc);
background: var(--evbg);
color: var(--evtx);
transition:
transform 0.1s,
box-shadow 0.12s;
}
.calpage .ev:hover {
transform: translateY(-1px);
box-shadow: 0 6px 14px -5px rgba(30, 26, 22, 0.4);
z-index: 6;
}
.calpage .ev .et {
font-weight: 700;
line-height: 1.22;
letter-spacing: -0.01em;
}
.calpage .ev .etm {
font-size: 10px;
opacity: 0.82;
margin-top: 1px;
font-variant-numeric: tabular-nums;
}
.calpage .ev.soon {
box-shadow: 0 0 0 1.5px var(--evc);
}
.calpage .ev.short {
padding: 3px 8px;
}
.calpage .ev.short .etm {
display: inline;
margin: 0 0 0 5px;
}
.calpage .ev.short .et {
display: inline;
}
/* ====================== 월 뷰 ====================== */
.calpage .mo-head {
display: grid;
grid-template-columns: repeat(7, 1fr);
border-bottom: 1px solid var(--line);
}
.calpage .mo-wd {
text-align: center;
padding: 10px;
font-size: 11.5px;
font-weight: 700;
color: var(--muted);
}
.calpage .mo-wd.wknd {
color: var(--faint);
}
.calpage .mo-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
grid-auto-rows: minmax(108px, 1fr);
}
.calpage .mo-cell {
border-right: 1px solid var(--line);
border-bottom: 1px solid var(--line);
padding: 7px 7px 6px;
min-width: 0;
display: flex;
flex-direction: column;
gap: 3px;
overflow: hidden;
}
.calpage .mo-cell:nth-child(7n) {
border-right: none;
}
.calpage .mo-cell.out {
background: color-mix(in oklab, var(--ink) 2%, transparent);
}
.calpage .mo-dn {
font-size: 12.5px;
font-weight: 600;
color: var(--ink-2);
font-variant-numeric: tabular-nums;
width: 24px;
height: 24px;
display: grid;
place-items: center;
border-radius: 50%;
}
.calpage .mo-cell.out .mo-dn {
color: var(--faint);
}
.calpage .mo-cell.today .mo-dn {
background: var(--coral);
color: #fff;
}
.calpage .mo-ev {
display: flex;
align-items: center;
gap: 5px;
font-size: 11px;
font-weight: 500;
color: var(--ink-2);
padding: 2px 6px;
border-radius: 6px;
background: var(--evbg);
cursor: pointer;
min-width: 0;
}
.calpage .mo-ev .pdot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--evc);
flex-shrink: 0;
}
.calpage .mo-ev .mt {
font-variant-numeric: tabular-nums;
color: var(--muted);
flex-shrink: 0;
font-size: 10px;
}
.calpage .mo-ev .mn {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.calpage .mo-more {
font-size: 10.5px;
color: var(--muted);
padding: 1px 6px;
cursor: pointer;
}
.calpage .mo-more:hover {
color: var(--ink);
}
/* ====================== 일 뷰 ====================== */
.calpage .day-wrap {
display: grid;
grid-template-columns: 1.55fr 1fr;
gap: 16px;
align-items: start;
}
.calpage .day-grid {
display: grid;
grid-template-columns: 56px 1fr;
max-height: calc(100vh - 252px);
overflow-y: auto;
scrollbar-width: thin;
}
.calpage .day-grid::-webkit-scrollbar {
width: 8px;
}
.calpage .day-grid::-webkit-scrollbar-thumb {
background: var(--line-2);
border-radius: 99px;
}
.calpage .day-col {
position: relative;
cursor: pointer;
}
.calpage .day-col:hover {
background: color-mix(in oklab, var(--ink) 1.5%, transparent);
}
.calpage .agenda {
padding: 20px;
}
.calpage .ag-head {
margin-bottom: 16px;
}
.calpage .ag-title {
font-size: 15px;
font-weight: 700;
letter-spacing: -0.01em;
}
.calpage .ag-sub {
font-size: 12.5px;
color: var(--muted);
margin-top: 3px;
}
.calpage .ag-item {
display: flex;
gap: 13px;
padding: 13px 0;
border-top: 1px solid var(--line);
cursor: pointer;
}
.calpage .ag-item:first-of-type {
border-top: none;
}
.calpage .ag-time {
width: 46px;
flex-shrink: 0;
font-size: 12.5px;
font-weight: 600;
color: var(--ink-2);
font-variant-numeric: tabular-nums;
padding-top: 1px;
}
.calpage .ag-time small {
display: block;
font-size: 11px;
color: var(--faint);
font-weight: 500;
}
.calpage .ag-body {
flex: 1;
min-width: 0;
position: relative;
padding-left: 14px;
}
.calpage .ag-body::before {
content: "";
position: absolute;
left: 0;
top: 3px;
bottom: 3px;
width: 3px;
border-radius: 3px;
background: var(--evc);
}
.calpage .ag-t {
font-size: 13.5px;
font-weight: 600;
letter-spacing: -0.01em;
line-height: 1.3;
}
.calpage .ag-m {
font-size: 12px;
color: var(--muted);
margin-top: 3px;
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.calpage .ag-m > span {
display: inline-flex;
align-items: center;
gap: 4px;
white-space: nowrap;
}
.calpage .ag-m .ic {
width: 13px;
height: 13px;
}
.calpage .ag-note {
font-size: 12px;
color: var(--ink-2);
margin-top: 7px;
background: var(--glass-2);
border: 1px solid var(--glass-brd);
border-radius: 9px;
padding: 8px 10px;
line-height: 1.4;
}
.calpage .ag-soon {
font-size: 10px;
font-weight: 700;
color: #fff;
background: var(--coral);
padding: 1px 7px;
border-radius: 999px;
}
.calpage .ag-people {
display: flex;
align-items: center;
margin-top: 8px;
}
.calpage .ag-people .pp {
width: 24px;
height: 24px;
border-radius: 50%;
display: grid;
place-items: center;
font-size: 10px;
font-weight: 700;
color: #fff;
border: 2px solid var(--card);
margin-left: -7px;
background: var(--violet);
}
.calpage .ag-people .pp:first-child {
margin-left: 0;
}
.calpage .ag-people .pl {
font-size: 11.5px;
color: var(--muted);
margin-left: 9px;
}
.calpage .ag-empty {
font-size: 13px;
color: var(--faint);
text-align: center;
padding: 30px 10px;
}
/* AI 한 줄 브리핑 */
.calpage .ai-strip {
display: flex;
align-items: flex-start;
gap: 11px;
background: var(--glass);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
border: 1px solid var(--glass-brd);
border-radius: var(--radius-sm);
box-shadow: var(--shadow-sm);
padding: 13px 15px;
margin-bottom: 16px;
}
.calpage .ai-strip .ai-ic {
width: 30px;
height: 30px;
border-radius: 9px;
flex-shrink: 0;
display: grid;
place-items: center;
background: color-mix(in oklab, var(--coral) 16%, transparent);
color: var(--coral);
}
.calpage .ai-strip .ai-ic .ic {
width: 16px;
height: 16px;
}
.calpage .ai-strip p {
margin: 0;
font-size: 13px;
line-height: 1.5;
color: var(--ink-2);
}
.calpage .ai-strip p b {
color: var(--ink);
font-weight: 700;
border-bottom: 2px solid color-mix(in oklab, var(--coral) 55%, transparent);
}
/* 상세 팝오버 */
.calpage .dp-backdrop {
position: fixed;
inset: 0;
z-index: 60;
}
.calpage .epop {
position: fixed;
z-index: 61;
width: 300px;
background: var(--card);
border: 1px solid var(--line);
border-radius: 16px;
box-shadow: 0 24px 60px -20px rgba(26, 22, 18, 0.45);
padding: 18px;
animation: cal-pop 0.16s ease;
}
@keyframes cal-pop {
from {
opacity: 0;
transform: scale(0.96);
}
to {
opacity: 1;
transform: none;
}
}
.calpage .epop-bar {
height: 4px;
border-radius: 99px;
background: var(--evc);
margin-bottom: 13px;
}
.calpage .epop-title {
font-size: 16px;
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.3;
margin-bottom: 12px;
}
.calpage .epop-row {
display: flex;
align-items: center;
gap: 9px;
font-size: 13px;
color: var(--ink-2);
padding: 5px 0;
}
.calpage .epop-row .ic {
width: 15px;
height: 15px;
color: var(--muted);
flex-shrink: 0;
}
.calpage .epop-cat {
display: inline-flex;
align-items: center;
gap: 6px;
}
.calpage .epop-cat .pdot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--evc);
}
.calpage .epop-note {
font-size: 12.5px;
color: var(--ink-2);
line-height: 1.45;
margin-top: 10px;
padding-top: 11px;
border-top: 1px solid var(--line);
}
.calpage .epop-acts {
display: flex;
gap: 8px;
margin-top: 14px;
}
.calpage .epop-acts button {
flex: 1;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 9px;
border-radius: 10px;
font-size: 13px;
font-weight: 600;
transition: background 0.13s;
}
.calpage .epop-acts .ic {
width: 15px;
height: 15px;
}
.calpage .epop-acts .edit {
background: var(--card-2);
color: var(--ink);
}
.calpage .epop-acts .edit:hover {
background: var(--card-3);
}
.calpage .epop-acts .del {
background: color-mix(in oklab, var(--coral) 12%, transparent);
color: var(--coral);
flex: 0 0 auto;
padding: 9px 13px;
}
/* ====================== 일정 생성/편집 모달 (EvEditor) ====================== */
.calpage .eed {
position: fixed;
z-index: 61;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: min(440px, calc(100vw - 32px));
max-height: calc(100vh - 48px);
overflow-y: auto;
background: var(--card);
border: 1px solid var(--line);
border-radius: 18px;
box-shadow: 0 30px 70px -22px rgba(26, 22, 18, 0.5);
padding: 22px;
animation: cal-pop 0.16s ease;
}
.calpage .eed-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.calpage .eed-head h2 {
font-size: 18px;
font-weight: 700;
letter-spacing: -0.02em;
}
.calpage .eed-x {
width: 30px;
height: 30px;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 8px;
color: var(--muted);
}
.calpage .eed-x:hover {
background: var(--card-2);
color: var(--ink);
}
.calpage .eed-field {
display: flex;
flex-direction: column;
gap: 5px;
margin-bottom: 12px;
}
.calpage .eed-field > span {
font-size: 12px;
font-weight: 600;
color: var(--ink-2);
}
.calpage .eed-field input,
.calpage .eed-field select,
.calpage .eed-field textarea {
width: 100%;
padding: 9px 11px;
border: 1px solid var(--line);
border-radius: 10px;
background: var(--card-2);
color: var(--ink);
font-size: 13.5px;
font-family: inherit;
}
.calpage .eed-field input:focus,
.calpage .eed-field select:focus,
.calpage .eed-field textarea:focus {
outline: 2px solid color-mix(in oklab, var(--blue) 50%, transparent);
outline-offset: 1px;
}
.calpage .eed-field textarea {
resize: vertical;
}
.calpage .eed-times {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.calpage .eed-check {
display: inline-flex;
align-items: center;
gap: 7px;
font-size: 13px;
color: var(--ink-2);
margin-bottom: 12px;
cursor: pointer;
}
.calpage .eed-check input {
width: 15px;
height: 15px;
}
.calpage .eed-err {
font-size: 12.5px;
color: var(--coral);
margin: 4px 0 10px;
}
.calpage .eed-acts {
display: flex;
align-items: center;
gap: 8px;
margin-top: 8px;
}
.calpage .eed-spacer {
flex: 1;
}
.calpage .eed-acts button {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 9px 15px;
border-radius: 10px;
font-size: 13px;
font-weight: 600;
transition: background 0.13s;
}
.calpage .eed-acts button:disabled {
opacity: 0.55;
}
.calpage .eed-acts .ic {
width: 15px;
height: 15px;
}
.calpage .eed-del {
background: color-mix(in oklab, var(--coral) 12%, transparent);
color: var(--coral);
}
.calpage .eed-cancel {
background: var(--card-2);
color: var(--ink-2);
}
.calpage .eed-save {
background: var(--ink);
color: var(--card);
}
.calpage .eed-save:hover:not(:disabled) {
background: var(--ink-2);
}
/* ====================== 집중 블록 (Focus of the Day) ====================== */
.calpage .ch-focus {
display: inline-flex;
align-items: center;
gap: 6px;
white-space: nowrap;
padding: 8px 14px;
border-radius: 999px;
font-size: 13px;
font-weight: 600;
color: var(--ink-2);
background: var(--glass);
border: 1px solid var(--glass-brd);
-webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur);
box-shadow: var(--shadow-sm);
transition:
color 0.13s,
background 0.13s;
}
.calpage .ch-focus .ic {
width: 15px;
height: 15px;
color: var(--muted);
transition: color 0.13s;
}
.calpage .ch-focus:hover {
color: var(--ink);
}
.calpage .ch-focus.on {
background: var(--violet);
color: #fff;
border-color: transparent;
}
.calpage .ch-focus.on .ic {
color: #fff;
}
.calpage .fblock {
position: absolute;
left: 3px;
right: 3px;
z-index: 2;
border-radius: 9px;
padding: 5px 8px;
overflow: hidden;
border: 1.5px dashed color-mix(in oklab, var(--violet) 52%, transparent);
background: color-mix(in oklab, var(--violet) 9%, var(--card));
color: color-mix(in oklab, var(--violet) 72%, var(--ink));
}
.calpage .fblock.deep {
border-color: color-mix(in oklab, var(--coral) 54%, transparent);
background: color-mix(in oklab, var(--coral) 10%, var(--card));
color: color-mix(in oklab, var(--coral) 72%, var(--ink));
}
.calpage .fblock .fb-k {
display: flex;
align-items: center;
gap: 4px;
font-size: 9.5px;
font-weight: 700;
letter-spacing: 0.02em;
opacity: 0.92;
}
.calpage .fblock .fb-k .ic {
width: 11px;
height: 11px;
}
.calpage .fblock .fbt {
font-size: 11.5px;
font-weight: 700;
line-height: 1.2;
margin-top: 2px;
letter-spacing: -0.01em;
}
.calpage .fblock.short .fbt {
display: inline;
margin: 0 0 0 5px;
}
.calpage .fblock.short .fb-k {
display: inline-flex;
}
/* 일 뷰 사이드 (집중 카드 + 어젠다) */
.calpage .day-side {
display: flex;
flex-direction: column;
gap: 16px;
min-width: 0;
}
.calpage .focus-card {
padding: 18px;
}
.calpage .fc-head {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
}
.calpage .fc-ic {
width: 32px;
height: 32px;
border-radius: 9px;
flex-shrink: 0;
display: grid;
place-items: center;
background: var(--violet);
color: #fff;
}
.calpage .fc-ic .ic {
width: 16px;
height: 16px;
}
.calpage .fc-h b {
display: block;
font-size: 14px;
font-weight: 700;
letter-spacing: -0.01em;
}
.calpage .fc-h span {
font-size: 11.5px;
color: var(--muted);
}
.calpage .fc-note {
font-size: 12.5px;
color: var(--ink-2);
line-height: 1.5;
margin: 0 0 8px;
}
.calpage .fc-item {
display: flex;
gap: 11px;
padding: 10px 0;
border-top: 1px solid var(--line);
}
.calpage .fci-time {
font-family: var(--font-mono);
font-size: 12px;
color: var(--ink-2);
width: 42px;
flex-shrink: 0;
padding-top: 1px;
}
.calpage .fci-body {
flex: 1;
min-width: 0;
}
.calpage .fci-tag {
font-size: 9.5px;
font-weight: 700;
letter-spacing: 0.02em;
padding: 2px 8px;
border-radius: 999px;
color: var(--ink-2);
background: var(--card-2);
}
.calpage .fci-tag.deep {
color: #fff;
background: var(--coral);
}
.calpage .fci-title {
font-size: 13px;
font-weight: 600;
letter-spacing: -0.01em;
margin-top: 6px;
line-height: 1.3;
}
.calpage .fc-item.deep .fci-title {
font-weight: 700;
}
/* 어젠다 액션 아이템 */
.calpage .ag-actions {
margin-top: 9px;
padding: 10px 12px;
background: var(--glass-2);
border: 1px solid var(--glass-brd);
border-radius: 9px;
}
.calpage .aga-head {
display: flex;
align-items: center;
gap: 6px;
font-size: 11px;
font-weight: 700;
color: var(--violet);
margin-bottom: 7px;
}
.calpage .aga-head .ic {
width: 12px;
height: 12px;
}
.calpage .aga-row {
display: flex;
align-items: center;
gap: 8px;
padding: 4px 0;
}
.calpage .aga-check {
width: 16px;
height: 16px;
border-radius: 5px;
border: 2px solid var(--line-2);
display: grid;
place-items: center;
color: transparent;
flex-shrink: 0;
}
.calpage .aga-check .ic {
width: 10px;
height: 10px;
}
.calpage .aga-text {
flex: 1;
min-width: 0;
font-size: 12px;
font-weight: 500;
line-height: 1.3;
}
.calpage .aga-who {
font-size: 10.5px;
color: var(--muted);
flex-shrink: 0;
}
/* 팝오버 액션 아이템 */
.calpage .epop-actions {
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid var(--line);
}
.calpage .epa-head {
display: flex;
align-items: center;
gap: 6px;
font-size: 11.5px;
font-weight: 700;
color: var(--violet);
margin-bottom: 9px;
}
.calpage .epa-head .ic {
width: 13px;
height: 13px;
}
.calpage .epa-head .n {
margin-left: auto;
font-size: 11px;
font-weight: 700;
color: var(--muted);
background: var(--card-2);
border-radius: 999px;
padding: 1px 7px;
}
.calpage .epa-row {
display: flex;
align-items: center;
gap: 8px;
padding: 5px 0;
}
.calpage .epa-check {
width: 17px;
height: 17px;
border-radius: 5px;
border: 2px solid var(--line-2);
display: grid;
place-items: center;
color: transparent;
flex-shrink: 0;
}
.calpage .epa-check .ic {
width: 11px;
height: 11px;
}
.calpage .epa-text {
flex: 1;
min-width: 0;
font-size: 12.5px;
font-weight: 500;
line-height: 1.3;
}
.calpage .epa-who {
font-size: 10.5px;
color: var(--muted);
flex-shrink: 0;
}
.calpage .epa-add {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
width: 100%;
margin-top: 10px;
padding: 9px;
border-radius: 10px;
font-size: 12.5px;
font-weight: 700;
background: var(--violet);
color: #fff;
transition: filter 0.13s;
}
.calpage .epa-add .ic {
width: 14px;
height: 14px;
}
.calpage .epa-add:hover {
filter: brightness(1.08);
}
.calpage .epa-add:disabled {
cursor: default;
}
.calpage .epa-add.done {
background: color-mix(in oklab, var(--violet) 16%, transparent);
color: var(--violet);
}
.calpage .epa-add.done:hover {
filter: none;
}
/* 진입 애니메이션 */
.calpage.entered .twork > * {
animation: cal-rise 0.45s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}
.calpage.entered .cmain {
animation-delay: 0.05s;
}
@keyframes cal-rise {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: none;
}
}
/* 로딩 스켈레톤 / 에러 */
.calpage .cal-skel-col {
display: flex;
flex-direction: column;
gap: 8px;
}
.calpage .cal-skel {
border-radius: 12px;
background: var(--glass-2);
border: 1px solid var(--glass-brd);
animation: cal-skel 1.3s ease infinite;
}
@keyframes cal-skel {
0%,
100% {
opacity: 0.55;
}
50% {
opacity: 0.9;
}
}
.calpage .cal-error {
display: flex;
align-items: center;
gap: 10px;
margin: 24px 0;
padding: 16px 18px;
border-radius: var(--radius-sm);
background: color-mix(in oklab, var(--coral) 9%, var(--card));
border: 1px solid color-mix(in oklab, var(--coral) 30%, transparent);
font-size: 13.5px;
font-weight: 600;
color: var(--ink);
}
.calpage .cal-error .ic {
width: 16px;
height: 16px;
color: var(--coral);
}
.calpage .cal-error button {
margin-left: auto;
padding: 8px 14px;
border-radius: 10px;
font-size: 12.5px;
font-weight: 700;
background: var(--fill);
color: var(--on-fill);
}
/* ====================== 회의 도우미 드로어 ====================== */
.calpage .mdrawer {
position: fixed;
top: 0;
right: 0;
bottom: 0;
z-index: 65;
width: min(440px, 94vw);
display: flex;
flex-direction: column;
background: var(--card);
border-left: 1px solid var(--line);
box-shadow: -28px 0 70px -30px rgba(26, 22, 18, 0.4);
animation: cal-md-in 0.32s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}
@keyframes cal-md-in {
from {
opacity: 0;
transform: translateX(36px);
}
to {
opacity: 1;
transform: none;
}
}
.calpage .md-head {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 20px 20px 14px;
}
.calpage .md-ic {
width: 38px;
height: 38px;
border-radius: 12px;
flex-shrink: 0;
display: grid;
place-items: center;
background: color-mix(in oklab, var(--evc) 16%, transparent);
color: var(--evc);
}
.calpage .md-ic .ic {
width: 19px;
height: 19px;
}
.calpage .md-ht {
flex: 1;
min-width: 0;
line-height: 1.3;
}
.calpage .md-k {
display: block;
font-size: 10.5px;
font-weight: 800;
letter-spacing: 0.07em;
text-transform: uppercase;
color: var(--evc);
margin-bottom: 2px;
}
.calpage .md-ht b {
display: block;
font-size: 17px;
font-weight: 700;
letter-spacing: -0.02em;
}
.calpage .md-sub {
display: block;
font-size: 12px;
color: var(--muted);
margin-top: 3px;
}
.calpage .md-x {
width: 30px;
height: 30px;
border-radius: 9px;
display: grid;
place-items: center;
color: var(--muted);
flex-shrink: 0;
}
.calpage .md-x:hover {
background: var(--card-2);
color: var(--ink);
}
.calpage .md-x .ic {
width: 16px;
height: 16px;
}
.calpage .md-bar {
display: flex;
align-items: center;
gap: 9px;
flex-wrap: wrap;
padding: 0 20px 14px;
border-bottom: 1px solid var(--line);
}
.calpage .md-phase {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 11.5px;
font-weight: 700;
padding: 4px 10px;
border-radius: 999px;
}
.calpage .md-phase .ic {
width: 12px;
height: 12px;
}
.calpage .md-phase.done {
background: color-mix(in oklab, var(--green) 15%, transparent);
color: var(--green);
}
.calpage .md-phase.up {
background: color-mix(in oklab, var(--blue) 13%, transparent);
color: var(--blue);
}
.calpage .md-phase.live {
background: color-mix(in oklab, var(--coral) 14%, transparent);
color: var(--coral);
}
.calpage .md-pulse {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--coral);
animation: cal-md-pulse 1.4s ease infinite;
}
@media (prefers-reduced-motion: reduce) {
.calpage .md-pulse {
animation: none;
}
}
@keyframes cal-md-pulse {
0%,
100% {
box-shadow: 0 0 0 0 color-mix(in oklab, var(--coral) 45%, transparent);
}
55% {
box-shadow: 0 0 0 5px transparent;
}
}
.calpage .md-meta {
font-size: 11.5px;
color: var(--muted);
}
.calpage .md-body {
flex: 1;
overflow-y: auto;
padding: 6px 20px 24px;
}
.calpage .md-sec {
padding: 15px 0 4px;
border-bottom: 1px solid var(--line);
}
.calpage .md-sec:last-child {
border-bottom: none;
}
.calpage .md-sh {
display: flex;
align-items: center;
gap: 7px;
font-size: 12.5px;
font-weight: 700;
margin-bottom: 9px;
}
.calpage .md-sh .ic {
width: 14px;
height: 14px;
color: var(--evc);
}
.calpage .md-hint {
margin-left: auto;
font-size: 11px;
font-weight: 600;
color: var(--muted);
}
.calpage .md-note {
margin: 0 0 10px;
font-size: 13px;
line-height: 1.55;
color: var(--ink-2);
}
.calpage .md-points {
margin: 0 0 10px;
padding-left: 19px;
display: flex;
flex-direction: column;
gap: 6px;
}
.calpage .md-points li {
font-size: 13px;
line-height: 1.45;
color: var(--ink-2);
}
.calpage .md-points li::marker {
font-weight: 700;
color: var(--evc);
}
.calpage .md-sum {
margin: 0 0 10px;
padding-left: 17px;
display: flex;
flex-direction: column;
gap: 6px;
}
.calpage .md-sum li {
font-size: 13px;
line-height: 1.5;
color: var(--ink-2);
}
.calpage .md-sum li::marker {
color: var(--evc);
}
.calpage .md-chk {
display: flex;
align-items: center;
gap: 8px;
padding: 5px 0;
font-size: 12.5px;
font-weight: 500;
margin-bottom: 2px;
}
.calpage .md-cbx {
width: 17px;
height: 17px;
border-radius: 5px;
border: 2px solid var(--line-2);
display: grid;
place-items: center;
color: transparent;
flex-shrink: 0;
}
.calpage .md-cbx .ic {
width: 11px;
height: 11px;
}
.calpage .md-chk.done .md-cbx {
background: var(--green);
border-color: var(--green);
color: #fff;
}
.calpage .md-chk.done {
color: var(--muted);
}
.calpage .md-who {
margin-left: auto;
font-size: 11px;
color: var(--muted);
flex-shrink: 0;
}
.calpage .md-tag {
font-size: 10px;
font-weight: 800;
padding: 2px 7px;
border-radius: 999px;
flex-shrink: 0;
}
.calpage .md-tag.warn {
background: color-mix(in oklab, var(--coral) 15%, transparent);
color: var(--coral);
}
.calpage .md-chk .md-tag.warn {
margin-left: 6px;
}
.calpage .md-insight {
margin: 0 0 8px;
padding: 9px 12px;
border-radius: 10px;
background: var(--card-2);
font-size: 12.5px;
line-height: 1.5;
color: var(--ink-2);
}
.calpage .md-insight b {
color: var(--ink);
}
.calpage .md-docs {
display: flex;
flex-wrap: wrap;
gap: 7px;
padding: 14px 0 4px;
}
.calpage .md-doc {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 12px;
font-weight: 600;
padding: 6px 11px;
border-radius: 999px;
border: 1px solid var(--line-2);
color: var(--ink-2);
cursor: pointer;
}
.calpage .md-doc:hover {
border-color: var(--evc);
color: var(--evc);
}
.calpage .md-doc .ic {
width: 13px;
height: 13px;
}
.calpage .md-sig {
display: flex;
align-items: center;
gap: 9px;
padding: 6px 0;
font-size: 12.5px;
}
.calpage .md-sig-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
}
.calpage .md-sig-k {
font-weight: 700;
flex-shrink: 0;
min-width: 58px;
}
.calpage .md-sig-v {
color: var(--ink-2);
}
.calpage .md-decision {
display: flex;
align-items: center;
gap: 8px;
font-size: 12.5px;
font-weight: 600;
padding: 8px 11px;
border-radius: 10px;
margin-bottom: 8px;
background: color-mix(in oklab, var(--green) 10%, transparent);
color: color-mix(in oklab, var(--green) 70%, var(--ink));
}
.calpage .md-decision .ic {
width: 13px;
height: 13px;
color: var(--green);
flex-shrink: 0;
}
.calpage .md-act {
display: flex;
align-items: center;
gap: 8px;
padding: 7px 0;
border-bottom: 1px dashed var(--line);
}
.calpage .md-act:last-of-type {
border-bottom: none;
}
.calpage .md-act-check {
width: 17px;
height: 17px;
border-radius: 5px;
border: 2px solid var(--line-2);
display: grid;
place-items: center;
color: transparent;
flex-shrink: 0;
}
.calpage .md-act-check .ic {
width: 11px;
height: 11px;
}
.calpage .md-act.added .md-act-check {
background: var(--violet);
border-color: var(--violet);
color: #fff;
}
.calpage .md-act-text {
flex: 1;
min-width: 0;
font-size: 12.5px;
font-weight: 500;
line-height: 1.35;
}
.calpage .md-act-who {
font-size: 11px;
color: var(--muted);
flex-shrink: 0;
}
.calpage .md-act-add {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 11px;
font-weight: 700;
padding: 4px 9px;
border-radius: 999px;
border: 1px solid var(--line-2);
color: var(--ink-2);
flex-shrink: 0;
transition: all 0.13s;
}
.calpage .md-act-add .ic {
width: 11px;
height: 11px;
}
.calpage .md-act-add:hover {
border-color: var(--violet);
color: var(--violet);
}
.calpage .md-act-done {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 11px;
font-weight: 700;
color: var(--green);
flex-shrink: 0;
}
.calpage .md-act-done .ic {
width: 11px;
height: 11px;
}
.calpage .md-addall {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 7px;
width: 100%;
margin: 10px 0 8px;
padding: 10px;
border-radius: 11px;
font-size: 12.5px;
font-weight: 700;
background: var(--fill);
color: var(--on-fill);
transition: filter 0.13s;
}
.calpage .md-addall .ic {
width: 14px;
height: 14px;
}
.calpage .md-addall:hover {
filter: brightness(1.15);
}
.calpage .md-allok {
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
margin: 10px 0 8px;
padding: 9px;
border-radius: 11px;
font-size: 12px;
font-weight: 700;
background: color-mix(in oklab, var(--green) 11%, transparent);
color: var(--green);
}
.calpage .md-allok .ic {
width: 13px;
height: 13px;
}
/* 회의 도우미 진입점 (어젠다·팝오버) */
.calpage .meet-open {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
width: 100%;
margin-top: 9px;
padding: 8px;
border-radius: 10px;
font-size: 12px;
font-weight: 700;
border: 1px solid color-mix(in oklab, var(--evc) 38%, transparent);
color: var(--evtx);
background: color-mix(in oklab, var(--evc) 7%, transparent);
transition: all 0.13s;
}
.calpage .meet-open .ic {
width: 13px;
height: 13px;
}
.calpage .meet-open:hover {
background: color-mix(in oklab, var(--evc) 14%, transparent);
}
@media (max-width: 1080px) {
.calpage .subnav {
display: none;
}
.calpage .day-wrap {
grid-template-columns: 1fr;
}
}
@media (max-width: 760px) {
.calpage {
padding: 0 14px 22px;
}
.calpage .ch-spacer {
display: none;
}
.calpage .view-seg {
order: 5;
width: 100%;
justify-content: center;
margin-top: 8px;
}
.calpage .chead {
flex-wrap: wrap;
}
}
/* ── phase-18: 반복/알림/참석자/RSVP · 드래그 이동·리사이즈 ── */
/* 참석자 목록 + 상태 배지 */
.calpage .epop-attendees {
margin-top: 4px;
}
.calpage .epop-att {
display: flex;
align-items: center;
gap: 8px;
padding: 2px 0 2px 22px;
font-size: 12px;
}
.calpage .epop-att .epa-name {
color: var(--ink);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.calpage .epa-status {
font-size: 10.5px;
padding: 1px 7px;
border-radius: 999px;
margin-left: auto;
font-weight: 600;
}
.calpage .epa-status.st-accepted {
background: color-mix(in srgb, var(--green) 18%, transparent);
color: var(--green);
}
.calpage .epa-status.st-declined {
background: color-mix(in srgb, var(--coral) 18%, transparent);
color: var(--coral);
}
.calpage .epa-status.st-tentative {
background: color-mix(in srgb, var(--amber) 20%, transparent);
color: var(--amber);
}
.calpage .epa-status.st-needsAction,
.calpage .epa-status.st-notResponded {
background: var(--card-3);
color: var(--muted);
}
/* RSVP 버튼 */
.calpage .epop-rsvp {
display: flex;
align-items: center;
gap: 6px;
margin: 10px 0 2px;
}
.calpage .rsvp-label {
font-size: 11px;
color: var(--muted);
margin-right: 2px;
}
.calpage .rsvp-btn {
flex: 1;
font-size: 12px;
padding: 6px 0;
border-radius: 8px;
border: 1px solid var(--line);
background: var(--card);
cursor: pointer;
transition:
background 0.12s,
border-color 0.12s;
}
.calpage .rsvp-btn:hover {
background: var(--card-3);
}
.calpage .rsvp-btn.st-accepted.on {
background: color-mix(in srgb, var(--green) 16%, transparent);
border-color: var(--green);
color: var(--green);
}
.calpage .rsvp-btn.st-tentative.on {
background: color-mix(in srgb, var(--amber) 18%, transparent);
border-color: var(--amber);
color: var(--amber);
}
.calpage .rsvp-btn.st-declined.on {
background: color-mix(in srgb, var(--coral) 16%, transparent);
border-color: var(--coral);
color: var(--coral);
}
/* 드래그 이동/리사이즈 */
.calpage .ev.draggable {
cursor: grab;
}
.calpage .ev.dragging {
pointer-events: none; /* elementFromPoint 가 아래 컬럼을 찾도록 */
opacity: 0.85;
box-shadow: 0 10px 24px -6px rgba(30, 26, 22, 0.5);
z-index: 20;
transition: none;
cursor: grabbing;
}
.calpage .ev .ev-resize {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 7px;
cursor: ns-resize;
}
.calpage .ev.short .ev-resize {
height: 5px;
}