@@ -2042,6 +2042,153 @@ span.diary-dotted-flow:focus {
20422042 }
20432043}
20442044
2045+ /* ── Punctuation Panel ── */
2046+ .punctuation-panel {
2047+ position : fixed;
2048+ right : 16px ;
2049+ top : 50% ;
2050+ transform : translateY (-50% ) translateX (calc (100% + 16px ));
2051+ transition : transform 0.3s cubic-bezier (.4 , 0 , .2 , 1 );
2052+ z-index : 1050 ;
2053+ display : flex;
2054+ align-items : center;
2055+ }
2056+
2057+ .punctuation-panel .is-open {
2058+ transform : translateY (-50% ) translateX (0 );
2059+ }
2060+
2061+ .punctuation-toggle {
2062+ position : absolute;
2063+ left : -48px ;
2064+ width : 40px ;
2065+ height : 40px ;
2066+ background : var (--brand-white );
2067+ border : 1px solid var (--color-border-light );
2068+ border-radius : 50% ;
2069+ display : flex;
2070+ align-items : center;
2071+ justify-content : center;
2072+ cursor : pointer;
2073+ box-shadow : var (--shadow-medium );
2074+ color : var (--color-text-secondary );
2075+ font-size : 1rem ;
2076+ transition : opacity 0.2s , color 0.2s , background 0.2s ;
2077+ }
2078+
2079+ .punctuation-toggle : hover {
2080+ color : var (--brand-primary );
2081+ background : var (--color-background-soft );
2082+ }
2083+
2084+ .punctuation-panel .is-open .punctuation-toggle {
2085+ opacity : 0 ;
2086+ pointer-events : none;
2087+ transform : scale (0.9 );
2088+ }
2089+
2090+ .punctuation-content {
2091+ background : var (--brand-white );
2092+ border : 1px solid var (--color-border-light );
2093+ border-radius : 12px ;
2094+ padding : 12px ;
2095+ box-shadow : var (--shadow-popup );
2096+ width : fit-content;
2097+ max-width : 260px ;
2098+ display : flex;
2099+ flex-direction : column;
2100+ gap : 8px ;
2101+ }
2102+
2103+ .punctuation-footer {
2104+ display : flex;
2105+ align-items : center;
2106+ gap : 10px ;
2107+ min-height : 24px ;
2108+ padding-top : 8px ;
2109+ border-top : 1px solid var (--color-border-light );
2110+ }
2111+
2112+ .punctuation-close {
2113+ background : var (--brand-white );
2114+ border : 1px solid var (--color-border-medium );
2115+ box-shadow : 0 1px 3px rgba (0 , 0 , 0 , 0.08 );
2116+ cursor : pointer;
2117+ color : var (--color-text-primary );
2118+ font-size : 0.85rem ;
2119+ padding : 4px 8px ;
2120+ border-radius : 6px ;
2121+ flex : 0 0 auto;
2122+ line-height : 1 ;
2123+ transition : all 0.15s ease;
2124+ }
2125+
2126+ .punctuation-close : hover {
2127+ color : var (--color-error );
2128+ border-color : rgba (220 , 53 , 69 , 0.4 );
2129+ background : # fffafa ;
2130+ box-shadow : 0 2px 4px rgba (220 , 53 , 69 , 0.1 );
2131+ }
2132+
2133+ .punctuation-close : active {
2134+ transform : translateY (1px );
2135+ box-shadow : none;
2136+ }
2137+
2138+ .punctuation-grid {
2139+ display : grid;
2140+ grid-template-columns : repeat (5 , 38px );
2141+ grid-auto-rows : 38px ;
2142+ gap : 4px ;
2143+ justify-content : center;
2144+ }
2145+
2146+ .punctuation-tile {
2147+ display : flex;
2148+ align-items : center;
2149+ justify-content : center;
2150+ border : none;
2151+ border-radius : 6px ;
2152+ background : transparent;
2153+ cursor : pointer;
2154+ font-size : 1.1rem ;
2155+ color : var (--color-text-primary );
2156+ transition : background 0.15s , color 0.15s , transform 0.1s ;
2157+ user-select : none;
2158+ overflow : hidden;
2159+ white-space : nowrap;
2160+ }
2161+
2162+ .punctuation-tile : hover {
2163+ background : # e9ecef ;
2164+ color : var (--color-text-primary );
2165+ transform : translateY (-2px ) scale (1.05 );
2166+ box-shadow : 0 2px 5px rgba (0 , 0 , 0 , 0.06 );
2167+ }
2168+
2169+ .punctuation-tile : active {
2170+ background : # dee2e6 ;
2171+ transform : translateY (0 ) scale (0.95 );
2172+ box-shadow : none;
2173+ }
2174+
2175+ .punctuation-tile .is-copied {
2176+ background : var (--brand-primary );
2177+ color : var (--brand-white );
2178+ }
2179+
2180+ .punctuation-tooltip {
2181+ flex : 1 1 auto;
2182+ text-align : left;
2183+ font-size : 0.75rem ;
2184+ line-height : 1.25 ;
2185+ color : var (--color-text-secondary );
2186+ min-height : 0 ;
2187+ display : flex;
2188+ align-items : center;
2189+ justify-content : flex-start;
2190+ }
2191+
20452192@media print {
20462193 .modal-overlay {
20472194 position : static;
0 commit comments