AppFrame.module.css 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. .frame {
  2. position: relative; /* anchors the drag handles, which straddle column borders */
  3. display: grid;
  4. grid-template-rows: 100%;
  5. height: 100%;
  6. overflow: hidden;
  7. background: var(--dsw-alias-bg-base);
  8. /* Collapse/expand animates the tracks on the deepsuite sider curve
  9. (--ds-ease-in-out / --ds-transition-duration-slow, ui-theme base.css). */
  10. transition: grid-template-columns var(--ds-transition-duration-slow) var(--ds-ease-in-out);
  11. }
  12. /* Dragging writes widths at pointer cadence; easing them would detach the
  13. column from the handle. */
  14. .frame[data-dragging] {
  15. transition: none;
  16. }
  17. @media (prefers-reduced-motion: reduce) {
  18. .frame {
  19. transition: none;
  20. }
  21. }
  22. .sidebarCol {
  23. min-width: 0;
  24. overflow: hidden;
  25. background: var(--dsw-specific-sidebar-fill);
  26. border-right: 0.5px solid var(--dsw-alias-border-l3);
  27. }
  28. .centerCol {
  29. min-width: 0;
  30. display: flex;
  31. flex-direction: column;
  32. overflow: hidden;
  33. }
  34. /* macOS desktop: the frame goes transparent so window vibrancy reaches the
  35. sidebar column, which keeps only a translucent tint; the centre paints the
  36. base background itself to stay opaque. The sidebar/centre separator moves
  37. to the opaque centre: on the translucent sidebar the alpha border mixes
  38. with the wallpaper and reads as a dark seam. */
  39. :global([data-platform='darwin']) .frame {
  40. background: transparent;
  41. }
  42. :global([data-platform='darwin']) .sidebarCol {
  43. background: color-mix(in srgb, var(--dsw-specific-sidebar-fill) 60%, transparent);
  44. border-right: none;
  45. }
  46. :global([data-platform='darwin']) .centerCol {
  47. background: var(--dsw-alias-bg-base);
  48. border-left: 0.5px solid var(--dsw-alias-border-l3);
  49. }
  50. /* The darwin closed sidebar has no rail: the centre reaches the window edge,
  51. where a separator would draw a seam against nothing. */
  52. :global([data-platform='darwin']) [data-sidebar-collapsed] .centerCol {
  53. border-left: none;
  54. }
  55. /* Drag handles are frame children (columns clip overflow): an 8px hit strip
  56. centered on the column border via inline left, above column content. No
  57. handle draws a visible pill: the details column was the only one that did,
  58. and the right column never had one. The right handle sits above the right
  59. panel (which states z-index 10) so it stays grabbable when the panel hangs
  60. over the centre. */
  61. .handle {
  62. position: absolute;
  63. top: 0;
  64. bottom: 0;
  65. width: 8px;
  66. margin-left: -4px;
  67. cursor: col-resize;
  68. z-index: 11;
  69. touch-action: none;
  70. /* Rides the same curve as the tracks so the pill stays on the moving
  71. border during collapse/expand; paused while dragging (frame rule). */
  72. transition: left var(--ds-transition-duration-slow) var(--ds-ease-in-out);
  73. }
  74. .frame[data-dragging] .handle {
  75. transition: none;
  76. }
  77. /* Fullscreen covers the frame while its underlying columns enter or exit. */
  78. .frame[data-rightbar-fullscreen],
  79. .frame[data-rightbar-fullscreen] .handle,
  80. .frame[data-rightbar-instant],
  81. .frame[data-rightbar-instant] .handle {
  82. transition: none;
  83. }
  84. @media (prefers-reduced-motion: reduce) {
  85. .handle {
  86. transition: none;
  87. }
  88. }
  89. /*
  90. * The right column never clips: its occupant anchors a fixed-width panel to the
  91. * column's right edge (the frame's edge, which never moves) and lets the track
  92. * decide whether the centre makes room. With no track the panel hangs over the
  93. * centre from a zero-width column, and while the track animates the panel stays
  94. * where it is. The occupant draws its own left border.
  95. */
  96. .rightbarCol {
  97. position: relative;
  98. min-width: 0;
  99. overflow: visible;
  100. }
  101. .overlayLayer {
  102. position: absolute;
  103. inset: 0;
  104. z-index: 20;
  105. pointer-events: none;
  106. }
  107. .overlayLayer > * {
  108. pointer-events: auto;
  109. }