/* Set Default specificity preference */
@layer reset, base, layout;

@layer reset {
    *,
    *::before,
    *::after {
    box-sizing: border-box;
    }

    /* https://kilianvalkhof.com/2022/css-html/your-css-reset-needs-text-size-adjust-probably/ */
    html {
    -moz-text-size-adjust: none;
    -webkit-text-size-adjust: none;
    text-size-adjust: none;
    }

    body,
    h1,
    h2,
    h3,
    h4,
    p,
    figure,
    blockquote,
    dl,
    dd {
    margin: 0;
    }

    /* https://www.scottohara.me/blog/2019/01/12/lists-and-safari.html */
    [role="list"] {
    list-style: none;
    margin: 0;
    padding: 0;
    }

    body {
    min-block-size: 100vh;
    line-height: 1.6;
    }

    h1,
    h2,
    h3,
    button,
    input,
    label {
    line-height: 1.1;
    }

    h1,
    h2,
    h3,
    h4 {
    text-wrap: balance;
    }

    p,
    li {
    text-wrap: pretty;
    }

    img,
    picture {
    max-inline-size: 100%;
    display: block;
    }

    input,
    button,
    textarea,
    select {
    font: inherit;
    }
}

@layer base {
    :root {
        --clr-white: hsl(0, 0%, 100%);
        --clr-gray-50: hsl(0, 0%, 98%);
        --clr-gray-100: hsl(0, 0%, 95%);
        --clr-gray-200: hsl(0, 0%, 85%);
        --clr-gray-300: hsl(0, 0%, 70%);
        --clr-gray-400: hsl(0, 0%, 50%);
        --clr-gray-500: hsl(0, 0%, 30%);
        --clr-gray-600: hsl(0, 0%, 20%);
        --clr-gray-700: hsl(0, 0%, 15%);
        --clr-gray-800: hsl(0, 0%, 10%);
        --clr-gray-900: hsl(0, 0%, 5%);
    
        --clr-orange-400: hsl(28, 90%, 55%);
        --clr-orange-500: hsl(28, 90%, 50%);
        --clr-orange-600: hsl(28, 90%, 45%);
    
        --clr-red-400: hsl(0, 85%, 60%);
        --clr-red-500: hsl(0, 85%, 55%);
        --clr-red-600: hsl(0, 85%, 50%);
        --clr-red-700: hsl(0, 100%, 50%);
    
        --clr-green-400: hsl(142, 70%, 55%);
        --clr-green-500: hsl(142, 70%, 50%);
        --clr-green-600: hsl(142, 70%, 45%);

        --bg-primary: var(--clr-gray-50);
        --bg-secondary: var(--clr-white);
        --bg-header: var(--clr-gray-900);
        --text-primary: var(--clr-gray-900);
        --text-secondary: var(--clr-gray-600);
        --text-inverse: var(--clr-white);
        --border-color: var(--clr-gray-200);
        --card-bg: var(--clr-white);
        --card-border: var(--clr-gray-300);

        --ff-body: "Fira Sans", sans-serif;
        
        --fs-300: 0.875rem;
        --fs-400: 1rem;
        --fs-500: 1.125rem;
        --fs-600: 1.25rem;
        --fs-700: 1.5rem;
        --fs-800: 2rem;
        --fs-900: 3.75rem;
        --fs-1000: 3.75rem;
    }

    [data-theme="dark"] {
        --bg-primary: var(--clr-gray-900);
        --bg-secondary: var(--clr-gray-800);
        --bg-header: var(--clr-gray-900);
        --text-primary: var(--clr-gray-50);
        --text-secondary: var(--clr-gray-300);
        --text-inverse: var(--clr-gray-900);
        --border-color: var(--clr-gray-700);
        --card-bg: var(--clr-gray-800);
        --card-border: var(--clr-gray-700);
    }

    body {
        background-color: var(--bg-primary);
        font-family: var(--ff-body);
        color: var(--text-primary);
        transition: background-color 0.3s ease, color 0.3s ease;
    }
    
    a {
        color: var(--clr-white);
    }

    a:hover,
    a:focus-visible {
        color: var(--clr-gray-100)
    }

    .site-header {
        padding: 0.75rem 1rem;
        background-color: var(--bg-header);
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
        border-bottom: 1px solid var(--border-color);
    }

    .header-top {
        display: flex;
        align-items: center;
        justify-content: space-between;
        width: 100%;
    }

    .logo {
        max-width: 220px;
        max-height: 80px;
        width: auto;
        height: auto;
    }

    .theme-toggle {
        background: transparent;
        border: 2px solid var(--text-inverse);
        color: var(--text-inverse);
        padding: 0.5rem 1rem;
        border-radius: 0.5rem;
        cursor: pointer;
        font-size: var(--fs-400);
        transition: all 0.2s ease;
        margin-left: auto;
    }

    .theme-toggle:hover {
        background: var(--text-inverse);
        color: var(--bg-header);
    }
    
    .primary-nav {
        font-size: var(--fs-500);
        width: 100%;
    }
    
    .primary-nav ul {
        display: flex;
        padding: 0;
        margin: 0;
        list-style: none;
        gap: 1rem;
    }
    
    .primary-nav li {
        padding: 0;
    }

    .primary-nav a {
        color: var(--clr-white);
        text-decoration: none;
        transition: opacity 0.2s ease;
    }

    [data-theme="dark"] .primary-nav a {
        color: var(--clr-white);
    }

    .primary-nav a:hover {
        opacity: 0.8;
    }

    .info-section {
        display: inline-flex;
        justify-content:flex-end;
        padding-right: 0.75rem;
        padding-top: 0.75rem;
        width: 100%;
    }

    .info-text {
        font-weight: 600;
        padding: 0 10px;
        color: var(--text-secondary);
    }

    .sort-control {
        padding: 0 10px;
        display: flex;
        align-items: center;
    }

    .sort-control select {
        padding: 0.375rem 0.625rem;
        border: 1px solid var(--border-color);
        border-radius: 0.375rem;
        font-size: var(--fs-300);
        font-weight: 500;
        background-color: var(--card-bg);
        color: var(--text-primary);
        cursor: pointer;
        transition: all 0.2s ease;
    }

    .sort-control select:hover {
        border-color: var(--clr-orange-500);
    }

    .sort-control select:focus {
        outline: none;
        border-color: var(--clr-orange-500);
        box-shadow: 0 0 0 3px rgba(28, 90%, 50%, 0.15);
    }

    [data-theme="dark"] .sort-control select {
        background-color: var(--bg-primary);
        border-color: var(--clr-gray-600);
        color: var(--clr-gray-50);
    }

    [data-theme="dark"] .sort-control select:focus {
        border-color: var(--clr-orange-500);
        box-shadow: 0 0 0 3px rgba(28, 90%, 50%, 0.25);
    }

    .tasks-list {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        margin: 0.5rem;
        padding: 0;
    }

    .date-section {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        animation: fadeIn 0.3s ease-in;
    }

    .date-section-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 0.875rem 1.25rem;
        background: linear-gradient(135deg, var(--clr-orange-500) 0%, var(--clr-orange-600) 100%);
        color: var(--clr-white);
        border: none;
        border-radius: 0.75rem;
        cursor: pointer;
        font-size: var(--fs-500);
        font-weight: 700;
        transition: all 0.3s ease;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
        width: 100%;
        text-align: left;
    }

    .date-section-header:hover {
        background: linear-gradient(135deg, var(--clr-orange-400) 0%, var(--clr-orange-500) 100%);
        transform: translateY(-1px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
    }

    .date-section-header:active {
        transform: translateY(0);
    }

    .date-header-text {
        flex: 1;
    }

    .date-header-count {
        font-size: var(--fs-400);
        font-weight: 400;
        opacity: 0.9;
        margin: 0 1rem;
    }

    .date-header-icon {
        transition: transform 0.3s ease;
        width: 0;
        height: 0;
        border-top: 6px solid transparent;
        border-bottom: 6px solid transparent;
        border-left: 8px solid var(--clr-white);
        display: inline-block;
        vertical-align: middle;
        margin-left: 0.5rem;
        flex-shrink: 0;
    }

    .date-section.expanded .date-header-icon {
        transform: rotate(90deg);
        border-left-color: var(--clr-white);
    }

    .date-section.collapsed .date-header-icon {
        transform: rotate(0deg);
        border-left-color: var(--clr-white);
    }

    .date-section-content {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
        gap: 1rem;
        padding: 0.5rem 0;
        max-height: 5000px;
        opacity: 1;
        transition: max-height 0.4s ease, opacity 0.3s ease, padding 0.3s ease;
        overflow: hidden;
    }

    .date-section.collapsed .date-section-content {
        max-height: 0;
        opacity: 0;
        padding: 0;
        margin: 0;
    }

    .card {
        color: var(--text-primary);
        padding: 1rem;
        border: 1px solid var(--card-border);
        border-radius: 0.75rem;
        width: 100%;
        min-width: 250px;
        background-color: var(--card-bg);
        display: flex;
        flex-direction: column;
        gap: 0.625rem;
        transition: all 0.3s ease;
        animation: slideIn 0.4s ease-out;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
    }

    .card:hover {
        transform: translateY(-2px);
        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
        border-color: var(--clr-orange-500);
    }

    @keyframes fadeIn {
        from {
            opacity: 0;
            transform: translateY(-10px);
        }
        to {
            opacity: 1;
            transform: translateY(0);
        }
    }

    @keyframes slideIn {
        from {
            opacity: 0;
            transform: translateX(-20px);
        }
        to {
            opacity: 1;
            transform: translateX(0);
        }
    }

    .no-tasks,
    .error-message {
        text-align: center;
        padding: 2rem;
        color: var(--clr-gray-400);
        font-size: var(--fs-500);
        grid-column: 1 / -1;
    }

    .error-message {
        color: var(--clr-red-500);
    }
      
    .row {
        display: flex;
        justify-content: space-between;
        align-items: center;
        width: 100%;
    }

    .row-form {
        display: flex;
        flex-direction: column;
        width: 100%;
    }

    .row-inline {
        display: flex;
        gap: 0.75rem;
        width: 100%;
        margin-bottom: 0.75rem;
    }
    
    .row-inline .row-form {
        flex: 1;
        margin-bottom: 0;
    }
    
    .row-inline label {
        display: block;
        margin-bottom: 0.5rem;
    }
        
    .title {
        font-weight: bold;
        color: var(--text-primary);
    }

    .task-desc {
        white-space: nowrap;
        overflow-x: auto;
        margin-left: 10px;
    }

    .btn-group {
        display: flex;
        justify-content: center;
        gap: 0.5rem;
        width: 100%;
        margin-top: 0.5rem;
        margin-bottom: 0;
    }

    dialog .btn-group {
        margin-top: 1rem;
        margin-bottom: 0;
    }

    dialog button {
        padding: 0.625rem 1.25rem;
        font-size: var(--fs-400);
        min-height: 40px;
    }

    .controls {
        margin: 10px;
    }

    button {
        padding: 6px 12px;
        border: none;
        border-radius: 6px;
        text-align: center;
        cursor: pointer;
        font-size: var(--fs-300);
        font-weight: 500;
        transition: all 0.2s ease;
        min-height: 32px;
        touch-action: manipulation;
    }

    button:focus-visible {
        outline: 3px solid var(--clr-orange-500);
        outline-offset: 2px;
    }
    
    .btn-edit,.btn-submit,.btn-confirm,.btn-submit-new {
        background-color: var(--clr-green-500);
        color: var(--clr-white);
    }

    .btn-edit:hover,.btn-submit:hover,.btn-confirm:hover,.btn-submit-new:hover {
        background-color: var(--clr-green-400);
        color: var(--clr-white);
    }

    .btn-edit:active,.btn-submit:active,.btn-confirm:active, .btn-submit-new:active {
        background-color: var(--clr-green-600);
        transform: scale(0.97);
    }
    
    .btn-delete,.btn-clear,.btn-cancel,.btn-clearAll,.btn-cancel-new {
        background-color: var(--clr-red-500);
        color: var(--clr-white);
        border: none;
        transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
    }
    
    .btn-delete:hover,.btn-clear:hover,.btn-cancel:hover,.btn-clearAll:hover,.btn-cancel-new:hover {
        background-color: var(--clr-red-400);
    }
    
    .btn-delete:active,.btn-clear:active,.btn-cancel:active,.btn-clearAll:active,.btn-cancel-new:active {
        background-color: var(--clr-red-600);
        transform: scale(0.97);
    }

    .btn-success {
        background-color: #0c0cb0;
        color: var(--clr-white);
    }

    .btn-success:hover {
        background-color: #1414d2;
        color: var(--clr-white);
    }

    .btn-success:active {
        background-color: #1e1ef1;
        transform: scale(0.97);
    }

    .warning {
        color: var(--clr-red-500);
        font-weight: bold;
        text-align: center;
    }

    .text-norm {
        margin: 0;
        text-align: right;
        color: var(--text-primary);
    }
    /* Adjust to avoid Miss clicks */

    /* Center Modal Btn */
    #task-modal button, #settings-modal button { 
        display: block; 
        margin: 0 auto; }

    dialog {
        border: none;
        border-radius: 0.5rem;
        padding: 1.25rem 1.5rem;
        /* Cross-browser sizing (Firefox/iOS Safari can behave oddly with min-width + auto) */
        width: min(420px, calc(100vw - 2rem));
        max-height: min(70vh, calc(100vh - 2rem));
        overflow-y: auto;
        box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
        animation: modalFadeIn 0.3s ease-out;
        background-color: var(--card-bg);
        color: var(--text-primary);
        box-sizing: border-box;
    }

    /* iOS Safari: avoid viewport jump/overflows when URL bar changes size */
    @supports (-webkit-touch-callout: none) {
        dialog {
            max-height: min(75svh, calc(100svh - 2rem));
        }
    }

    /* Mobile: a bit tighter padding */
    @media (max-width: 480px) {
        dialog {
            padding: 1rem;
            width: calc(100vw - 1.25rem);
            max-height: calc(100vh - 1.25rem);
        }
    }

    [data-theme="dark"] dialog {
        background-color: var(--bg-secondary);
        color: var(--text-primary);
    }

    dialog h2,
    dialog h3 {
        margin-top: 0;
        margin-bottom: 0.75rem;
        font-size: var(--fs-500);
        line-height: 1.2;
        color: var(--text-primary);
    }

    [data-theme="dark"] dialog h2,
    [data-theme="dark"] dialog h3 {
        color: var(--clr-gray-50);
    }

    dialog p {
        margin-top: 0;
        margin-bottom: 0.75rem;
        font-size: var(--fs-400);
        line-height: 1.4;
        color: var(--text-primary);
    }

    [data-theme="dark"] dialog p {
        color: var(--clr-gray-200);
    }

    dialog::backdrop {
        background: rgba(0, 0, 0, 0.6);
        backdrop-filter: blur(4px);
        animation: backdropFadeIn 0.3s ease-out;
    }

    @keyframes modalFadeIn {
        from {
            opacity: 0;
            transform: scale(0.9) translateY(-20px);
        }
        to {
            opacity: 1;
            transform: scale(1) translateY(0);
        }
    }

    @keyframes backdropFadeIn {
        from {
            opacity: 0;
        }
        to {
            opacity: 1;
        }
    }

    /* Dialog heading styles */
    dialog.new-task h2,
    dialog.edit-task h2,
    dialog.delete-task h3 {
        margin-top: 0;
        margin-bottom: 0.75rem;
        font-size: var(--fs-500);
        line-height: 1.2;
        color: var(--text-primary);
    }

    /* Settings page form styling - separate from dialogs */
    .new-task:not(dialog) {
        width: 100%;
        max-width: 600px;
        margin: 2rem auto;
        padding: 1.5rem;
        background-color: var(--card-bg);
        border: 1px solid var(--card-border);
        border-radius: 0.75rem;
    }

    [data-theme="dark"] .new-task:not(dialog) {
        background-color: var(--bg-secondary);
        border-color: var(--clr-gray-700);
    }

    .new-task:not(dialog) fieldset {
        border: none;
        padding: 0;
        margin: 0;
    }

    .new-task:not(dialog) legend {
        font-size: var(--fs-500);
        font-weight: 700;
        color: var(--text-primary);
        margin-bottom: 1.25rem;
        padding: 0;
    }

    [data-theme="dark"] .new-task:not(dialog) legend {
        color: var(--clr-gray-50);
    }

    .row-form {
        margin-bottom: 0.75rem;
    }

    .row-form input,
    .row-form select {
        padding: 0.625rem 0.75rem;
        border: 1px solid var(--border-color);
        border-radius: 0.5rem;
        font-size: var(--fs-400);
        transition: all 0.2s ease;
        width: 100%;
        background-color: var(--card-bg);
        color: var(--text-primary);
        line-height: 1.5;
    }

    [data-theme="dark"] .row-form input,
    [data-theme="dark"] .row-form select {
        background-color: var(--bg-primary);
        border-color: var(--clr-gray-600);
        color: var(--clr-gray-50);
    }

    .row-form input:focus,
    .row-form select:focus {
        outline: none;
        border-color: var(--clr-orange-500);
        box-shadow: 0 0 0 3px rgba(28, 90%, 50%, 0.15);
    }

    [data-theme="dark"] .row-form input:focus,
    [data-theme="dark"] .row-form select:focus {
        border-color: var(--clr-orange-500);
        box-shadow: 0 0 0 3px rgba(28, 90%, 50%, 0.25);
        background-color: var(--bg-primary);
    }

    .row-form label {
        font-weight: 600;
        color: var(--text-primary);
        margin-bottom: 0.5rem;
        font-size: var(--fs-400);
        line-height: 1.4;
    }

    [data-theme="dark"] .row-form label {
        color: var(--clr-gray-100);
    }

    .controls {
        display: flex;
        flex-wrap: wrap;
        gap: 0.5rem;
        margin: 0.75rem 0.5rem;
        justify-content: center;
        align-items: center;
    }

    .btn-sample,
    .btn-newTask,
    .btn-clearAll {
        min-width: 100px;
        max-width: 120px;
        width: 100%;
        font-weight: 600;
        padding: 6px 12px;
        height: 32px;
        line-height: 1.4;
        font-size: var(--fs-300);
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .btn-newTask {
        background-color: var(--clr-orange-500);
        color: var(--clr-white);
    }

    .btn-newTask:hover {
        background-color: var(--clr-orange-400);
    }

    .btn-newTask:active {
        background-color: var(--clr-orange-600);
    }

    .btn-sample {
        background-color: var(--clr-gray-500);
        color: var(--clr-white);
    }

    .btn-sample:hover {
        background-color: var(--clr-gray-400);
    }

    .btn-sample:active {
        background-color: var(--clr-gray-600);
    }

    @media (max-width: 768px) {
        .tasks-list {
            margin: 0.5rem;
            gap: 1rem;
        }

        .date-section-header {
            padding: 0.875rem 1rem;
            font-size: var(--fs-500);
        }

        .date-header-count {
            font-size: var(--fs-300);
            margin: 0 0.5rem;
        }

        .date-section-content {
            grid-template-columns: 1fr;
            gap: 0.75rem;
        }

        .card {
            min-width: unset;
            padding: 1rem;
            gap: 0.5rem;
        }

        .controls {
            flex-direction: column;
            margin: 1rem 0.5rem;
        }

        .btn-sample,
        .btn-newTask,
        .btn-clearAll {
            width: 100%;
        }

        .info-section {
            flex-direction: row;
            align-items: center;
            justify-content: flex-end;
            flex-wrap: wrap;
            gap: 0.25rem;
            padding: 0.5rem;
        }

        .info-text {
            padding: 0 5px;
            font-size: var(--fs-300);
        }

        .sort-control {
            padding: 0 5px;
        }

        .sort-control select {
            font-size: var(--fs-300);
            padding: 0.25rem 0.5rem;
        }

        dialog {
            padding: 1rem;
            max-width: 95vw;
        }

        .row-inline {
            flex-direction: column;
            gap: 0;
        }

        .logo {
            margin: auto;
            max-inline-size: 90%;
            display: block;
        }
    }

    @media (max-width: 480px) {
        .date-section-header {
            padding: 0.75rem;
            font-size: var(--fs-400);
        }

        .card {
            padding: 0.875rem;
        }

        .btn-group {
            flex-direction: column;
        }

        .btn-group button {
            width: 100%;
        }
    }
}
